【機器學習】機器學習模型訓練與測試評估
模型訓練
- 模型選擇
對於特定任務最優建模方法的選擇或者對特定模型最佳引數的選擇
- 交叉驗證
在訓練資料集上執行模型(演算法)並且在測試資料集上測試效果,迭代 更新資料模型的修改,這種方式被稱為“交叉驗證”(將資料分為訓練集 和 測試集),使用訓練集構建模型,並使用測試集評估模型提供修改建議。
模型的選擇會盡可能多的選擇演算法進行執行,並比較每個演算法的執行結果
模型測試
模型的測試一般從以下幾個方面來進行比較:準確率、召回率、精確率、F值、ROC、AUC
- 混淆矩陣
- 準確率
準確率(Accuracy) = 提取出的正確樣本數/總樣本數
- 召回率
召回率(Recall) = 正確的正例樣本數/樣本中正例樣本數 ——覆蓋率
- 精確率
精確率(Precision) = 正確的正例樣本數/預測為正例的樣本數
- F值
F值 = Precision * Recall * 2 / (Precision + Recall)
即正確率和召回率的調和平均值
- ROC
ROC描述的是分類混淆矩陣中FPR-TPR兩個量之間的相對變化情況,ROC曲線的縱軸是“真正例率(TPR)”,橫軸是“假正例率(FPR)”。
如果二元分類輸出的是對正樣本的一個分類概率值,當去不同閥值時會得到不同的混淆矩陣,對應於ROC曲線上的一個點。那麼ROC曲線就反映了FPR和TPR之間權衡的情況,通俗地來說,即在TPR隨著FPR遞增的情況下,誰增長得更快,快多少的問題。
TPR增長得越快,曲線越往上屈,AUC就越大,反映了模型的分類效能就越好。當正負樣本不平衡時,這種模型評價方式比起一般的精確度評價方式的好處尤其顯著。
- AUC
AUC的值越大表示模型越好
AUC被定義為ROC曲線下的面積,顯然這個面積的數值不會大於1,又由於ROC曲線一般都處於 這條直線的上方,所以AUC取值範圍在0.5和1之間。
使用AUC值作為評價標準是因為很多時候ROC曲線並不能清晰的說明哪個分類器的效果好,而AUC作為數值可以直觀的評價分類器的好壞,值越大越好。
AUC = 1,是完美分類器,採用這個預測模型時,不管設定什麼閥值都能得出完美預測。絕大數預測的場合,不存在完美分類器;
AUC = 0.5,跟隨機猜測一樣,模型沒有預測價值;
0.5 < AUC < 1,由於隨機猜測,妥善設定閥值,有預測價值;
AUC < 0.5,比隨機猜測還差,但只要總是反預測而行,比隨機猜測好。
模型評估
- 迴歸演算法評估方式
指標 | 描述 | scikit-learn函式 |
---|---|---|
Mean Square Error(MSE, RMSE) | 平均誤差 | from sklearn.metrics import mean_squared_error |
Absolute Error(MAE, RAE) | 絕對誤差 | from sklearn.metrics import mean_absolute_error,median_absolute_error |
R-Squared | R平方值 | from sklearn.metrics import r2_score |
- 分類演算法評估方式
指標 | 描述 | scikit-learn函式 |
---|---|---|
Precision | 精確度 | from sklearn.metrics import precision_score |
Recall | 召回率 | from sklearn.metrics import recall_score |
F1 | F1值 | from sklearn.metrics import f1_score |
Confusion Matrix | 混淆矩陣 | from sklearn.metrics import confusion_matrix |
ROC | ROC曲線 | from sklearn.metrics import roc |
AUC | ROC曲線下的面積 | from sklearn.metrics import auc |