sklearn分類評估參數 average

參數解釋 

average: string, [None, ‘micro’, ‘macro’(default), ‘samples’, ‘weighted’]

將一個二分類matrics拓展到多分類或多標籤問題時,我們可以將數據看成多個二分類問題的集合,每個類都是一個二分類。接着,我們可以通過跨多個分類計算每個二分類metrics得分的均值,這在一些情況下很有用。你可以使用average參數來指定。

macro:計算二分類metrics的均值,爲每個類給出相同權重的分值。當小類很重要時會出問題,因爲該macro-averging方法是對性能的平均。另一方面,該方法假設所有分類都是一樣重要的,因此macro-averaging方法會對小類的性能影響很大。

weighted:對於不均衡數量的類來說,計算二分類metrics的平均,通過在每個類的score上進行加權實現。

micro:給出了每個樣本類以及它對整個metrics的貢獻的pair(sample-weight),而非對整個類的metrics求和,它會每個類的metrics上的權重及因子進行求和,來計算整個份額。Micro-averaging方法在多標籤(multilabel)問題中設置,包含多分類,此時,大類將被忽略。

samples:應用在multilabel問題上。它不會計算每個類,相反,它會在評估數據中,通過計算真實類和預測類的差異的metrics,來求平均(sample_weight-weighted)

average:average=None將返回一個數組,它包含了每個類的得分.

ROC曲線

macro:每種類別下,都可以得到m個測試樣本爲該類別的概率(矩陣P中的列)。所以,根據概率矩陣P和標籤矩陣L中對應的每一列,可以計算出各個閾值下的假正例率(FPR)和真正例率(TPR),從而繪製出一條ROC曲線。這樣總共可以繪製出n條ROC曲線。最後對n條ROC曲線取平均,即可得到最終的ROC曲線。

micro:首先,對於一個測試樣本:1)標籤只由0和1組成,1的位置表明了它的類別(可對應二分類問題中的‘’正’’),0就表示其他類別(‘’負‘’);2)要是分類器對該測試樣本分類正確,則該樣本標籤中1對應的位置在概率矩陣P中的值是大於0對應的位置的概率值的。基於這兩點,將標籤矩陣L和概率矩陣P分別按行展開,轉置後形成兩列,這就得到了一個二分類的結果。所以,此方法經過計算後可以直接得到最終的ROC曲線。

 

PRF:準確率、召回率、F值


對於二分類問題,可將樣例根據其真實類別和分類器預測類別劃分爲:
真正例(True Positive,TP):真實類別爲正例,預測類別爲正例。
假正例(False Positive,FP):真實類別爲負例,預測類別爲正例。
假負例(False Negative,FN):真實類別爲正例,預測類別爲負例。
真負例(True Negative,TN):真實類別爲負例,預測類別爲負例。
然後可以構建混淆矩陣(Confusion Matrix)如下表所示。
準確率,又稱查準率(Precision,P):                                               

召回率,又稱查全率(Recall,R):                                               


F1​值:                                            

F1​的一般形式F_beta:從公式中可以看出參數1其實是準確率和召回率的調和參數,小於1則提高準確率的權重,大於1則提高召回率的權重,因此在實際中也有F0.5-score, F2-score的使用                                           

 

宏平均(Macro-averaging)

分別計算每個類別的PRF,然後分別求平均得到PRF。即對多個混淆矩陣求PRF,然後求PRF的算術平均。宏平均指標相對微平均指標而言受小類別的影響更大。                                          

其中,,在計算宏平均F值時我給出了兩個公式分別。都可以用。

舉例,假設是三個類別的分類模型:(若除法過程中,分子分母同時爲0,則結果也爲0)

y_true=[1,2,3]
y_pred=[1,1,3]

(1)如下,將第一個類別設置爲True(1),非第一個類別設置爲False(0),

y_true=[1,0,0]
y_pred=[1,1,0]

