機器學習中的F1-score

1、什麼是F1-score

F1分數(F1-score)是分類問題的一個衡量指標。一些多分類問題的機器學習競賽,經常將F1-score做爲最終測評的方法。它是精確率和召回率的調和平均數,最大爲1,最小爲0。python

F_{1}=2\cdot \frac{precision\cdot recall}{precision+recall}

此外還有F2分數和F0.5分數。F1分數認爲召回率和精確率同等重要,F2分數認爲召回率的重要程度是精確率的2倍,而F0.5分數認爲召回率的重要程度是精確率的一半。計算公式爲:機器學習

F_{\beta }=\left (1+\beta ^{2} \right )\cdot \frac{precision\cdot recall}{\left (\beta ^{2}\cdot precision \right )+recall}

G分數是另外一種統一精確率和的召回率系統性能評估標準,G分數被定義爲召回率和精確率的幾何平均數。函數

G=\sqrt{precision\cdot recall}


2、計算過程

1. 首先定義如下幾個概念:性能

TP(True Positive):預測答案正確學習

FP(False Positive):錯將其餘類預測爲本類spa

FN(False Negative):本類標籤預測爲其餘類標3d

2. 經過第一步的統計值計算每一個類別下的precision和recallcode

精準度(precision):指被分類器斷定正例中的正樣本的比重blog

precision_{k}=\frac{TP}{TP+FP}

召回率(recall):指的是被預測爲正例的佔總的正例的比重ci

recall_{k}=\frac{TP}{TP+FN}

另外,介紹一下經常使用的準確率(accuracy)的概念,表明分類器對整個樣本判斷正確的比重。

accuracy=\frac{TP+TN}{TP+TN+FP+FN}

3. 經過第二步計算結果計算每一個類別下的f1-score,計算方式以下:

f1_{k}=\frac{2\cdot precision_{k}\cdot recall_{k} }{precision_{k}+recall_{k}}

4. 經過對第三步求得的各個類別下的F1-score求均值,獲得最後的評測結果,計算方式以下:

score=(\frac{1}{n}\sum f1_{k})^{2}


3、python實現

可經過加載sklearn包,方便的使用f1_score函數。

函數原型:

sklearn.metrics.f1_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)

參數:

y_true : 1d array-like, or label indicator array / sparse matrix.

目標的真實類別。

y_pred : 1d array-like, or label indicator array / sparse matrix.

分類器預測獲得的類別。

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

這裏須要注意,若是是二分類問題則選擇參數‘binary’;若是考慮類別的不平衡性,須要計算類別的加權平均,則使用‘weighted’;若是不考慮類別的不平衡性,計算宏平均,則使用‘macro’。

示例程序:

from sklearn.metrics import f1_score

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

print(f1_score(y_true, y_pred, average='macro'))  
print(f1_score(y_true, y_pred, average='weighted'))

分析上述代碼,

對於類0:TP=1,FP=1,FN=0,precision=1/2,recall=1,F1-score=2/3,Weights=1/3

對於類1:TP=1,FP=2,FN=2,precision=1/3,recall=1/3,F1-score=1/3,Weights=1/2

對於類2:TP=0,FP=1,FN=2,precision=0,recall=0,F1-score=0,Weights=1/6

宏平均分數爲:0.333;加權平均分數爲:0.389

相關文章
相關標籤/搜索