2017年11月10日 星期五

機器學習_ML_模型指標_f1_score

機器學習_ML_模型指標_f1_score

原文連結
適用性:Classification metrics

各種的數值計算都跟上面這張圖有關。(取自(維基百科))

在資料集的正負比例相差太過極端,這種情況即稱為skewed data(偏斜)
在偏斜情況下,用精度(accaury)來做模型效能並不恰當,用召回率(recall)跟(查準率)precision配合做整理,會讓整個模型的效能更明確。
這時候f1_score就出現了!

F1 = 2 * (precision * recall) / (precision + recall)

IMPORT

from sklearn.metrics import f1_score

範例

from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
from sklearn.metrics import confusion_matrix
y_true = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0 ,1]
y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1 ,1]
confusion_matrix(y_true=y_true, y_pred=y_pred)
precision_score(y_true, y_pred)
recall_score(y_true, y_pred)
f1_score(y_true, y_pred)

結果如下

>>> confusion_matrix(y_true=y_true, y_pred=y_pred)
array([[8, 2],
       [0, 3]], dtype=int64)
>>> precision_score(y_true, y_pred)
0.59999999999999998
>>> recall_score(y_true, y_pred)
1.0
>>> f1_score(y_true, y_pred)
0.74999999999999989

數據的部份我故意設定過,讓召回率變高,精隼率變低!
從這可以發現,高召回不代表有好的模型,因為精隼率是不高的,
透過f1_score可以更平均整個模型的效能評估。
調整一下

y_true = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0 ,1]
y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1 ,1]
confusion_matrix(y_true=y_true, y_pred=y_pred)
precision_score(y_true, y_pred)
recall_score(y_true, y_pred)
f1_score(y_true, y_pred)

上面的模型簡直完美!

>>> confusion_matrix(y_true=y_true, y_pred=y_pred)
array([[4, 1],
       [0, 8]], dtype=int64)
>>> precision_score(y_true, y_pred)
0.88888888888888884
>>> recall_score(y_true, y_pred)
1.0
>>> f1_score(y_true, y_pred)
0.94117647058823528

沒有留言:

張貼留言