分类评价指标
混淆矩阵
pred positive | pred negative | |
---|---|---|
actual positive | TP | FN |
actual negative | FP | TN |
True和False是真实的标签,positive和negative是预测的值
- 真阳性(TP):诊断为有,实际上也有高血压。
- 伪阳性(FP):诊断为有,实际却没有高血压。
- 真阴性(TN):诊断为没有,实际上也没有高血压。
- 伪阴性(FN):诊断为没有,实际却有高血压。
准确率Accruacy
准确率非常好理解,预测对的样本占总样本的比例,正的预测为正的,负的预测为负的
a
c
c
=
T
P
+
F
N
T
P
+
F
P
+
T
N
+
F
N
acc = \frac{TP+FN}{TP+FP+TN+FN}
acc=TP+FP+TN+FNTP+FN
到这里其实很符合逻辑,但是又一个小问题,不是评价指标的问题,是模型的问题,那就是样本不均衡,例如有一个数据集,正样本只有1个,负样本有99个,直接把所有的样本预测为负就可以了,acc=99/100=99%,这很明显是不合理的。其实我们想要的是,预测的正样本尽可能都是正样本,预测的负样本尽可能都是负样本。
精确率(P)和召回率(R)
精确率:预测的正样本中有多少是预测对的
P
=
T
P
/
(
T
P
+
F
P
)
P=TP/(TP+FP)
P=TP/(TP+FP)
召回率:实际的正样本有多少是被预测对了
R
=
T
P
/
(
T
P
+
F
N
)
R=TP/(TP+FN)
R=TP/(TP+FN)
从名字就很好区分,
- 召回率召回率就是找回率,实际的正样本中找回了多少个正样本,猫狗分类里面,有100只小猫咪,你找回了几只,这就是找回率(召回率)
- 精确率就是说,你判断除100只小猫咪,里面到底有多少真的是猫咪,你说的有多准
我们知道,在做分类的时候,是有一个概率阈值的,例如0.5,预测的概率大于0.5,判断成正类,小于0.5就判断成负类,我们修改阈值的时候,预测的结果就会发生变化,
PR之间的矛盾
精确率和召回率是一对矛盾的指标,一般来说,精确率高的时候召回率会低,反之亦然。假如你训练了一个猫狗分类器,你想要预测的结果尽可能精确,预测的猫一定是猫,你该怎么办呢,最简单的办法就是提高分类时的阈值,例如原来区分猫狗的阈值是0.5,现在你把阈值提升到0.9,那基本上预测的猫就都是猫了。如果你想要提升召回率怎么办呢?就是说把样本中的猫尽可能的都找回来,那简单,全都预测成猫就行了。
在一些应用中,对查准率和查全率的重视程度有所不同。例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确实是用户感兴趣的,此时查准率更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要。
PR曲线
在很多情形下,我们可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的是学习器认为“最不可能”是正例的样本。按此顺序设置不同的阈值,逐个把样本作为正例进行预测,则每次可以计算出当前的查准率、查全率。以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称“P-R曲线”,显示该曲线的图称为“P-R图”。
如果我们训练了多个模型,想要比较哪个模型效果更好,一开始我们可以直接看准确率,现在我们可以评估精确率和召回率,并且通过调整不同的阈值可以实现pr曲线来进行对比,如果一条曲线A完全包住了另一条曲线B,那么我们认为A模型性能好于B模型。如果发生了交叉,则难以比较,我们可以对比PR曲线下的面积。它在一定程度上表征了学习器在查准率和查全率上取得相对“双高”的比例。
ROC曲线
PR曲线已经可以很好的解决模型评估的问题了,但是还是有问题,当样本不平衡的时候,PR曲线依然会失真。我们可以使用ROC曲线进行评估
ROC曲线起源于第二次世界大战时期雷达兵对雷达的信号判断。当时每一个雷达兵的任务就是去解析雷达的信号,但是当时的雷达技术还没有那么先进,存在很多噪声(比如一只大鸟飞过),所以每当有信号出现在雷达屏幕上,雷达兵就需要对其进行破译。有的雷达兵比较谨慎,凡是有信号过来,他都会倾向于解析成是敌军轰炸机,有的雷达兵又比较神经大条,会倾向于解析成是飞鸟。这个时候,雷达兵的上司就很头大了,他急需一套评估指标来帮助他汇总每一个雷达兵的预测信息,以及来评估这台雷达的可靠性。
对于ROC曲线,它是“真正例率”(True Positive Rate, 简称TPR),横轴是“假正例率”(False Positive Rate,简称FPR)的关系曲线,计算式如下:
T
P
R
=
T
P
T
P
+
F
N
,
F
P
R
=
F
P
F
P
+
T
N
TPR=\frac{TP}{TP+FN} ,FPR=\frac{FP}{FP+TN}
TPR=TP+FNTP,FPR=FP+TNFP
真正例率是在所有正例中,你将多少预测为了正例,这是你希望最大化的,也可以看作收益;假正例率是在所有负例中,你又将多少预测为了正例,这是你希望最小化的,也可以看作代价。
从公式(2)和表中可以看出,TPR考虑的是第一行,实际都是正例,FPR考虑的是第二行,实际都是负例。因此,在正负样本数量不均衡的时候,比如负样本的数量增加到原来的10倍,那TPR不受影响,FPR的各项也是成比例的增加,并不会有太大的变化。因此,在样本不均衡的情况下,同样ROC曲线仍然能较好地评价分类器的性能,这是ROC的一个优良特性,也是为什么一般ROC曲线使用更多的原因。
而看公式(1)和表,精确率P考虑的是第一列,实际中包括正例和负例,因此,正负样本数量的变化会引起该值的变化,进而影响PR曲线对分类器的评价。
曲线下面积(AUC)
简单来说其实就是随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率。
A
U
C
=
P
(
P
正
样
本
>
P
负
样
本
)
AUC=P(P_{正样本} > P_{负样本})
AUC=P(P正样本>P负样本)
在有M个正样本,N个负样本的数据集里。一共有MN对样本(一对样本即,一个正样本与一个负样本)。统计这MN对样本里,正样本的预测概率大于负样本的预测概率的个数。
A
U
C
=
∑
I
(
P
正
样
本
,
P
负
样
本
)
M
∗
N
AUC=\frac{\sum I(P_{正样本},P_{负样本})}{M*N}
AUC=M∗N∑I(P正样本,P负样本)
还有一种计算方法是
A
U
C
=
∑
i
−
>
p
o
s
r
a
n
k
i
−
M
(
M
+
1
)
2
M
∗
N
AUC=\frac{\sum_{i ->pos} rank_{i}-\frac{M(M+1)}{2}}{M*N}
AUC=M∗N∑i−>posranki−2M(M+1)
我画了一个图来解释这个公式是什么意思,首先我们将所有样本按照预测的概率值,从大到小的数据进行排序,最大的那个样本编号为n,依次递减。
- 对于第一个正样本,我们假设排序后的位置是 R 1 R_{1} R1,那么此时,第一个正样本右边还有 M − 1 M-1 M−1个正样本,那么右边还有 R 1 − 1 − ( M − 1 ) R_{1}-1-(M-1) R1−1−(M−1)个负样本,也就是说选择第一个正样本时,会有 R 1 − 1 − ( M − 1 ) R_{1}-1-(M-1) R1−1−(M−1)个负样本小于正样本.
- 同理假设第二个负样本排序后的位置为 R 2 R_{2} R2,第二个正样本右边还有 M − 2 M-2 M−2个正样本,那么右边还有 R 2 − 1 − ( M − 2 ) R_{2}-1-(M-2) R2−1−(M−2)个负样本
- 对于第i个正样本排序后位置是 R i R_{i} Ri,右边还有 M − i M-i M−i个正样本,那么右边还有 R i − ( M − i ) R_{i}-(M-i) Ri−(M−i)个负样本
递归计算后可知
R
1
−
1
−
(
M
−
1
)
+
R
2
−
1
−
(
M
−
2
)
.
.
.
+
R
i
−
(
M
−
i
)
.
.
.
+
R
M
−
1
−
(
M
−
M
)
R_{1}-1-(M-1) +R_{2}-1-(M-2) ... +R_{i}-(M-i)...+R_{M}-1-(M-M)
R1−1−(M−1)+R2−1−(M−2)...+Ri−(M−i)...+RM−1−(M−M),做一个简单的变换后可知
R
1
+
R
2
+
.
.
.
R
M
−
M
−
(
M
−
1
+
M
−
2...
+
1
)
=
∑
R
i
−
(
M
−
1
)
∗
(
M
+
1
)
2
R_{1}+R_{2}+...R_{M}-M-(M-1+M-2...+1)= \sum R_{i} - \frac{(M-1)*(M+1)}{2}
R1+R2+...RM−M−(M−1+M−2...+1)=∑Ri−2(M−1)∗(M+1)。