对于极度偏斜的数据,使用指标精准率和召回率都优于使用指标分类准确度。
但精准率和召回率是两个指标。如果一个算法的精准率和召回率表现不同,该如何取舍这两个指标?
解决方法1:视具体场景而定。
有时我们注重精准率,比如股票预测,我们希望预测股票为升结果都是准确的(否则可能亏钱),而不在意错过另一些错过的股票上升的机会(错过一些赚钱的机会)。
有时我们注重召回率,比如病人诊断。我们希望得病的人都能识别出来(否则这些人可能会病情恶化),而有一些没得病的人被错误地识别出来没有关系(这些人做进一步检查即可)。
解决方法2:同时关注精准率和召回率,即新指标:F1 score
指标:F1 score
F1 score是precision和recall的调和平均值。
调和平均值的特点:如果precision和recall非常不平衡,则f1 score也是比较低的。只有两者都高,F1 score才会高。
F1 score的取值范围:[0, 1]
自己实现F1 score
import numpy as np
def f1_score(precision, recall):
try:
return 2 * precision * recall / (precision + recall)
except:
return 0.0
precision和recall取不同的值对f1_score的影响
precision | racall | f1_score |
---|---|---|
0.5 | 0.5 | 0.5 |
0.1 | 0.9 | 0.18 |
0.0 | 1.0 | 0 |
对于调和平均值来说,二者有一个分数较低,都会极大的拉低结果。
因此能更好的表征precison和recal这两个指标。
F1 score来评价手写数字的识别效果
使用10-3的测试数据
from sklearn.metrics import f1_score
f1_score(y_test, y_predict)
输出:0.8674698795180723
对有偏数据,指标F1 score优于分类准确度。