這篇文章主要介紹“如何解決不能用Python執(zhí)行機器學習問題”,在日常操作中,相信很多人在如何解決不能用Python執(zhí)行機器學習問題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何解決不能用Python執(zhí)行機器學習問題”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供舒蘭網(wǎng)站建設、舒蘭做網(wǎng)站、舒蘭網(wǎng)站設計、舒蘭網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、舒蘭企業(yè)網(wǎng)站模板建站服務,十多年舒蘭做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。
如前所述,要創(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ù)并進行加載了:
當一個模態(tài)窗口彈出時,只需提供下載CSV的路徑并多次點擊Next。SQL開發(fā)員無需幫助也能正確完成工作。
模型訓練
現(xiàn)在可以動手做一些有趣的事情了。訓練分類模型可以分解為多個步驟,例如訓練/測試分割、模型訓練和模型評估,我們從最簡單的開始。
訓練/測試分割
Oracle常用兩個視圖完成該步驟:一個用于訓練數(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)建一個訓練視圖-75%的數(shù)據(jù) (SAMPLE (75)) 在隨機種子42中分割( SEED (42))。
創(chuàng)建一個測試視圖-區(qū)分整個數(shù)據(jù)集和訓練視圖
數(shù)據(jù)儲存在叫做iris_train_data和iris_test_data的視圖中,猜猜看它們分別存什么。
SELECT COUNT(*) FROM iris_train_data; >>> 111 SELECT COUNT(*) FROM iris_test_data; >>> 39
模型訓練
模型訓練最簡單的方法是無須創(chuàng)建額外的設置表格,只執(zhí)行單一過程的DBMS_DATA_MINING包。使用決策樹算法來訓練模型。方法如下:
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ù)。接著我們對進入的參數(shù)進行解釋:
iris_clf_model — 只是模型名稱,它可以是任何東西。
CLASSIFICATION — 正在進行的機器學習任務,因某種原因必須大寫。
SELECT * FROM iris_train_data — 指定訓練數(shù)據(jù)存儲位置。
v_setlst — 模型的上述設置列表。
iris_id — 序列類型列的名稱(每個值都是唯一的)。
species — 目標變量的名稱(試圖預測的東西)
執(zhí)行這一模塊需要一到兩秒鐘,執(zhí)行完畢就可以開始計算了!
使用該腳本評估此模型:
BEGIN DBMS_DATA_MINING.APPLY( ‘iris_clf_model’, ‘iris_test_data’, ‘iris_id’, ‘iris_apply_result’ ); END; /
它將iris_clf_model應用于不可見測試數(shù)據(jù)iris_test_data,并將評估結(jié)果存儲到iris_apply_result表中。
行數(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; /
確實很多,但上述腳本不能再簡化了。下面進行分解:
CURSOR—得到所有不同的iris_ids(因為iris_apply_results 表中有重復)。
curr_y, curr_yhat, num_correct, num_total 是存儲每次迭代中的實際種類和預測種類、正確分類數(shù)量和測試項總數(shù)的變量。
對于每個唯一的iris_id 得到實際種類(來自匹配ID的iris_test_data)和預測種類(在 iris_apply_results 表中預測概率最高)
輕松檢查實際值和預測值是否相同——這表明分類是正確的。
變量 num_total 和 num_correct 在每次迭代中更新。
最后,將模型性能打印到控制臺。
下面為該腳本輸出:
測試集有39個用例
39個樣本中,正確分類的有37個
結(jié)果準確率為95%
到此,關于“如何解決不能用Python執(zhí)行機器學習問題”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
本文名稱:如何解決不能用Python執(zhí)行機器學習問題
本文URL:http://weahome.cn/article/igcjej.html