分類任務的metrics——模型評測標準

在分類任務中,想要知道模型的好壞,是不是能夠實際應用,那麼必須有評價的標準,本文將詳細說來。

如果不提到混淆矩陣,那麼下面的概念就不好理解。我自己先默寫了下,結果發現錯了(錯的全顛倒),錯誤示例如下:

上圖錯誤的原因是不知道True/Positive這種概念是針對誰來說,

小明哥這裏給出:True/False是針對(預測結果)這個預測是不是正確來說的,如果預測正確,那麼爲True,預測錯誤,即爲False;Positive/Negative則是針對預測來說的(就是分類後的標籤),聯繫下醫學上的陽性與陰性,就是這個概念。

這種東西要麼用得多才能記住,要麼就每天看一遍,想當年我記詩詞一樣,每天看一遍,讀一遍。

按照上面的理解,即可給出正確的結果:

1-accuracy 

就是正確率,預測正確的比例,不管是true positive 還是true negtive 都是預測對了

Acc=(TP+TN)/(TP+FP+FN+TN)

2-Precision

精度,準確度啥的,我覺得沒必要摳字眼,在我看來就是預測爲正例的實際上有多少爲正例

P=TP/(TP+FP)

3-Recall

召回率,這個詞其實不好字面理解,在我的認知中,召回這個詞還是在新聞上看到的,某某車有問題,全球召回幾萬輛。

召回率,再經望文生義,就是召回的車輛佔總銷售的車輛,這個有點貼近實際的含義了。

這個詞在推薦算法中是必須明確的知道,就是從數據庫中篩出來一部分符合要求的數據,因爲在信息過載的時代,用戶不可能看完那麼多東西,初選出來相對匹配的信息,然後經過排序(粗排/精排/重排等)

一句話說就是:實際爲正例的(positive)有多少預測爲正例,和上面的精確度很容易混淆,有點像玩文字遊戲。

R=TP/(TP+FN)

Note:仍舊以車的召回舉例,假設某一批次的售出車輛有問題,本來我們只需要將該批次的召回即可,但把我們曾經所有賣出的都召回了,肯定包括問題車,這就是查全率100%,實際上有毛病的車有多少認爲有毛病?或者換個思路,我們所有批次的車中(假設一共有1000輛)實際有100輛有毛病,我們都找出來了,都召回了,都認爲有毛病;但從精確度考慮我們只需要找到這100輛即可,所以精確度爲100/1000=0.1=10%

一般來說P,R是此消彼長的,理想情況下則是相對都高,如果都低,則可能數據或程序有問題。

【PR曲線是根據閾值來畫的,以分類中的最後一層softmax來說,那麼我們在分類中直接就是求的最大的一個爲某類的index,

softmax輸出的結果總和爲1,當我們設定某個類別的閾值時,比如0.6,當大於該值我們才認爲是該類,閾值不同,則畫出不同的PR曲線,不知道這樣對不對,應該沒毛病,下面的ROC曲線也是如此得到的】

一般也稱P爲查準率,R爲查全率。

4-F1 score

F1值就是上面兩者的綜合,是調和值。一般用的多的是:

F1=2*P*R/(P+R)

5-True Positive Rate

字面意思就是真陽性的比例,也就是實際爲正例有多少預測爲正例,恰好與Recall一樣

TPR=TP/(TP+FN)

6-False Positive Rate

假陽性的比例,實際爲負例的有多少錯分(預測)爲正例

FPR=FP/(FP+TN)

可見真陽性與假陽性的比例都是針對ground truth來說的,實際爲正例,實際爲負例。。。

7-AUC和ROC

由TPR和FPR可以繪製曲線,該曲線就是ROC(受試者特徵曲線),曲線下的面積就是AUC(英語意思很直白)

其中TPR,FPR的大小範圍[0,1],因此AUC最大爲1,越趨於1,模型越好,低於0.75的一般都不可靠。

在sklearn中有現成的roc_auc函數或者tf中的auc可以調用。不要再費勁造輪子了。

下面是花的類別分類,最簡單的那個,類似於MNIST

注:上面的AUC就是訓練中記錄,不是ROC曲線哈,別搞錯了

訓練記錄爲:

120/120 [==============================] - 0s 191us/step - loss: 0.1470 - accuracy: 0.9667 - get_auc: 0.9794 - val_loss: 0.1356 - val_accuracy: 1.0000 - val_get_auc: 0.9796
Epoch 95/100
120/120 [==============================] - 0s 474us/step - loss: 0.1446 - accuracy: 0.9750 - get_auc: 0.9798 - val_loss: 0.1344 - val_accuracy: 1.0000 - val_get_auc: 0.9799
Epoch 96/100
120/120 [==============================] - 0s 183us/step - loss: 0.1431 - accuracy: 0.9667 - get_auc: 0.9801 - val_loss: 0.1320 - val_accuracy: 1.0000 - val_get_auc: 0.9803
Epoch 97/100
120/120 [==============================] - 0s 382us/step - loss: 0.1419 - accuracy: 0.9667 - get_auc: 0.9804 - val_loss: 0.1306 - val_accuracy: 1.0000 - val_get_auc: 0.9806
Epoch 98/100
120/120 [==============================] - 0s 208us/step - loss: 0.1408 - accuracy: 0.9750 - get_auc: 0.9807 - val_loss: 0.1299 - val_accuracy: 1.0000 - val_get_auc: 0.9809
Epoch 99/100
120/120 [==============================] - 0s 200us/step - loss: 0.1398 - accuracy: 0.9667 - get_auc: 0.9810 - val_loss: 0.1277 - val_accuracy: 1.0000 - val_get_auc: 0.9812
Epoch 100/100
120/120 [==============================] - 0s 199us/step - loss: 0.1380 - accuracy: 0.9750 - get_auc: 0.9813 - val_loss: 0.1265 - val_accuracy: 1.0000 - val_get_auc: 0.9814

sklearn中的分類任務report

拜拜。

另外有相關問題可以加入QQ羣討論,不設微信羣

QQ羣:868373192 

語音圖像視頻深度-學習羣

 

 

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