常見的二分類評估指標都已耳熟不能詳,現在來了解一下多分類的評估。
你是否願聞其詳?
Reference webs:
https://www.pythonf.cn/read/124960
https://zhuanlan.zhihu.com/p/59862986
https://toutiao.io/posts/gorhvh/preview
https://www.zhihu.com/question/51470349
1 不加sample_weight
1.1 micro
micro算法是指把所有的類放在一起算,具體到precision,就是把所有類的TP加和,再除以所有類的TP和FN的加和。因此micro方法下的precision和recall都等於accuracy。
使用sklearn計算的結果也是一樣:
from sklearn.metrics import precision_score
precision_score(y_true, y_pred, average="micro")
1.2 macro
macro方法就是先分別求出每個類的precision再算術平均。
precision_score(y_true, y_pred, average="macro")
1.3 weighted
前面提到的macro算法是取算術平均,weighted算法就是在macro算法的改良版,不再是取算術平均、乘以固定weight(也就是1/3)了,而是乘以該類在總樣本數中的占比。計算一下每個類的占比:
w_neg1, w_0, w_pos1 = np.bincount(y_true+1) / len(y_true)
print(w_neg1, w_0, w_pos1)
然后手算一下weighted方法下的precision:
用sklearn驗證一下:
precision_score(y_true, y_pred, average="weighted")
2 加入sample weight
當樣本不均衡時,比如本文舉出的樣本,中間的0占80%,1和-1各占10%,每個類數量差距很大,我們可以選擇加入sample_weight來調整我們的樣本。
混淆矩陣和評估指標
PRF值分別表示准確率(Precision)、召回率(Recall)和F1值(F1-score)
我們之前評價二分類的時候有混淆矩陣,AUC等評估指標。 在多分類中我們同樣有這些指標,只不過計算方式略有不同。 就如混淆矩陣。如有150個樣本數據,這些數據分成3類,每類50個。分類結束后得到的混淆矩陣為:
2.多分類[1]Macro F1: 將n分類的評價拆成n個二分類的評價,計算每個二分類的F1 score,n個F1 score的平均值即為Macro F1。Micro F1: 將n分類的評價拆成n個二分類的評價,將n個二分類評價的TP、FP、RN對應相加,計算評價准確率和召回率,由這2個准確率和召回率計算的F1 score即為Micro F1。一般來講,Macro F1、Micro F1高的分類效果好。Macro F1受樣本數量少的類別影響大。
作者:謝為之
鏈接:https://www.zhihu.com/question/51470349/answer/439218035
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
用from sklearn.metrics import precision_score,recall_scoreprint (precision_score(y_true, y_scores,average='micro'))其中average是參數,不同參數適用不同任務,比如二分類,多分類,多標簽
作者:Dhealth
鏈接:https://www.zhihu.com/question/51470349/answer/328489878
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
https://blog.csdn.net/wf592523813/article/details/95202448
2.1 多分類轉化為2vs2問題來評價
准確率:與二分類相同,預測正確的樣本占總樣本的比例。
精確率: ‘macro’, 對於每個標簽,分別計算Precision,然后取不加權平均
查全率: ‘macro’,對於每個標簽,分別計算Recall,然后取不加權平均
F1-Score:‘macro’, 對於每個標簽,分別計算發,然后取不加權平均
‘micro’, 將n個二分類評價的TP,FP,FN對應相加,計算P和R,然后求得F1
一般macro-f1和micro-f1都高的分類器性能好
2.2 直接定義的多分類指標
2.2.1Kappa系數
kappa系數是用在統計學中評估一致性的一種方法,取值范圍是[-1,1],實際應用中,一般是[0,1],與ROC曲線中一般不會出現下凸形曲線的原理類似。這個系數的值越高,則代表模型實現的分類准確度越高。
P0表示總體分類精度
Pe表示SUM(第i類真實樣本數*第i類預測出來的樣本數)/樣本總數平方
2.2.2. 海明距離
海明距離也適用於多分類的問題,簡單來說就是衡量預測標簽與真實標簽之間的距離,取值在0~1之間。距離為0說明預測結果與真實結果完全相同,距離為1就說明模型與我們想要的結果完全就是背道而馳。
from sklearn.metrics import hamming_loss
ham_distance = hamming_loss(y_true,y_pred)
from sklearn.metrics import cohen_kappa_score
kappa = cohen_kappa_score(y_true,y_pred,label=None) #(label除非是你想計算其中的分類子集的kappa系數,否則不需要設置)
2.2.3.傑卡德相似系數
它與海明距離的不同之處在於分母。當預測結果與實際情況完全相符時,系數為1;當預測結果與實際情況完全不符時,系數為0;當預測結果是實際情況的真子集或真超集時,距離介於0到1之間。
我們可以通過對所有樣本的預測情況求平均得到算法在測試集上的總體表現情況。
from sklearn.metrics import jaccard_similarity_score
jaccrd_score = jaccrd_similarity_score(y_true,y_pred,normalize = default)
normalize默認為true,這是計算的是多個類別的相似系數的平均值,normalize = false時分別計算各個類別的相似系數
2.2.4.鉸鏈損失
鉸鏈損失(Hinge loss)一般用來使“邊緣最大化”(maximal margin)。損失取值在0~1之間,當取值為0,表示多分類模型分類完全准確,取值為1表明完全不起作用。
from sklearn.metrics import hinge_loss
hinger = hinger_loss(y_true,y_pred)