模型评价指标
首先介绍几个指标:
TP:正确预测正类
FP:错误预测成正类,其实是负类
FN:错误预测成负类,其实是正类
TN:正确预测成负类
1.准确率(accuracy)
预测正确的占所有样本的比例
(TP+TN)/(TP+TN+FP+FN)
2.召回率(recall)
召回率(Recall)又叫查全率,含义是在实际为正的样本中被预测为正样本的概率
TP/(TP+FN)
当我们关心某一类指标的时候召回率很有用,比如医疗图像检测,我们更关心的是那些有病的图像能不能被正确识别出来。
3. 查准率(precision)
在预测为真的样本中有多少实际为真的,关心的是预测正类正确的准确性
TP/(TP+FP)
4. F1值
F1值包含了查准率和查全率,是二者的调和平均
P:查准率 R:查全率
首先我们来看查准率和查全率的关系,如下图。在二分类中,查准和查全是一对矛盾的定义,都是定义在正类上的。我们知道在逻辑回归中输出的是一个0-1之间的值,这个值大于0.5我们将其分为正类,小于0.5将其分为负类。但是这个阈值并不是固定的。查准关心的是能预测正确多少,查全关心的是能不能把正类都预测出来。可以想象,如果都分为正类,查全是1。但是如果想查准高,那么就把阈值设的很高,只有非常肯定的我才预测成正类。
当然我们想要查准和查全都高,F1值就是找这样一个平衡点,让二者同时达到最高。
5. ROC/AUC
基础
roc和auc这两个指标不受样本不平衡的影响,介绍之前先介绍几个指标:
灵敏度(sensitivity): TP/(TP+FN) 可以看到就是召回率,灵敏就是说模型对正类是不是敏感,是不是正类都能识别出来
特异度(specificity): TN/(TN+FP) 关心的是负类,可以看做是负类的召回率,看负类能不能都被识别出来
真正率(TPR): =灵敏度 有多少正类被分对了
假正率(FPR): 1-特异度=FP/(TN+FP) 有多少负类被分错了,就是被分成了正类,可以想到如果模型太偏向分成正类,这一项会很低。
像灵敏度、召回率都是以实际标签为指标的,而准确率是以预测的标签为指标的,所以准确率会受数据不平衡的影响。
ROC(Receiver Operating Characteristic)接受者操作特征曲线
如下图所示,ROC是一条曲线,其中横轴是假正率,竖轴是真正率。曲线上的每一点都代表着选取一个阈值下的表现。当阈值逐渐减小,样本被分到正类更加容易,真正率增大,但是负样本被错分成正样本很多,假正率也增大了。阈值最小的时候对应图上(1,1),阈值最大的时候对应图上(0,0)
目标是要让真正率大,让假正率小,对应图中就是(0,1)点。所以目标是要让点离左上角越近,离45度的虚线越远。
AUC
AUC就是上图ROC曲线中曲线下的面积。这个面积有个特点,当模型效果最差的时候,即随机分类,roc曲线就是虚线,这时面积是0.5。当模型效果最好的时候,这时roc就是这个正方形,面积是1。所以auc是一个介于0.5-1之间的数,具体效果为:
0.5 - 0.7:低
0.7 - 0.85:中
0.85 - 0.95:高
0.95 - 1:非常好
注意auc是很难达到0.9以上的,因为这里的auc不是正确率,排除了数据不平衡所带来的影响。实际项目中很少有数据平衡的情况,让auc非常好是很困难的。
AUC求解:
- 得到结果数据,数据结构为:(输出概率,标签真值)
- 对结果数据按输出概率进行分组,得到(输出概率,该输出概率下真实正样本数,该输出概率下真实负样本数)。这样做的好处是方便后面的分组统计、阈值划分统计等
- 对结果数据按输出概率进行从大到小排序
- 从大到小,把每一个输出概率作为分类阈值,统计该分类阈值下的TPR和FPR
- 微元法计算ROC曲线面积、绘制ROC曲线
参考:
https://zhuanlan.zhihu.com/p/46714763
https://segmentfault.com/a/1190000010410634