溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何解決不能用Python執(zhí)行機(jī)器學(xué)習(xí)問題

發(fā)布時間:2021-10-25 13:45:57 來源:億速云 閱讀:90 作者:iii 欄目:編程語言

這篇文章主要介紹“如何解決不能用Python執(zhí)行機(jī)器學(xué)習(xí)問題”,在日常操作中,相信很多人在如何解決不能用Python執(zhí)行機(jī)器學(xué)習(xí)問題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何解決不能用Python執(zhí)行機(jī)器學(xué)習(xí)問題”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

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

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

CREATE SEQUENCE seq_iris; CREATE TABLE iris_data(     iris_id      NUMBER DEFAULT seq_iris.NEXTVAL,     sepal_length NUMBER,     sepal_width  NUMBER,     petal_length NUMBER,     petal_width  NUMBER,     species      VARCHAR2(16) );

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

如何解決不能用Python執(zhí)行機(jī)器學(xué)習(xí)問題

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

如何解決不能用Python執(zhí)行機(jī)器學(xué)習(xí)問題

模型訓(xùn)練

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

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

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

BEGIN     EXECUTE IMMEDIATE          ‘CREATE OR REPLACE VIEW          iris_train_data AS          SELECT * FROM iris_data          SAMPLE (75) SEED (42)’;     EXECUTE IMMEDIATE          ‘CREATE OR REPLACE VIEW          iris_test_data AS          SELECT * FROM iris_data          MINUS          SELECT * FROM iris_train_data’; END; /

該腳本完成下列兩件事:

  • 創(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的視圖中,猜猜看它們分別存什么。

SELECT COUNT(*) FROM iris_train_data; >>> 111 SELECT COUNT(*) FROM iris_test_data; >>> 39

模型訓(xùn)練

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

DECLARE      v_setlstDBMS_DATA_MINING.SETTING_LIST; BEGIN     v_setlst(‘PREP_AUTO’) := ‘ON’;     v_setlst(‘ALGO_NAME’) :=‘ALGO_DECISION_TREE’;       DBMS_DATA_MINING.CREATE_MODEL2(         ‘iris_clf_model’,         ‘CLASSIFICATION’,         ‘SELECT * FROM iris_train_data’,         v_setlst,         ‘iris_id’,         ‘species’     ); END; /

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í)行完畢就可以開始計算了!

模型評價

使用該腳本評估此模型:

BEGIN     DBMS_DATA_MINING.APPLY(         ‘iris_clf_model’,          ‘iris_test_data’,          ‘iris_id’,          ‘iris_apply_result’     ); END; /

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

如何解決不能用Python執(zhí)行機(jī)器學(xué)習(xí)問題

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

DECLARE       CURSOR iris_ids IS           SELECT DISTINCT(iris_id) iris_id          FROM iris_apply_result           ORDER BY iris_id;      curr_y      VARCHAR2(16);      curr_yhat   VARCHAR2(16);      num_correct INTEGER := 0;      num_total   INTEGER := 0; BEGIN     FOR r_id IN iris_ids LOOP         BEGIN             EXECUTE IMMEDIATE                  ‘SELECT species FROM                  iris_test_data                  WHERE iris_id = ‘ ||r_id.iris_id                 INTO curr_y;             EXECUTE IMMEDIATE                  ‘SELECT prediction                  FROM iris_apply_result                  WHERE iris_id = ‘ ||r_id.iris_id ||                 ‘AND probability = (                    SELECTMAX(probability)                         FROMiris_apply_result                         WHERE iris_id = ‘|| r_id.iris_id ||                     ‘)’ INTO curr_yhat;         END;           num_total := num_total + 1;         IF curr_y = curr_yhat THEN              num_correct := num_correct +1;         END IF;      END LOOP;       DBMS_OUTPUT.PUT_LINE(‘Num. testcases: ‘          || num_total);     DBMS_OUTPUT.PUT_LINE(‘Num. correct :‘          || num_correct);     DBMS_OUTPUT.PUT_LINE(‘Accuracy : ‘          || ROUND((num_correct /num_total), 2)); END; /

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

  • CURSOR—得到所有不同的iris_ids(因為iris_apply_results 表中有重復(fù))。

  • curr_y, curr_yhat, num_correct, num_total  是存儲每次迭代中的實際種類和預(yù)測種類、正確分類數(shù)量和測試項總數(shù)的變量。

  • 對于每個唯一的iris_id 得到實際種類(來自匹配ID的iris_test_data)和預(yù)測種類(在 iris_apply_results  表中預(yù)測概率最高)

  • 輕松檢查實際值和預(yù)測值是否相同——這表明分類是正確的。

  • 變量 num_total 和 num_correct 在每次迭代中更新。

  • 最后,將模型性能打印到控制臺。

下面為該腳本輸出:

如何解決不能用Python執(zhí)行機(jī)器學(xué)習(xí)問題 
  • 測試集有39個用例

  • 39個樣本中,正確分類的有37個

  • 結(jié)果準(zhǔn)確率為95%

到此,關(guān)于“如何解決不能用Python執(zhí)行機(jī)器學(xué)習(xí)問題”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI