日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如果不能用Python執(zhí)行機(jī)器學(xué)習(xí),那該用什么呢?

 本文轉(zhuǎn)載自公眾號“讀芯術(shù)”(ID:AI_Discovery)

長期學(xué)習(xí)數(shù)據(jù)科學(xué)的人一定知道如何用Python、R和Julia這些語言執(zhí)行機(jī)器學(xué)習(xí)任務(wù)。然而,如果速度很關(guān)鍵,但硬件很有限,或者所在公司僅使用SQL進(jìn)行預(yù)測分析,又該怎么辦呢?答案就是——數(shù)據(jù)庫內(nèi)的機(jī)器學(xué)習(xí)。

本文使用的是Oracle Cloud。它是免費(fèi)的,你可以注冊并創(chuàng)建一個OLTP數(shù)據(jù)庫 (19c版本,有0.2TB的存儲空間)。完成之后,下載云錢包并通過SQL Developer或任何其他工具建立連接。這個過程至少要花費(fèi)10分鐘,但操作很簡單,所以這里不多做贅述。

下面將使用Oracle機(jī)器學(xué)習(xí)(OML)在著名的Iris數(shù)據(jù)集中訓(xùn)練一個分類模型。選擇它是因?yàn)闊o須任何準(zhǔn)備,只需要創(chuàng)建表格并插入數(shù)據(jù)。

數(shù)據(jù)準(zhǔn)備

如前所述,要創(chuàng)建一個表格來保存Iris數(shù)據(jù)集,然后將數(shù)據(jù)加載到其中。OML要求使用一個列作為行ID(序列),因此要記?。?/p>

 
 
 
 
  1. CREATE SEQUENCE seq_iris;
  2. CREATE TABLE iris_data(
  3.     iris_id      NUMBER DEFAULT seq_iris.NEXTVAL,
  4.     sepal_length NUMBER,
  5.     sepal_width  NUMBER,
  6.     petal_length NUMBER,
  7.     petal_width  NUMBER,
  8.     species      VARCHAR2(16)
  9. );

現(xiàn)在可以下載數(shù)據(jù)并進(jìn)行加載了:

當(dāng)一個模態(tài)窗口彈出時,只需提供下載CSV的路徑并多次點(diǎn)擊Next。SQL開發(fā)員無需幫助也能正確完成工作。

模型訓(xùn)練

現(xiàn)在可以動手做一些有趣的事情了。訓(xùn)練分類模型可以分解為多個步驟,例如訓(xùn)練/測試分割、模型訓(xùn)練和模型評估,我們從最簡單的開始。

訓(xùn)練/測試分割

Oracle常用兩個視圖完成該步驟:一個用于訓(xùn)練數(shù)據(jù),一個用于測試數(shù)據(jù)??梢暂p松創(chuàng)建這些神奇PL/SQL:

 
 
 
 
  1. BEGIN
  2.     EXECUTE IMMEDIATE 
  3.         ‘CREATE OR REPLACE VIEW 
  4.         iris_train_data AS 
  5.         SELECT * FROM iris_data 
  6.         SAMPLE (75) SEED (42)’;
  7.     EXECUTE IMMEDIATE 
  8.         ‘CREATE OR REPLACE VIEW 
  9.         iris_test_data AS 
  10.         SELECT * FROM iris_data 
  11.         MINUS 
  12.         SELECT * FROM iris_train_data’;
  13. END;
  14. /

該腳本完成下列兩件事:

  • 創(chuàng)建一個訓(xùn)練視圖-75%的數(shù)據(jù) (SAMPLE (75)) 在隨機(jī)種子42中分割( SEED (42))。
  • 創(chuàng)建一個測試視圖-區(qū)分整個數(shù)據(jù)集和訓(xùn)練視圖

數(shù)據(jù)儲存在叫做iris_train_data和iris_test_data的視圖中,猜猜看它們分別存什么。

 
 
 
 
  1. SELECT COUNT(*) FROM iris_train_data;
  2. >>> 111
  3. SELECT COUNT(*) FROM iris_test_data;
  4. >>> 39

模型訓(xùn)練

模型訓(xùn)練最簡單的方法是無須創(chuàng)建額外的設(shè)置表格,只執(zhí)行單一過程的DBMS_DATA_MINING包。使用決策樹算法來訓(xùn)練模型。方法如下:

 
 
 
 
  1. DECLARE 
  2.     v_setlstDBMS_DATA_MINING.SETTING_LIST;
  3. BEGIN
  4.     v_setlst(‘PREP_AUTO’) := ‘ON’;
  5.     v_setlst(‘ALGO_NAME’) :=‘ALGO_DECISION_TREE’;
  6.  
  7.     DBMS_DATA_MINING.CREATE_MODEL2(
  8.         ‘iris_clf_model’,
  9.         ‘CLASSIFICATION’,
  10.         ‘SELECT * FROM iris_train_data’,
  11.         v_setlst,
  12.         ‘iris_id’,
  13.         ‘species’
  14.     );
  15. END;
  16. /

