FP、FN、TP、TN、精确率(Precision)、召回率(Recall)、准确率(Accuracy)评价指标详述
來自微信公眾號:小白CV關注可了解更多CV,ML,DL領域基礎/最新知識;如果你覺得小白CV對您有幫助,歡迎點贊/收藏/轉發
在機器學習領域中,用于評價一個模型的性能有多種指標,其中幾項就是FP、FN、TP、TN、精確率(Precision)、召回率(Recall)、準確率(Accuracy)。這里我們就對這塊內容做一個集中的理解。分為一和二,5分鐘。
一、FP、FN、TP、TN
你這蠢貨,是不是又把酸葡萄和葡萄酸弄“混淆“啦!!!
上面日常情況中的混淆就是:是否把某兩件東西或者多件東西給弄混了,迷糊了。
在機器學習中, 混淆矩陣是一個誤差矩陣, 常用來可視化地評估監督學習算法的性能.。混淆矩陣大小為 (n_classes, n_classes) 的方陣, 其中 n_classes 表示類的數量。
其中,這個矩陣的一行表示預測類中的實例(可以理解為模型預測輸出,predict),另一列表示對該預測結果與標簽(Ground Truth)進行判定模型的預測結果是否正確,正確為True,反之為False。
在機器學習中ground truth表示有監督學習的訓練集的分類準確性,用于證明或者推翻某個假設。有監督的機器學習會對訓練數據打標記,試想一下如果訓練標記錯誤,那么將會對測試數據的預測產生影響,因此這里將那些正確打標記的數據成為ground truth。
此時,就引入FP、FN、TP、TN與精確率(Precision),召回率(Recall),準確率(Accuracy)。
以貓狗二分類為例,假定cat為正例-Positive,dog為負例-Negative;預測正確為True,反之為False。我們就可以得到下面這樣一個表示FP、FN、TP、TN的表:
此時如下代碼所示,其中scikit-learn 混淆矩陣函數 sklearn.metrics.confusion_matrix API 接口,可以用于繪制混淆矩陣
skearn.metrics.confusion_matrix(y_true,???#?array,?Gound?true?(correct)?target?valuesy_pred,??#?array,?Estimated?targets?as?returned?by?a?classifierlabels=None,??#?array,?List?of?labels?to?index?the?matrix.sample_weight=None??#?array-like?of?shape?=?[n_samples],?Optional?sample?weights )完整示例代碼如下:
import?seaborn?as?sns from?sklearn.metrics?import?confusion_matrix import?matplotlib.pyplot?as?plt sns.set()f,?(ax1,ax2)?=?plt.subplots(figsize?=?(10,?8),nrows=2) y_true?=?["dog",?"dog",?"dog",?"cat",?"cat",?"cat",?"cat"] y_pred?=?["cat",?"cat",?"dog",?"cat",?"cat",?"cat",?"cat"] C2=?confusion_matrix(y_true,?y_pred,?labels=["dog",?"cat"]) print(C2) print(C2.ravel()) sns.heatmap(C2,annot=True)ax2.set_title('sns_heatmap_confusion_matrix') ax2.set_xlabel('Pred') ax2.set_ylabel('True') f.savefig('sns_heatmap_confusion_matrix.jpg',?bbox_inches='tight')保存的圖像如下所示:
這個時候我們還是不知道skearn.metrics.confusion_matrix做了些什么,這個時候print(C2),打印看下C2究竟里面包含著什么。最終的打印結果如下所示:
[[1?2][0?4]] [1?2?0?4]解釋下上面這幾個數字的意思:
C2=?confusion_matrix(y_true,?y_pred,?labels=["dog",?"cat"])中的labels的順序就分布是0、1,negative和positive注:labels=[]可加可不加,不加情況下會自動識別,自己定義cat為1-positive,其中真實值中cat有4個,4個被預測為cat,預測正確T,0個被預測為dog,預測錯誤F;
dog為0-negative,其中真實值中dog有3個,1個被預測為dog,預測正確T,2個被預測為cat,預測錯誤F。
所以:TN=1、 FP=2 、FN=0、TP=4。
TN=1:預測為negative狗中1個被預測正確了
FP=2 :預測為positive貓中2個被預測錯誤了
FN=0:預測為negative狗中0個被預測錯誤了
TP=4:預測為positive貓中4個被預測正確了
這時候再把上面貓狗預測結果拿來看看,6個被預測為cat,但是只有4個的true是cat,此時就和右側的紅圈對應上了。
二、精確率(Precision)、召回率(Recall)、準確率(Accuracy)
有了上面的這些數值,就可以進行如下的計算工作了
準確率(Accuracy):這三個指標里最直觀的就是準確率: 模型判斷正確的數據(TP+TN)占總數據的比例
"Accuracy:?"+str(round((tp+tn)/(tp+fp+fn+tn),?3))召回率(Recall):針對數據集中的所有正例(TP+FN)而言,模型正確判斷出的正例(TP)占數據集中所有正例的比例.FN表示被模型誤認為是負例但實際是正例的數據.召回率也叫查全率,以物體檢測為例,我們往往把圖片中的物體作為正例,此時召回率高代表著模型可以找出圖片中更多的物體!
"Recall:?"+str(round((tp)/(tp+fn),?3))精確率(Precision):針對模型判斷出的所有正例(TP+FP)而言,其中真正例(TP)占的比例.精確率也叫查準率,還是以物體檢測為例,精確率高表示模型檢測出的物體中大部分確實是物體,只有少量不是物體的對象被當成物體
"Precision:?"+str(round((tp)/(tp+fp),?3))還有一些別的度量方式,如下,自行學習,不做擴展
("Sensitivity:?"+str(round(tp/(tp+fn+0.01),?3))) ("Specificity:?"+str(round(1-(fp/(fp+tn+0.01)),?3))) ("False?positive?rate:?"+str(round(fp/(fp+tn+0.01),?3))) ("Positive?predictive?value:?"+str(round(tp/(tp+fp+0.01),?3))) ("Negative?predictive?value:?"+str(round(tn/(fn+tn+0.01),?3)))推薦閱讀:(點擊下方標題即可跳轉)
為什么要考985?
受用一生的高效PyCharm使用技巧
沒看完這11 條,別說你精通 Python 裝飾器
總結
以上是生活随笔為你收集整理的FP、FN、TP、TN、精确率(Precision)、召回率(Recall)、准确率(Accuracy)评价指标详述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛逼轰轰!GitHub 上 Star 量
- 下一篇: 受用一生的高效 PyCharm 使用技巧