对于极度偏斜的数据,使用指标精准率和召回率都优于使用指标分类准确度。
但精准率和召回率是两个指标。如果一个算法的精准率和召回率表现不同,该如何取舍这两个指标?
解决方法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的影响

precisionracallf1_score
0.50.50.5
0.10.90.18
0.01.00

对于调和平均值来说,二者有一个分数较低,都会极大的拉低结果。
因此能更好的表征precison和recal这两个指标。

F1 score来评价手写数字的识别效果

使用10-3的测试数据

from sklearn.metrics import f1_score
f1_score(y_test, y_predict)

输出:0.8674698795180723

对有偏数据,指标F1 score优于分类准确度。