sklearn中ConfusionMatrix

sklearn輸出的評價(jià)矩陣

# algorithm1:LogisticRegression
from sklearn import metrics
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X, y)
print(model)
# make predictions
expected = y
predicted = model.predict(X)
# summarize the fit of the model
print CutoffLine
# print(metrics.classification_report(expected, predicted))
classification_report = metrics.classification_report(expected, predicted)
print classification_report
print CutoffLine
confusion_matrix = metrics.confusion_matrix(expected, predicted)
print confusion_matrix
# print(metrics.confusion_matrix(expected, predicted))

輸出結(jié)果

LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
          verbose=0, warm_start=False)
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
             precision    recall  f1-score   support

        0.0       0.79      0.89      0.84       500
        1.0       0.74      0.55      0.63       268

avg / total       0.77      0.77      0.77       768

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
[[447  53]
 [120 148]]

結(jié)果分析

TP = confusion_matrix[0,0]; FN = confusion_matrix[0,1] 
FP = confusion_matrix[1,0]; TN = confusion_matrix[1,1]
print u"TP, FN, FP, TN的值依次是:", TP, FN, FP, TN

print CutoffLine
from __future__  import division
################################################
"""
Matrix
     0     1
0    TP    FN
1    FP    TN
precison = TP/(TP+FP)
  recall = TP/(TP+FN)
      F1 = (2 * precision * recall)/(precision + recall)
Precision:被檢測出來的信息當(dāng)中 正確的或者相關(guān)的(也就是你想要的)信息中所占的比例;
Recall:所有正確的信息或者相關(guān)的信息(wanted)被檢測出來的比例。
F1綜合了P和R的結(jié)果,當(dāng)F1較高時(shí)則比較說明實(shí)驗(yàn)方法比較理想。
"""
################################################
precision_0 = round((TP/(TP + FP)), 2)
recall_0 = round((TP /(TP + FN)), 2)
f1_score_0 = round((2 * precision_0 * recall_0 /(precision_0 + recall_0)), 2)
support_0 = TP + FN
print u"把結(jié)果0看成正例時(shí):", precision_0, recall_0, f1_score_0, support_0

print CutoffLine
################################################
"""precison = TN/(TN+FN);
     recall = TN/(TN+FP)
         F1 = (2 * precision * recall)/(precision + recall)"""
################################################
precision_1 = round((TN/(TN+FN)), 2)
recall_1 = round((TN/(TN+FP)),2)
f1_score_1 = round((2 * precision_1 * recall_1 /(precision_1 + recall_1)), 2)
support_1 = FP + TN
print u"把結(jié)果1看成正例時(shí):", precision_1, recall_1, f1_score_1, support_1

print CutoffLine
f1_score_avg = recall_avg = precision_avg = round(((148 + 447)/768),2)
print u"平均結(jié)果:", precision_avg, recall_avg, f1_score_avg, TP + FN + FP + TN 

輸出結(jié)果

TP, FN, FP, TN的值依次是: 447 53 120 148
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
把結(jié)果0看成正例時(shí): 0.79 0.89 0.84 500
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
把結(jié)果1看成正例時(shí): 0.74 0.55 0.63 268
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
平均結(jié)果: 0.77 0.77 0.77 768

幾點(diǎn)備注:1. sklearn輸出的混淆矩陣中,橫軸為預(yù)測結(jié)果,縱軸為實(shí)際結(jié)果。參考以下文章。

參考:基于混淆矩陣的評價(jià)指標(biāo)
識別任務(wù)中混淆矩陣(Confusion Matrix)用于評價(jià)算法好壞的指標(biāo)。下圖是一個(gè)二分類問題的混淆矩陣:


TP:正確肯定——實(shí)際是正例,識別為正例
FN:錯(cuò)誤否定(漏報(bào))——實(shí)際是正例,卻識別成了負(fù)例
FP:錯(cuò)誤肯定(誤報(bào))——實(shí)際是負(fù)例,卻識別成了正例
TN:正確否定——實(shí)際是負(fù)例,識別為負(fù)例

相關(guān)術(shù)語:
AccuracyRate(準(zhǔn)確率): (TP+TN)/(TP+TN+FN+FP)
ErrorRate(誤分率): (FN+FP)/(TP+TN+FN+FP)
Recall(召回率,查全率,擊中概率): TP/(TP+FN), 在所有GroundTruth為正樣本中有多少被識別為正樣本了;
Precision(查準(zhǔn)率):TP/(TP+FP),在所有識別成正樣本中有多少是真正的正樣本;
TPR(TruePositive Rate): TP/(TP+FN),實(shí)際就是Recall
FAR(FalseAcceptance Rate)或FPR(False Positive Rate):FP/(FP+TN), 錯(cuò)誤接收率,誤報(bào)率,在所有GroundTruth為負(fù)樣本中有多少被識別為正樣本了;
FRR(FalseRejection Rate): FN/(TP+FN),錯(cuò)誤拒絕率,拒真率,在所有GroundTruth為正樣本中有多少被識別為負(fù)樣本了,它等于1-Recall

ROC曲線(receiver operatingcharacteristic curve)


橫軸是FAR,縱軸是Recall;

每個(gè)閾值的識別結(jié)果對應(yīng)一個(gè)點(diǎn)(FPR,TPR),當(dāng)閾值最大時(shí),所有樣本都被識別成負(fù)樣本,對應(yīng)于右上角的點(diǎn)(0,0),當(dāng)閾值最小時(shí),所有樣本都被識別成正樣本,對應(yīng)于右上角的點(diǎn)(1,1),隨著閾值從最大變化到最小,TP和FP都逐漸增大;

一個(gè)好的分類模型應(yīng)盡可能位于圖像的左上角,而一個(gè)隨機(jī)猜測模型應(yīng)位于連接點(diǎn)(TPR=0,FPR=0)和(TPR=1,FPR=1)的主對角線上;

可以使用ROC曲線下方的面積AUC(AreaUnder roc Curve)值來度量算法好壞:如果模型是完美的,那么它的AUG = 1,如果模型是個(gè)簡單的隨機(jī)猜測模型,那么它的AUG = 0.5,如果一個(gè)模型好于另一個(gè),則它的曲線下方面積相對較大;

ERR(Equal Error Rate,相等錯(cuò)誤率):FAR和FRR是同一個(gè)算法系統(tǒng)的兩個(gè)參數(shù),把它放在同一個(gè)坐標(biāo)中。FAR是隨閾值增大而減小的,F(xiàn)RR是隨閾值增大而增大的。因此它們一定有交點(diǎn)。這個(gè)點(diǎn)是在某個(gè)閾值下的FAR與FRR等值的點(diǎn)。習(xí)慣上用這一點(diǎn)的值來衡量算法的綜合性能。對于一個(gè)更優(yōu)的指紋算法,希望在相同閾值情況下,F(xiàn)AR和FRR都越小越好。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容