-
概念
AUC(Area Under ROC Curve),指的是ROC曲线下面的面积,用于评估ROC曲线的性能。 -
计算
其实ROC的公式挺简单的,就是一个梯形面积的公式:
书上公式如下:
解读如下:
xi+1 - xi为高(读者可以把图竖着看);
yi + yi+1为上底加下底(详见蓝色那根线);
三、loss
我个人在loss这个表达式纠结了很久,所以这里也着重说这个公式。
-
概念
书上写的lrank对应的是ROC曲线上方的面积,AUC = 1 - lrank,公式描述是:若正例预测值小于反例,则记一个“罚分”,若相等,则记0.5个“罚分”。 -
计算
根据南瓜书上写的,这个公式其实也是个矩形公式,只是不容易推导出来,推导过程我就照搬南瓜书的推导了:
这里m+是指多少个正例,m-是指多少个反例,D+代表正例集合,D-代表反例集合。
我们下面解读就以最后一行公式解读:
假设数据如下:
(s1, 0.77, +),(s2, 0.62, −),(s3, 0.58, +),(s4, 0.47, +),(s5, 0.47, −),(s6, 0.33, −),(s7, 0.23, +),(s8, 0.15, −)
我这里也重新画了个图来描述这个计算过程:
解读如下:
这里我们就以公式最后一行来看,1 / 2就是矩阵面积中的“除以二”,1 / m+就是纵轴的一个刻度,也就是矩阵面积中的“高”,这两个是常数项,就先知道这两个的含义即可;
最外层的x+∈D+求和,在代码中相当于一个for循环,遍历所有的正例;
里层的两个x-∈D-求和,相当于嵌套了两个平行的for循环,遍历所有的反例,结合解读2,那么整个循环就是判断每个反例是否大于或等于每个正例,也可以说成是“判断每个正例是否小于等于每个反例”;
由于数据是从大到小进行排列的,所以我们这里把数据可以简化为:(+, -, +, +, -, -, +, -),注意,s4与s5是相同的预测值;
于是整个遍历结果可以表现为下面表格:
计算过程如下:
当第一遍遍历,正例为s1,发现s2-s8没有比s1大的,所以内层两个求和都为0,面积为0,对应上图为y1对应的那条红线;
当第二遍遍历,正例为s3,发现s2比s3大,于是内层第一个求和为1,第二个求和为0,最后运算结果为(1 / m+) · (1 / m-),对应上图a1的面积;
当第三遍遍历,正例为s4,发现s2比s4大,s5与s4相同,于是内层第一个求和为1,第二个求和为1,最后运算结果为 3 / (2 · m + · m-),对应上图a2的面积;
当第四遍遍历,正例为s7,发现s2,s5,s6都比s7大,于是内层第一个求和为3,第二个求和为0,最后运算结果为 3 / (m+ · m-),对应上图a3的面积。
上底与下低
上低就是
四、参考
[1]@Sm1les,@archwalker.南瓜书PumpkinBook[EB/OL].https://github.com/datawhalechina/pumpkin-book,2020.
[2]周志华.机器学习[M].清华大学出版社:北京,2016:33.
参考博客:https://blog.csdn.net/qq_35357274/article/details/108147186