02_混淆矩阵、准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F值(F-Measure) +Roc曲线和PR曲线+sklearn中分类模型评估API+ 自己补充整理
此博文參考:
關(guān)于ROC繪制參考博文:
https://blog.csdn.net/u011630575/article/details/80250177
Python+ROC相關(guān)的博文:
https://www.jianshu.com/p/2ca96fce7e81
另外就是百度百科、《機(jī)器學(xué)習(xí)原理》
1、混淆矩陣
在分類任務(wù)下,預(yù)測(cè)結(jié)果(Predicted Condition)與正確標(biāo)記(True Condition)之間存在四種不同的組合,構(gòu)成混淆矩陣(適用于多分類)
2、準(zhǔn)確率、精確率、召回率和F值是選出目標(biāo)的重要評(píng)價(jià)指標(biāo)。不妨先看看這些指標(biāo)的定義:
(1)若一個(gè)實(shí)例是正類,但是被預(yù)測(cè)成為正類,即為真正類(True Postive TP)
(2)若一個(gè)實(shí)例是負(fù)類,但是被預(yù)測(cè)成為負(fù)類,即為真負(fù)類(True Negative TN)
(3)若一個(gè)實(shí)例是負(fù)類,但是被預(yù)測(cè)成為正類,即為假正類(False Postive FP)
(4)若一個(gè)實(shí)例是正類,但是被預(yù)測(cè)成為負(fù)類,即為假負(fù)類(False Negative FN)
下表中:1代表正類,0代表負(fù)類:
在某些文章中還會(huì)出現(xiàn)"特異性"的概念。特異性的公式是:
S = FP/(FP + TN)F1值用來綜合評(píng)估精確率和召回率,它是精確率和召回率的調(diào)和均值。當(dāng)精確率和召回率都高時(shí),F1值也會(huì)高。
有時(shí)候我們精確率和召回率并不是一視同仁,比如我們更加重視精確率。我們用一個(gè)參數(shù)
1、精確率:預(yù)測(cè)結(jié)果為正例樣本中真實(shí)為正例的比例(查得準(zhǔn))
2、召回率:真實(shí)為正例的樣本中預(yù)測(cè)結(jié)果為正例的比例(查的全,對(duì)正樣本的區(qū)分能力)
其它分類標(biāo)準(zhǔn),F1,反映了模型的穩(wěn)健性
3、Roc曲線和PR曲線
接受者操作特性曲線(receiver operating characteristic curve,簡(jiǎn)稱ROC曲線),又稱為感受性曲線(sensitivity curve)。它是指在特定刺激條件下,以被試在不同判斷標(biāo)準(zhǔn)下所得的虛報(bào)概率P(y/N)為橫坐標(biāo),以擊中概率P(y/SN)為縱坐標(biāo),畫得的各點(diǎn)的連線。
ROC得名的原因在于曲線上各點(diǎn)反應(yīng)著相同的感受性,它們都是對(duì)同一信號(hào)刺激的反應(yīng),只不過是在擊中不同的判定標(biāo)準(zhǔn)下所得的結(jié)果而已。接受者操作曲線就是以虛驚概率為橫軸,擊中概率為縱軸所組成的坐標(biāo)圖,和被試在特定刺激條件下由于采用不同的判斷標(biāo)準(zhǔn)得出的不同結(jié)果畫出的曲線。
如下圖:
再如:
該曲線:
縱軸: 真正類率(true postive rate TPR),也叫真陽(yáng)性率,計(jì)算公式:TP/(TP + FN),代表分類器 預(yù)測(cè)為正類中實(shí)際為正實(shí)例占 所有正實(shí)例 的比例。
橫軸: 假正類率(false postive rate FPR),也叫偽陽(yáng)性率,計(jì)算公式:FP/(FP + TN),代表分類器 預(yù)測(cè)為正類中實(shí)際為負(fù)實(shí)例 占 所有負(fù)實(shí)例 的比例。
橫軸FPR: FPR越大,預(yù)測(cè)正類中實(shí)際負(fù)類越多。
縱軸TPR: TPR越大,預(yù)測(cè)正類中實(shí)際正類越多。
理想目標(biāo):TPR=1,FPR=0,即圖中(0,1)點(diǎn),此時(shí)ROC曲線越靠攏(0,1)點(diǎn),越偏離45度對(duì)角線越好。
如上圖所示,(a)圖中實(shí)線為ROC曲線,(深綠色)線上每個(gè)點(diǎn)對(duì)應(yīng)一個(gè)閾值(threshold)。假設(shè)是二分類分類器,輸出為每個(gè)實(shí)例預(yù)測(cè)為正類的概率。那么通過設(shè)定一個(gè)特定閾值(threshold),預(yù)測(cè)為正類的概率值 大于等于 特定閾值的為 正類,小于 特定閾值的為 負(fù)類,然后統(tǒng)計(jì)TP、TN、FP、FN每個(gè)類別的數(shù)目,然后根據(jù)上面的公式,就能對(duì)應(yīng)的就可以算出一組 特定閾值下(FPR,TPR)的值,即 在平面中得到對(duì)應(yīng)坐標(biāo)點(diǎn)。如果這里沒懂也沒關(guān)系,下面有詳細(xì)的例子說明。
右上角的閾值最小,對(duì)應(yīng)坐標(biāo)點(diǎn)(1,1);左下角閾值最大,對(duì)應(yīng)坐標(biāo)點(diǎn)為(0,0)。從右上角到左下角,隨著閾值的逐漸減小,越來越多的實(shí)例被劃分為正類,但是這些正類中同樣也摻雜著真正的負(fù)實(shí)例,即TPR和FPR會(huì)同時(shí)增大。
4、分類模型評(píng)估API
在深度學(xué)習(xí)中,分類任務(wù)評(píng)價(jià)指標(biāo)是很重要的,一個(gè)好的評(píng)價(jià)指標(biāo)對(duì)于訓(xùn)練一個(gè)好的模型極其關(guān)鍵;如果評(píng)價(jià)指標(biāo)不對(duì),對(duì)于任務(wù)而言是沒有意義的。
一般都是用準(zhǔn)確率來作為評(píng)價(jià)指標(biāo),然而對(duì)于類別不均衡的任務(wù)來說,或者在任務(wù)中某一個(gè)類的準(zhǔn)確率非常重要。如果再使用單純的準(zhǔn)確率肯定是不合理的,對(duì)任務(wù)來說 沒有意義。所以我們需要一個(gè)好的評(píng)價(jià)指標(biāo)來。目前一般都是用精確率,召回率,F1分?jǐn)?shù)來評(píng)價(jià)模型;
在sklearn中有自動(dòng)生成這些指標(biāo)的的工具,就是 sklearn.metrics.classification_report模塊
sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False)y_true:類別的真實(shí)標(biāo)簽值,類標(biāo)簽的列表y_pred:預(yù)測(cè)值的標(biāo)簽,類標(biāo)簽的列表labels:labels: 報(bào)告中要包含的標(biāo)簽索引的可選列表;這個(gè)參數(shù)一般不需要設(shè)置(如果要設(shè)置,比如200個(gè)類別,那么就應(yīng)該如此設(shè)置:lable= range(200); 然后在sklearn.metrics.classification_report中將labels=label),可是有的時(shí)候不設(shè)置就會(huì)出錯(cuò),之所以會(huì)出錯(cuò)是因?yàn)?#xff1a;比如你總共的類別為200個(gè)類,但是,你的測(cè)試集中真實(shí)標(biāo)簽包含的類別只有199個(gè),有一個(gè)類別缺失數(shù)據(jù),如果不設(shè)置這個(gè)參數(shù)就會(huì)報(bào)錯(cuò);target_names:與標(biāo)簽匹配的名稱,就是一個(gè)字符串列表,在報(bào)告中顯示;也即是顯示與labels對(duì)應(yīng)的名稱sample_weight:設(shè)置權(quán)重的參數(shù),一般不用,需要就可以用digits:這個(gè)參數(shù)是用來設(shè)置你要輸出的格式位數(shù),就是幾位有效數(shù)字吧,大概就是這個(gè)意思,即是輸出格式的精確度;output_dict:一般不用,好像沒啥用;如果為True,則將輸出作為dict返回。return:每個(gè)類別精確率與召回率5.classification_report 的指標(biāo)分析
案例:
from sklearn.metrics import classification_reporty_true = [0, 1, 2, 2, 2] y_pred = [0, 0 ,2, 2, 1] target_names = ['class 0', 'class 1', 'class 2'] print(classification_report(y_true,y_pred,target_names=target_names))輸出結(jié)果為:
precision recall f1-score supportclass 0 0.50 1.00 0.67 1class 1 0.00 0.00 0.00 1class 2 1.00 0.67 0.80 3accuracy 0.60 5macro avg 0.50 0.56 0.49 5 weighted avg 0.70 0.60 0.61 5在這個(gè)報(bào)告中:
打個(gè)賞唄,您的支持是我堅(jiān)持寫好博文的動(dòng)力。
總結(jié)
以上是生活随笔為你收集整理的02_混淆矩阵、准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F值(F-Measure) +Roc曲线和PR曲线+sklearn中分类模型评估API+ 自己补充整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 09年出厂的金杯车铭牌在哪里?
- 下一篇: 03_数据的特征抽取,sklearn特征