CREATE_MODEL2過程接受多種參數(shù)。接著我們對進(jìn)入的參數(shù)進(jìn)行解釋:

  • iris_clf_model — 只是模型名稱,它可以是任何東西。
  • CLASSIFICATION — 正在進(jìn)行的機(jī)器學(xué)習(xí)任務(wù),因某種原因必須大寫。
  • SELECT * FROM iris_train_data — 指定訓(xùn)練數(shù)據(jù)存儲位置。
  • v_setlst — 模型的上述設(shè)置列表。
  • iris_id — 序列類型列的名稱(每個值都是唯一的)。
  • species — 目標(biāo)變量的名稱(試圖預(yù)測的東西)

執(zhí)行這一模塊需要一到兩秒鐘,執(zhí)行完畢就可以開始計(jì)算了!

模型評價

使用該腳本評估此模型:

 
 
 
 
  1. BEGIN
  2.     DBMS_DATA_MINING.APPLY(
  3.         ‘iris_clf_model’, 
  4.         ‘iris_test_data’, 
  5.         ‘iris_id’, 
  6.         ‘iris_apply_result’
  7.     );
  8. END;
  9. /

它將iris_clf_model應(yīng)用于不可見測試數(shù)據(jù)iris_test_data,并將評估結(jié)果存儲到iris_apply_result表中。

行數(shù)更多(39×3),但突顯了要點(diǎn)。這還不夠直觀,所以下面以一種稍微不同的方式來展示結(jié)果:

 
 
 
 
  1. DECLARE 
  2.      CURSOR iris_ids IS 
  3.          SELECT DISTINCT(iris_id) iris_id
  4.          FROM iris_apply_result 
  5.          ORDER BY iris_id;
  6.      curr_y      VARCHAR2(16);
  7.      curr_yhat   VARCHAR2(16);
  8.      num_correct INTEGER := 0;
  9.      num_total   INTEGER := 0;
  10. BEGIN
  11.     FOR r_id IN iris_ids LOOP
  12.         BEGIN
  13.             EXECUTE IMMEDIATE 
  14.                 ‘SELECT species FROM 
  15.                 iris_test_data 
  16.                 WHERE iris_id = ‘ ||r_id.iris_id
  17.                 INTO curr_y;
  18.             EXECUTE IMMEDIATE 
  19.                 ‘SELECT prediction 
  20.                 FROM iris_apply_result 
  21.                 WHERE iris_id = ‘ ||r_id.iris_id || 
  22.                ‘AND probability = (
  23.                    SELECTMAX(probability) 
  24.                        FROMiris_apply_result 
  25.                        WHERE iris_id = ‘|| r_id.iris_id || 
  26.                    ‘)’ INTO curr_yhat;
  27.         END;
  28.  
  29.         num_total := num_total + 1;
  30.         IF curr_y = curr_yhat THEN 
  31.             num_correct := num_correct +1;
  32.         END IF; 
  33.     END LOOP;
  34.  
  35.     DBMS_OUTPUT.PUT_LINE(‘Num. testcases: ‘ 
  36.         || num_total);
  37.     DBMS_OUTPUT.PUT_LINE(‘Num. correct :‘ 
  38.         || num_correct);
  39.     DBMS_OUTPUT.PUT_LINE(‘Accuracy : ‘ 
  40.         || ROUND((num_correct /num_total), 2));
  41. END;
  42. /

確實(shí)很多,但上述腳本不能再簡化了。下面進(jìn)行分解:

  • CURSOR—得到所有不同的iris_ids(因?yàn)閕ris_apply_results 表中有重復(fù))。
  • curr_y, curr_yhat, num_correct, num_total 是存儲每次迭代中的實(shí)際種類和預(yù)測種類、正確分類數(shù)量和測試項(xiàng)總數(shù)的變量。
  • 對于每個唯一的iris_id 得到實(shí)際種類(來自匹配ID的iris_test_data)和預(yù)測種類(在 iris_apply_results 表中預(yù)測概率最高)
  • 輕松檢查實(shí)際值和預(yù)測值是否相同——這表明分類是正確的。
  • 變量 num_total 和 num_correct 在每次迭代中更新。
  • 最后,將模型性能打印到控制臺。

下面為該腳本輸出:

  • 測試集有39個用例
  • 39個樣本中,正確分類的有37個
  • 結(jié)果準(zhǔn)確率為95%

以上就是模型評估的基本內(nèi)容。

并不是所有人在工作中都能使用Python,現(xiàn)在,你又掌握了一種解決機(jī)器學(xué)習(xí)任務(wù)的方法。


文章題目:如果不能用Python執(zhí)行機(jī)器學(xué)習(xí),那該用什么呢?
文章分享:http://www.5511xx.com/article/dhcgegi.html