机器学习学习笔记(2)——ROC、AUC与loss公式的推导过程

机器学习学习笔记(2)——ROC、AUC与loss公式的推导过程ROC 与 AUC 是我看的很累的一节 主要是公式推导过程太复杂了 并且南瓜书上也没有写的特别明白计算过程 于是我就自行推导了一次两个公式 并且还有些许自己的理解

大家好,欢迎来到IT知识分享网。

一、ROC

1. 概念

ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,这也是一个用于性能度量的工具,与P-R曲线相似,不过纵轴为“真正例率”(True Positive Rate,TPR),横轴为“假正例率”(False Positive Rate,FPR),两者公式如下:
TPR
FPR
细心地读者已经发现了,TPR的公式和R(召回率)公式一模一样,然后我们用上篇文章的方法来解读这两个公式:

  1. TPR = 预测正确的正类 / 真实情况中的正类。即预测准确的正类占所以正类的比例;
  2. FPR = 预测成正类的负类 / 真实情况中的负类。即预测错误的负类占所有负类的比例。

由这两个数据作为ROC曲线的横轴与纵轴,而曲线下方的面积为AUC(Area Under ROC Curve,下面细讲),如下图所示:
ROC
我们会发现,如果越靠近(0, 1)这个点,TPR越高,FPR越低,说明预测结果更好,在(0, 1)时最高,预测率100%准确;在角平分线上方,预测器正确的比率比错误高;在角平分线上,TPR和FPR是五五开的,也就是说这个预测器等于是在蒙,一半一半的正确率;如果在角平分线下方,那么就是毒奶预测器了,反向思考结果即可。

这里是连续的情况(其实我画的就像是离散的一样…曲线不好画呜呜呜),但是如果数据有限,就会变成离散的情况,如书上34页图2.4b一样,还有我们下面的栗子。

2. 绘制方法

书上只写了一个绘制方法,但是我用了两种方法进行绘制,我这边先叙述我自己的方法,再讲解书上的方法,最后再来分析为什么我的方法的最优情况就是书上的方法。

这里先把南瓜书的栗子给大家放上来:

预测结果:
(s1, 0.77, +),(s2, 0.62, −),(s3, 0.58, +),(s4, 0.47, +),(s5, 0.47, −),(s6, 0.33, −),(s7, 0.23, +),(s8, 0.15, −)

一共4个正类,4个负类,m+ = 4,m = 4。
ROC曲线:
栗子ROC曲线
注:绿色的线代表该预测结果是个真正例,红色的线代表预测结果是个假正例。

这个曲线我其实有点没弄懂这个蓝色的线,因为我第一次绘图的时候是用的一根绿加一根红,但是后来发现这样绘图与公式的结果不同,于是我就开始考虑这个蓝色线的问题,由于蓝色线包含的两个点分别为:(s4, 0.47, +),(s5, 0.47, −),值相同,预测结果不同,所以我个人的理解如下:

由于值相同,预测相反,如果按照先绿色再红色,那么会使得AUC变大这么一个小三角形的面积,但是这种预测本身是摇摆的,不可能增大这么一坨预测正确的值而减少上面面积(loss)的值,所以就用角平分线来代替,这样无论是loss还是AUC的面积都相同。

2.1 我的方法

其实我的方法很简单,就是简单地计算TPR和FPR,计算步骤如下:

  1. 将分类阈值设为最大,TPR和FPR都为0,第一个点(0, 0);
  2. 将s1划分为正例,也就是说s1是“截断点”,那么整个集合变为:(+, -, -, -, -, -, -, -),此时共有:1个TP,3个FN,4个TN,0个FP,FPR = 0 / (4 + 0) = 0,TPR = 1 / (1 + 3) = 1 / 4,第二个点为(0, 1 / 4);
  3. 将s1、s2划分为正例,此时s2为“截断点”,整个集合变为:(+, +, -, -, -, -, -, -),此时共有:1个TP,1个FP,3个TN,3个FN,FPR = 1 / (1 + 3) = 1 / 4,TPR = 1 / (1 + 3) = 1 / 4;

2.2 书上的方法

书上的方法步骤如下:

  1. 将分类阈值设为最大,TPR和FPR都为0,第一个点(0, 0);
  2. 将分类阈值依次设为每个样例的预测值,即依次将每个样例划分为正例;
  3. 前一个标记点坐标记为(x, y);
  4. 若当前为真正例则对应的标记点坐标为(x, y + 1 / m+),若当前为假正例则对应的标记点坐标为(x + 1 / m, y);
  5. 相连节点(如果预测值相同,那么跳过中间那个节点,连接相同节点的前一个节点和最后一个相同的节点,比如上面数据中的s3与s5)。

