一、什么是F1-score
F1分數(F1-score)是分類問題的一個衡量指標。一些多分類問題的機器學習競賽,常常將F1-score作為最終測評的方法。它是精確率和召回率的調和平均數,最大為1,最小為0。
此外還有F2分數和F0.5分數。F1分數認為召回率和精確率同等重要,F2分數認為召回率的重要程度是精確率的2倍,而F0.5分數認為召回率的重要程度是精確率的一半。計算公式為:
G分數是另一種統一精確率和的召回率系統性能評估標准,G分數被定義為召回率和精確率的幾何平均數。
二、計算過程
1. 首先定義以下幾個概念:
TP(True Positive):預測答案正確
FP(False Positive):錯將其他類預測為本類
FN(False Negative):本類標簽預測為其他類標
2. 通過第一步的統計值計算每個類別下的precision和recall
精准度(precision):指被分類器判定正例中的正樣本的比重
召回率(recall):指的是被預測為正例的占總的正例的比重
另外,介紹一下常用的准確率(accuracy)的概念,代表分類器對整個樣本判斷正確的比重。
3. 通過第二步計算結果計算每個類別下的f1-score,計算方式如下:
4. 通過對第三步求得的各個類別下的F1-score求均值,得到最后的評測結果,計算方式如下:
三、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