0 用到的知识
介绍ROC和PR前先介绍混淆矩阵便于理解。
- | 预测值 正 | 预测值 负 |
---|---|---|
真实值 正 | TP | FN |
真实值 负 | FP | TN |
TP(True Positive): 被判定为正样本,实际也为正样本
FN(False Negative):伪阴性 ,被判定为负样本,实际为正样本
FP(False Positive):伪阳性,被判断为正样本,实际为负样本
TN(True Negative):被判断为负样本,实际为负样本
假阳率:在所有的负样本中,分类器预测错误的比例
F P R = F P F P + T N FPR = \frac{FP}{FP+TN} FPR=FP+TNFP
真阳率:在所有的正样本中,分类器预测正确的比例
T P R = T P T P + F N TPR = \frac{TP}{TP + FN} TPR=TP+FNTP
recall 分类器所预测正确的正样本占所有正样本的比例,和FPR相同
r = T P T P + F N r = \frac{TP}{TP + FN} r=TP+FNTP
precision 分类器预测的正样本中预测正确的比例。
p = T P T P + F P p = \frac{TP}{TP + FP} p=TP+FPTP
1 绘制 ROC
ROC curve 横坐标为False Positive Rate(FPR假正率),纵坐标为True Positive Rate(TPR真正率)。一般情况下,这个曲线都应该处于(0,0)和(1,1)连线的上方。
在PR曲线中越左上凸越好
一共有下面两个步骤
1.1 排序
按照属于‘正样本’的概率将所有样本排序
1.2 描点
(1)从得分最高的第一个样本开始,如果将他的score作为阈值,也就是说,当score大于等于0.9时,才把样本归类到真阳性(true positive),这么一来, 在ROC曲线图中,样本1对应的混淆矩阵(confusion matrix)为
- | 预测值 正 | 预测值 负 |
---|---|---|
真实值 正 | 1 | 9 |
真实值 负 | 0 | 10 |
其中,正样本只有样本1分类正确,此时TPR = 1 / (1 + 9) = 0.1,FPR = 0 / (0 + 10) = 0.0,此时可以在(0, 0.1)处标记一个点。
(2)看第2个样本。此时与之设为0.8,样本2对应的混淆矩阵(confusion matrix)为
- | 预测值 正 | 预测值 负 |
---|---|---|
真实值 正 | 2 | 8 |
真实值 负 | 0 | 10 |
其中,正样本只有样本1,2分类正确,此时TPR = 2 / (2 + 8) = 0.2,FPR = 0 / (0 + 10) = 0.0,此时可以在(0, 0.2)处标记一个点。
(3)看第3个样本。此时与之设为0.7,样本3实际为负样本,被错误的预测为了正样本,对应的混淆矩阵(confusion matrix)为
- | 预测值 正 | 预测值 负 |
---|---|---|
真实值 正 | 2 | 8 |
真实值 负 | 1 | 9 |
其中,正样本只有样本1,2分类正确,此时TPR = 2 / (2 + 8) = 0.2,FPR = 1 / (1 + 9) = 0.1,此时可以在(0.1, 0.2)处标记一个点。
重复上述步骤直至所有样本遍历完成,然后将所有的点连接起来,可以得到下图:
-
(0,1)点:代表FPR=0,TPR=1; 最好的情况,所有正样本都被正确的预测了,并且没有负样本被人为是正样本。
-
(1,0)点:代表FPR=1,TPR=0;最坏的情况,表明所有的正样本都被错误的认为是负样本
-
(0,0)点:代表FPR=0,TPR=0;分类器将所有的样本都判定为负样本
-
(1,1)点:代表FPR=1,TPR=1;分类器将所有的样本都判定为正样本
2 绘制 PR
PR曲线是由精确率和召回率的点连成的线,横轴为Recall,纵轴为Precision,
在PR曲线中越右上凸越好,PR想要Precision 和Recall同时高
一共有下面两个步骤
2.1 排序
按照属于‘正样本’的概率将所有样本排序
1.2 描点
(1)从得分最高的第一个样本开始,如果将他的score作为阈值,也就是说,当score大于等于0.9时,才把样本归类到真阳性(true positive),这么一来, 在ROC曲线图中,样本1对应的混淆矩阵(confusion matrix)为
- | 预测值 正 | 预测值 负 |
---|---|---|
真实值 正 | 1 | 9 |
真实值 负 | 0 | 10 |
其中,正样本只有样本1分类正确,此时Recall = 1 / (1 + 9) = 0.1,2,Precision = 1 / (1 + 0) = 1.0,此时可以在(0.1, 1)处标记一个点。
(2)看第2个样本。此时与之设为0.8,样本2对应的混淆矩阵(confusion matrix)为
- | 预测值 正 | 预测值 负 |
---|---|---|
真实值 正 | 2 | 8 |
真实值 负 | 0 | 10 |
其中,正样本只有样本1,2分类正确,此时Recall = 2 / (2 + 8) = 0.2,Precision = 2 / (2 + 0) = 1.0,此时可以在(0.2, 1)处标记一个点。
(3)看第3个样本。此时与之设为0.7,样本3实际为负样本,被错误的预测为了正样本,对应的混淆矩阵(confusion matrix)为
- | 预测值 正 | 预测值 负 |
---|---|---|
真实值 正 | 2 | 8 |
真实值 负 | 1 | 9 |
其中,正样本只有样本1,2分类正确,此时Recall = 2 / (2 + 8) = 0.2,Precision = 2 / (2 + 1) = 0.67,此时可以在(0.67, 0.2)处标记一个点。
重复上述步骤直至所有样本遍历完成,然后将所有的点连接起来,可以得到下图:
欢迎关注微信公众号(算法工程师面试那些事儿),本公众号聚焦于算法工程师面试,期待和大家一起刷leecode,刷机器学习、深度学习面试题等,共勉~