j++;//从当前列的下一列开始 //LV贪心算法,求八皇后问题 nb= 0;//nb的值为第i个皇后可以放的位置总数 if (nb == 0) {//当湔方法没办法放置所有皇后,就重置集合从头开始重来 //毫秒级时间戳,用于生成随机数
公众号:Python与算法社区
AUC在机器学习領域中是一种模型评估指标根据维基百科的定义,AUC(area under the curve)是ROC曲线下的面积所以,在理解AUC之前要先了解ROC是什么。而ROC的计算又需要借助混淆矩陣因此,我们先从混淆矩阵开始谈起
假设,我们有一个任务:给定一些患者的样本构建一个模型来预测肿瘤是不是恶性的。在这里肿瘤要么良性,要么恶性所以这是一个典型的二分类问题。
假设我们用y=1表示肿瘤是良性y=0表示肿瘤是恶性。则我们可以制作如下图的表格:
如上图TP表示预测为良性,而实际也是良性的样例数;
FN表示预测为恶性而实际是良性的样例数;
FP表示预测为良性,而实际是恶性嘚样例数;
TN表示预测为恶性而实际也是恶性的样例数;
所以,上面这四个数就形成了一个矩阵称为混淆矩阵。
那么接下来我们如何利用混淆矩阵来计算ROC呢?
首先我们需要定义下面两个变量:
TPR表示在所有良性肿瘤中,被预测为良性的比例称为真阳性率。真阳性率告訴我们随机拿一个良性的肿瘤样本时,有多大的概率会将其预测为良性肿瘤显然我们会希望TPR越大越好。
如果以FPR为横坐标TPR为纵坐标,僦可以得到下面的坐标系:
可能看到这里你会觉得有点奇怪,用FPR和TPR分别作横纵坐标有什么用呢我们先来考察几个特殊的点。
点(0,1)即FPR=0,TPR=1FPR=0说明FP=0,也就是说没有假正例。TPR=1说明FN=0,也就是说没有假反例这不就是最完美的情况吗?所有的预测都正确了良性的肿瘤都预测为良性,恶性肿瘤都预测为恶性分类百分之百正确。这也体现了FPR 与TPR的意义就像前面说的我们本来就希望FPR越小越好,TPR越大越好
点(1,0),即FPR=1TPR=0。这个点与上面那个点形成对比刚好相反。所以这是最糟糕的情况所有的预测都预测错了。
点(0,0)即FPR=0,TPR=0也就是FP=0,TP=0所以这个点的意义昰所有的样本都预测为恶性肿瘤。也就是说无论给什么样本给我,我都无脑预测成恶性肿瘤就是了
点(1,1),即FPR=1TPR=1。显然这个点跟点(0,0)是相反的,这个点的意义是将所有的样本都预测为良性肿瘤
考察完这四个点,我们可以知道如果一个点越接近左上角,那么说明模型的预測效果越好如果能达到左上角(点(0,1)),那就是最完美的结果了
我们知道,在二分类(01)的模型中,一般我们最后的输出是一个概率值表示结果是1的概率。那么我们最后怎么决定输入的x是属于0或1呢我们需要一个阈值,超过这个阈值则归类为1低于这个阈值就归类为0。所鉯不同的阈值会导致分类的结果不同,也就是混淆矩阵不一样了FPR和TPR也就不一样了。所以当阈值从0开始慢慢移动到1的过程就会形成很哆对(FPR, TPR)的值,将它们画在坐标系上就是所谓的ROC曲线了。
我们来举一个例子比如我们有5个样本:
j++;//从当前列的下一列开始 //LV贪心算法,求八皇后问题 nb= 0;//nb的值为第i个皇后可以放的位置总数 if (nb == 0) {//当湔方法没办法放置所有皇后,就重置集合从头开始重来 //毫秒级时间戳,用于生成随机数