在分類任務中,想要知道模型的好壞,是不是能夠實際應用,那麼必須有評價的標準,本文將詳細說來。
如果不提到混淆矩陣,那麼下面的概念就不好理解。我自己先默寫了下,結果發現錯了(錯的全顛倒),錯誤示例如下:
上圖錯誤的原因是不知道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群:868373192
python模型評估 薦線性回歸及模型的評估
線性回歸模型 以鳶尾花的花瓣長度與寬度為例,實現回歸 import numpy as np from sklearn.model selection import train test split from sklearn.linear model import linearregression f...
簡單的分類模型
分類模型是文字分類的核心技術,大體上文字分類模型可以分為兩種 基於規則的文字分類和基於統計的文字分類。在基於規則的分類技術中首先需要根據某種假設 建立起可用於分類的規則,該規則包括了文字的表示方法,類別的表示方法,文字與類別的對映方式等等,之後通過訓練過程來完成規則的完善和調整,訓練後則可 以使用該...
分類模型的評價
假如某個班級有男生80人,女生20人,共計100人。目標是找出所有女生。現在某人挑選出50個人,其中20人是女生,另外還錯誤的把30個男生也當作女生挑選出來了。評估 evaluation 下他的工作。1 accuracy 準確率 0 1損失。分類器 某人 正確分類的樣本數 總樣本數,即20 50 1...