典型分类器评价指标及实例
一、概述
- 在NLP中,經常需要使用機器學習的分類器。
- 衡量分類器最常見的指標:準確率與召回率、準確度與F1-Score以及ROC與AUC。
- 注意:本文以 Scikit-Learn 為環境
二、實驗數據
1、導入相關庫
from sklearn.cross_validation import train_test_split from sklearn.datasets import make_classification from sklearn.neighbors import KNeighborsClassifier2、生成數據
為了演示,我們生成數據,數據一共1000條記錄,每條記錄100個特征,內容隨機生成。
## 數據集生成 x, y = make_classification(n_samples=1000, n_features=100, n_redundant=0, random_state=1) train_X, test_X, train_y, test_y = train_test_split(x, y, test_size=0.2, random_state=555)3、分類器訓練與預測
## KNN訓練與預測 knn = KNeighborsClassifier(n_neighbors=5) knn.fit(train_X, train_y) pred_y = knn.predict(test_X)三、混淆矩陣(Confusion Matrix)
1、概述
混淆矩陣(Confusion Matrix):將分類問題按照真實情況與判別情況兩個維度進行歸類的一個矩陣,在二分類問題中,可以用一個 2×22\times 22×2 的矩陣表示。
- 如下圖所示,TP 表示實際為真預測為真,TN 表示實際為假預測為假,FN 表示實際為真預測為假,通俗講就是漏報了,FP 表示實際為假預測為真,通俗講就是誤報了。
2、實現
from sklearn.metrics import confusion_matrixconf_m = confusion_matrix(test_y, pred_y) print('confusion matrix: \n', conf_m)輸出結果
confusion matrix: [[59 49][17 75]]四、準確率與召回率
1、概述
機器學習中最基本指標是 召回率(Recall Rate,也稱 查全率) 和 準確率(Precision Rate,也稱查準率)。其計算公式如下:
precision=TPTP+FPprecision=\frac{TP}{TP+FP}precision=TP+FPTP?
recall=TPTP+FNrecall=\frac{TP}{TP+FN}recall=TP+FNTP?
通俗示例:某池塘有1400條鯉魚,300只蝦,300只鱉?,F在以捕鯉魚為目的。撒一大網,逮著了700條鯉魚,200只蝦,100只鱉。那么,這些指標分別如下:
precision=700700+200+100=70%precision=\frac{700}{700+200+100}=70\%precision=700+200+100700?=70%
recall=7001400=50%recall=\frac{700}{1400}=50\%recall=1400700?=50%
2、實現
from sklearn.metrics import precision_score, recall_scoreprecision = precision_score(test_y, pred_y) print("precision score: ", precision) recall = recall_score(test_y, pred_y) print("recall score: ", recall)輸出結果
precision score: 0.6048387096774194 recall score: 0.8152173913043478五、準確度 與 F1-Score
1、概述
-
準確度(Accuracy) :對檢測結果一個均衡的評價,對于給定的測試數據集,分類器正確分類的樣本數與總樣本數之比。也就是損失函數是 0-1損失 時測試數據集上的準確率。它的定義如下:
Accuracy=TP+TNP+N=TP+TNTP+TN+FP+FNAccuracy=\frac{TP+TN}{P+N}=\frac{TP+TN}{TP+TN+FP+FN}Accuracy=P+NTP+TN?=TP+TN+FP+FNTP+TN? -
F1-Score:對準確率和召回率的一個均衡評價,F1值就是精確值和召回率的調和均值, 也就是
2F1=1Precision+1Recall\frac{2}{F_1} = \frac{1}{Precision} + \frac{1}{Recall} F1?2?=Precision1?+Recall1?
也就是
F1=2Precision×RecallPrecision+Recall=2TP2TP+FP+FNF_1 = \frac{2Precision\times{Recall}}{Precision+{Recall}} = \frac{2TP}{2TP + FP + FN}F1?=Precision+Recall2Precision×Recall?=2TP+FP+FN2TP?
?
國內外不少數據挖掘比賽都是重點關注F1-Score的值。
2、實現
from sklearn.metrics import accuracy_score, f1_scoreacc = accuracy_score(test_y, pred_y) print("accuracy score: ", acc) f1 = f1_score(test_y, pred_y) print("F1 score: ", f1)輸出結果
accuracy score: 0.67 F1 score: 0.6944444444444445六、ROC 與 AUC
1、概述
ROC(Receiver Operating Characteristic Curve,受試者工作特征曲線):以TPR(True Position Rate,真陽性率)為縱坐標,FPR(False Position Rate,假陽性率)為橫坐標繪制的曲線,是反映靈敏性和特效性連續變量的綜合指標。一般認為ROC越光滑說明分類算法過擬合的概率越低,越接近左上角說明分類性能越好。
AUC(Area Under the Receiver Operating Characteristic Curve) 就是量化衡量ROC分類性能的指標,如下圖所示,物理含義是ROC曲線的面積,AUC越大越好。
2、實現
from sklearn.metrics import auc, roc_curve, roc_auc_score import matplotlib.pyplot as pltf_pos, t_pos, thresh = roc_curve(test_y, pred_y) auc_area = auc(f_pos, t_pos) plt.plot(f_pos, t_pos, 'darkorange', lw=2, label='AUC = %.2f' % auc_area) plt.legend(loc='lower right') plt.plot([0, 1], [0, 1], color='navy', linestyle='--') plt.title('ROC') plt.ylabel('True Pos Rate') plt.xlabel('False Pos Rate') plt.show()print("AUC: ", roc_auc_score(test_y, pred_y))輸出結果
AUC: 0.680756843800322總結
以上是生活随笔為你收集整理的典型分类器评价指标及实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Keras】学习笔记(二)
- 下一篇: 【Paper】Learning to P