那么依据上面的方法,计算步骤如下:

  1. 第一个点为(0, 0);
  2. 设定s1为正例,且s1为真正例,此时x = 0,y = 0,于是s1为(0, 0 + 1 / 4) = (0, 1 / 4);
  3. 设定s2为正例,且s2为假正例,此时x = 0,y = 1 / 4,于是s2为(0 + 1 / 4, 1 / 4) = (1 / 4, 1 / 4);

2.3 两者的关系

为什么我的计算方式可以转换为书上的计算方式,我认为有以下几个原因:

  1. 因为虽然每次都在改变,但是每一次只会有一个预测点发生改变;
  2. TP + FN = m+, TN + FP = m,而m+与m是固定的,所以每次改变也仅会有一个发生改变,当TP + 1时,FN – 1是确定的,FP + 1时,TN – 1也是确定的,而对于两个公式而言,就是分子每次 + 1,但是分母不变,所以每次都是改变一个1 / m+或者1 / m

2.4 性能评价

当我们评价多个预测器指标的时候,如果一个预测器的ROC完全包住了另外一个预测器的ROC,那么前者性能优于后者,但是如果有交叉的部分,就需要比较两者的AUC了。

二、AUC

1. 概念

AUC(Area Under ROC Curve),指的是ROC曲线下面的面积,用于评估ROC曲线的性能。

2. 计算

其实ROC的公式挺简单的,就是一个梯形面积的公式:
梯形面积公式
书上公式如下:
AUC
解读如下:

  1. xi+1 – xi为高(读者可以把图竖着看);
  2. yi + yi+1为上底加下底(详见蓝色那根线);

三、loss

我个人在loss这个表达式纠结了很久,所以这里也着重说这个公式。

1. 概念

书上写的lrank对应的是ROC曲线上方的面积,AUC = 1 – lrank,公式描述是:若正例预测值小于反例,则记一个“罚分”,若相等,则记0.5个“罚分”。

2. 计算

根据南瓜书上写的,这个公式其实也是个矩形公式,只是不容易推导出来,推导过程我就照搬南瓜书的推导了:
loss公式推导
这里m+是指多少个正例,m是指多少个反例,D+代表正例集合,D代表反例集合。

我们下面解读就以最后一行公式解读:
loss最后推导结果

鉴于大家懒得去上面翻数据,我这里把数据重新贴一下:
(s1, 0.77, +),(s2, 0.62, −),(s3, 0.58, +),(s4, 0.47, +),(s5, 0.47, −),(s6, 0.33, −),(s7, 0.23, +),(s8, 0.15, −)

我这里也重新画了个图来描述这个计算过程:
loss

解读如下:

  1. 这里我们就以公式最后一行来看,1 / 2就是矩阵面积中的“除以二”,1 / m+就是纵轴的一个刻度,也就是矩阵面积中的“”,这两个是常数项,就先知道这两个的含义即可;
  2. 最外层的x+∈D+求和,在代码中相当于一个for循环,遍历所有的正例;
  3. 里层的两个x∈D求和,相当于嵌套了两个平行的for循环,遍历所有的反例,结合解读2,那么整个循环就是判断每个反例是否大于或等于每个正例,也可以说成是“判断每个正例是否小于等于每个反例”;
  4. 由于数据是从大到小进行排列的,所以我们这里把数据可以简化为:(+, -, +, +, -, -, +, -),注意,s4与s5是相同的预测值;
  5. 于是整个遍历结果可以表现为下面表格:
    遍历结果

计算过程如下:

  1. 当第一遍遍历,正例为s1,发现s2-s8没有比s1大的,所以内层两个求和都为0,面积为0,对应上图为y1对应的那条红线;
  2. 当第二遍遍历,正例为s3,发现s2比s3大,于是内层第一个求和为1,第二个求和为0,最后运算结果为(1 / m+) · (1 / m),对应上图a1的面积;
  3. 当第三遍遍历,正例为s4,发现s2比s4大,s5与s4相同,于是内层第一个求和为1,第二个求和为1,最后运算结果为 3 / (2 · m + · m),对应上图a2的面积;
  4. 当第四遍遍历,正例为s7,发现s2,s5,s6都比s7大,于是内层第一个求和为3,第二个求和为0,最后运算结果为 3 / (m+ · m),对应上图a3的面积。

四、参考

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/148919.html

(0)
上一篇 2025-03-27 16:45
下一篇 2025-03-27 17:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信