由此我們統計得到第一個類別的混淆矩陣:

第一類 預測
真(正) 假(負)
實際 真(正) 1(TP) 0(FN)
假(負) 1(FP) 1(TN)

我們可以計算第一個類別的PRF值如下:

  • P1 = TP/(TP+FP) = 1/(1+1) = 1/2
  • R1 = TP/(TP+FN) = 1/1 = 1
  • F1_1 = 2*P1*R1/(P1+R1) = 2/3

(2)如下,將第二個類別設置爲True(1),非第二個類別設置爲False(0),

y_true=[0,1,0]
y_pred=[0,0,0]

由此我們統計得到第二個類別的混淆矩陣:

 

第二類 預測
真(正) 假(負)
實際 真(正) 0(TP) 1(FN)
假(負) 0(FP) 2(TN)

我們可以計算第二個類別的PRF值如下:

  • P2 = TP/(TP+FP) = 0
  • R2 = TP/(TP+FN) = 0
  • F1_2 = 2*P2*R2/(P2+R2) = 0

(3)如下,將第三個類別設置爲True(1),非第三個類別設置爲False(0),

y_true=[0,0,1]
y_pred=[0,0,1]

由此我們統計得到第三個類別的混淆矩陣:

 

第三類 預測
真(正) 假(負)
實際 真(正) 1(TP) 0(FN)
假(負) 0(FP) 2(TN)

我們可以計算第三個類別的PRF值如下:

  • P3 = TP/(TP+FP) = 1/1 = 1
  • R3 = TP/(TP+FN) = 1/1 = 1
  • F1_3 = 2*P3*R3/(P3+R3) = 1

 (4)對P1, P2, P3取平均得到P, 對R1, R2, R3取平均得到R, 對F1_1, F1_2, F1_3求平均得到F1:

  • P = (P1+P2+P3)/3 = (1/2 + 0 + 1/3 = 1/2
  • R = (R1+R2+R3)/3=(1 +0 +1)/3 = 2/3
  • F1 = 2*P*R/(P+R) = 4/7

微平均(Micro-averaging)

對數據集中的每一個實例不分類別進行統計建立全局混淆矩陣,然後計算相應指標。

                            

 

舉個簡單的例子來理解,同上面的例子一樣,假設是三個類別的分類模型:

y_true=[1,2,3]
y_pred=[1,1,3]

(1)如下,將第一個類別設置爲True(1),非第一個類別設置爲False(0),

y_true=[1,0,0]
y_pred=[1,1,0]

由此我們統計得到第一個類別的混淆矩陣:

第一類 預測
真(正) 假(負)
實際 真(正) 1(TP) 0(FN)
假(負) 1(FP) 1(TN)

 (2)如下,將第二個類別設置爲True(1),非第二個類別設置爲False(0),

y_true=[0,1,0]
y_pred=[0,0,0]

由此我們統計得到第二個類別的混淆矩陣:

第二類 預測
真(正) 假(負)
實際 真(正) 0(TP) 1(FN)
假(負) 0(FP) 2(TN)

 (3)如下,將第三個類別設置爲True(1),非第三個類別設置爲False(0),

y_true=[0,0,1]
y_pred=[0,0,1]

由此我們統計得到第三個類別的混淆矩陣:

第三類 預測
真(正) 假(負)
實際 真(正) 1(TP) 0(FN)
假(負) 0(FP) 2(TN)

 (4)根據微平均算法公式我們得到最終的混淆矩陣,如下:

最終 預測
真(正) 假(負)
實際 真(正) 2/3(TP) 1/3(FN)
假(負) 1/3(FP) 5/3(TN)

帶入微平均公式得:

micro-P = TP/(TP+FP) = (2/3)/(2/3 + 1/3)= 2/3

micro-R = TP/(TP+FN) = (2/3)/(2/3 + 1/3)= 2/3

micro-F1 = 2*P*R/(P+R) = 2/3

 

 

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