在机器学习中评价分类模型时经常会用到ROC曲线。
要学习ROC曲线首先得知道什么是TPR,什么是FPR。
TPR的英文全称为:True Positive Rate
FPR的英文全称为:False Positive Rate
中文解释为:
TPR(真正例率):真实值是正例,且预测为正例的比例
FPR(假正例率):真实值为负例,而预测为正例的比例
怎么感觉有些绕口令啊?
OK,看下图:
根据上图图示我们可以看到,真实的情况和预测的情况把整体分成了4个部分:
A部分:真实为正例,预测为正例
B部分:真实为正例,预测为负例
C部分:真实为负例,预测为正例
D部分:真实为负例,预测为负例
TPR = #(A) / #(A) + #(B)
FPR = #© / #© + #(D)
问:什么是正例,什么是负例?
这个是你自己设定的,比如说我们定义是美女就是正例,是如花就是负例
于是上文就变成了:
ROC曲线就是以TPR为Y轴,以FPR为X轴,然后以一个对不同的预测值进行分类.
当取不同阈值时会得到不同的TPR和FPR,对应于ROC曲线上的一个点。
那么ROC曲线就反映了FPR与TPR之间动态关系的情况。
通俗地来说,即在TPR随着FPR递增的情况下,谁增长得更快,快多少的问题。
TPR增长得越快,曲线越往上曲,反映了模型的分类性能就越好。
当正负样本不平衡时,这种模型评价方式比起一般的精确度评价方式 的好处尤其显著。
问:阈值到底是什么?是一个固定的值吗?比如说美女的比例
阈值不是一个固定的值,它是你随意指定的。先不要纠结于阈值是什么,下文看家ROC曲线是怎么画的你就知道它是什么了(其实什么都不是)
画ROC
下面举个例子吧:
公司来了10个同事,全都是姑娘,但是美不美不知道。早已磨刀霍霍的兄弟们开始八卦:到底有几位美女
同事A:有9位美女
同事B:有8位美女
同事C:有7位美女
同事D:有3位不美女
同事E:有2位不美女
同事F:有1位不美女
于是我们得到下面的概率矩阵:
分类 | 概率 |
---|---|
美女(正例) | 0.9 |
美女(正例) | 0.8 |
美女(正例) | 0.7 |
不是美女(负例) | 0.3 |
不是美女(负例) | 0.2 |
不是美女(负例) | 0.1 |
ROC曲线的X轴和Y轴取值范围都是[0,1],现在我们开始画图——根据从大到小遍历预测值,把当前的预测值当做阈值,计算FPR和TPR。
step1:选择阈值最大,即为1,正例中和反例中都没有预测值大于等于1的,所以FPR=TPR=0。
step2:根据上表,选择阈值为0.9,正例中有1个样本的预测值大于等于1,反例中有0个,所以,TPR=1/3,FPR=0。
step3:根据上表,选择阈值为0.8,正例中有2个样本的预测值大于等于1,反例中有0个,所以,TPR=2/3,FPR=0。
step4:根据上表,选择阈值为0.7,正例中有3个样本的预测值大于等于1,反例中有0个,所以,TPR=1,FPR=0。
step5:根据上表,选择阈值为0.3,正例中有3个样本的预测值大于等于1,反例中有1个,所以,TPR=1,FPR=1/3。
step6:根据上表,选择阈值为0.2,正例中有3个样本的预测值大于等于1,反例中有2个,所以,TPR=1,FPR=2/3。
step7:根据上表,选择阈值为0.1,正例中有3个样本的预测值大于等于1,反例中有3个,所以,TPR=1,FPR=1。
综上,我们得到下表
TPR | FPR |
---|---|
0 | 1/3 |
0 | 2/3 |
0 | 1 |
1/3 | 1 |
2/3 | 1 |
1 | 1 |
OK明白了吗?在这里阈值是随意设的,设一个阈值以后会得到一组TPR和FPR;然后换个阈值再得到另外一组TPR和FPR,然后描点成线。
当然这里只是取了一种最特殊的情况。真实情况一般是这样的:
其中:
(0,0)表示:FPR=0,TPR=0。没有负样本预测错误(也就是负样本全部预测正确),正样本全部预测错误。这说明把全部样本都预测为了负样本。
(1,1)表示:FPR=1,TPR=1。负样本全部预测错误,正样本全部预测正确。这说明把全部样本都预测为了正样本。
(0,1)表示:FPR=0,TPR=1。负样本全部预测正确,正样本全部预测正确。这个模型很完美。
(1,0) 表示:FPR=1,TPR=0。负样本全部预测错误,正样本全部预测错误。这个模型太烂了。