典型分類器評價指標及實例

一、概述

  • 在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 KNeighborsClassifier

2、生成數據

爲了演示,我們生成數據,數據一共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 2 的矩陣表示。

  • 如下圖所示,TP 表示實際爲真預測爲真,TN 表示實際爲假預測爲假,FN 表示實際爲真預測爲假,通俗講就是漏報了,FP 表示實際爲假預測爲真,通俗講就是誤報了。

在這裏插入圖片描述

2、實現

from sklearn.metrics import confusion_matrix

conf_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}
recall=TPTP+FNrecall=\frac{TP}{TP+FN}

通俗示例:某池塘有1400條鯉魚,300只蝦,300只鱉。現在以捕鯉魚爲目的。撒一大網,逮着了700條鯉魚,200只蝦,100只鱉。那麼,這些指標分別如下:

precision=700700+200+100=70%precision=\frac{700}{700+200+100}=70\%
recall=7001400=50%recall=\frac{700}{1400}=50\%

2、實現

from sklearn.metrics import precision_score, recall_score

precision = 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}

  • F1-Score:對準確率和召回率的一個均衡評價,F1值就是精確值和召回率的調和均值, 也就是
    2F1=1Precision+1Recall\frac{2}{F_1} = \frac{1}{Precision} + \frac{1}{Recall}
    也就是
    F1=2Precision×RecallPrecision+Recall=2TP2TP+FP+FNF_1 = \frac{2Precision\times{Recall}}{Precision+{Recall}} = \frac{2TP}{2TP + FP + FN}

    國內外不少數據挖掘比賽都是重點關注F1-Score的值。

2、實現

from sklearn.metrics import accuracy_score, f1_score

acc = 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 plt

f_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

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章