一、概述
- 在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):將分類問題按照真實情況與判別情況兩個維度進行歸類的一個矩陣,在二分類問題中,可以用一個 的矩陣表示。
- 如下圖所示,
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,也稱查準率)。其計算公式如下:
通俗示例:某池塘有1400條鯉魚,300只蝦,300只鱉。現在以捕鯉魚爲目的。撒一大網,逮着了700條鯉魚,200只蝦,100只鱉。那麼,這些指標分別如下:
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損失
時測試數據集上的準確率。它的定義如下:
-
F1-Score:對準確率和召回率的一個均衡評價,F1值就是精確值和召回率的調和均值, 也就是
也就是
國內外不少數據挖掘比賽都是重點關注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