網路城邦
上一篇 回創作列表 下一篇   字體:
Python機器學習筆記(九):準備平時考 - 將數據集區分為訓練用與測試用,以便對模型訓練成效做驗證
2020/04/19 16:59:37瀏覽3015|回應0|推薦7

Python機器學習筆記(九):準備平時考 - 將數據集區分為訓練用與測試用,以便對模型訓練成效做驗證


建構演算法模型的目的,是希望經由對現有資料的分析了解,能對未來「還沒看過」的資料進行精準的預測。但當我們對現有資料學習分析老半天後,我們要如何知道當前的學習成效好不好?想像對「還沒看過」的資料進行預測分析,就像一場期末大考,為求能高分通過期末考試,在大考前,我們需安排些平時考來驗收學習成效,將數據集區分為訓練用與測試用,是對演算法進行平時考的方法之一。


將數據集區分為訓練用與測試用,其背後想法很簡單,先將數據集分為二組資料,演算法模型只能「看到」訓練用資料,並藉此得到學習結果,最後再將先前「還沒看過」的測試資料的「特徵項目」餵給學習後的演算法模型看,藉此推導出「預測類別標籤」,再將「預測類別標籤」與測試用資料的「實際類別標籤」作比較,若「預測類別標籤」猜中「實際類別標籤」的比例愈高,就表示演算法模型的學習成效愈好,好比平時考得到比較好的成績。


為方便以下說明,假設X為我們要拿來分析的數據集的「特徵項目」矩陣(如「性別」、「年齡」「上月消費金額」等資訊),y為「類別標籤」向量(如是否會購買促銷商品),假設資料集僅有A、B二種類別標籤,A與B之間的數量比例為4:6。


一、僅考一次平時考:使用train_test_split類別,以及演算法模型評估器的score方法


scikit-learn中model_selection子模組的train_test_split類別函數,可以很方便地將數據集隨機劃分為訓練數據集與測試數據集。訓練數據集的「特徵項目」,我們設為X_train,「類別標籤」為y_train。相對地,X_test及y_test,則分別是測試數據集的「特徵項目」及「類別標籤」。


scikit-learn實作的演算法評估器,在叫用fit方法,利用訓練數據集的「特徵項目」X_train及「類別標籤」y_train資料訓練完後,可利用scoret方法,餵給它測試數據集的「特徵項目」X_test,以此產生預測的「類別標籤」資料y_pred,而預測出的y_pred再與測試數據集的實際「類別標籤」y_test做比對,計算出演算法模型預測正確的比率。


1.匯入train_test_split類別

from sklearn.model_selection import train_test_split


2.將資料集劃分為訓練數據集(X_train、y_train)及測試數據集(X_test、y_test)

X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2,  stratify=y )

(1) test_size參數是設定要從數據集裏隨機抽取多少比例的資料作為測試數據集。設test_size=0.2,表示抽取20%的數據集資料作為測試數據集。

(2)參數stratify=y,可讓測試數據集的「類別標籤」A與B二者的比例,與整體數據集一致皆為4:6。


3.初始化一個訓練前的演算法模型


4.叫用fit方法,利用訓練數據集訓練演算法模型

訓練後演算法模型 = 訓練前演算法模型.fit( X_train, y_train )


5.叫用score方法,利用測試數據集驗證演算法模型的預測成效

驗證分數 = 訓練後演算法模型.score( X_test, y_test )


二、全面複習,並準備多次平時考:cross_val_score類別


第一種驗證模型方法有個缺點,即在模型訓練時少了一部份數據,以上面例子為例,因有20%的數據挪作為測試數據集,這些數據在訓練模型時沒有做出任何貢獻。為解決這個問題,可採用cross-validation方式,即執行一系列的數據分組訓練,數據集中的每個部份,都必須被當作訓練用及測試用數據集使用過。

我們以圖一為例說明cross-validation,我們將數據集區分為fold1、fold2等至fold5這五組資料,而每一組資料的「類別標籤」的A與B的比例,與整體數據集都一樣是4:6。第一輪時,將事先分組好的fold1當作測試數據集,其餘四組則作為訓練數據集,利用與第一種方式相同的程序,可得出第一輪的驗證分數。第二輪時,則改以fold2為測試數據集,其他四組則是訓練用數據集,同樣可得出第二輪的驗證分數。依同樣方式處理,可依序得出第三、第四及第五輪的驗證分數,這樣我們就有個整體性的輪廓來評估演算法模型的訓練成效。

1.匯入cross_val_score類別

from sklearn.model_selection import cross_val_score

2.數據集分組、訓練演算法模型及評估訓練結果,一氣呵成

5輪驗證分數 = cross_val_score( 訓練前演算法模型, X, y, cv=5 )

(1)cv=5的參數設定,是指定將數據集分為5組,並進行5輪的模型成效驗證。

( 知識學習其他 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=gwogo&aid=132577192