在将ROC和AUC之前,先讲前置知识
混淆矩阵
例:
PTR和FPR
- 首先,混淆矩阵的值与设定的阈值有关。假设阈值0.5,即预测值大于0.5则预测其是一个汉堡,小于0.5则预测不是
- 设定的阈值可以为0-1的任意值,因此可以得到许多个混淆矩阵
- PTR和FPR:
- TPR即truepositive(样本为positive,预测正确,即预测positive)占样本中所有positive的比值
- FPR即falsepositive(样本为positive,预测错误,即预测negative)占样本中所有positive的比值
- 一个阈值对应一个混淆矩阵,也对应一个TPR和一个FPR,将不同阈值下的TPR和FPR画在同一坐标轴下,就得到了ROC曲线:
- 我们希望FPR越小越好,TPR越大越好,也就是说曲线上的点越接近左上角越好,因此产生了AUC(area under curve)
- AUC:ROC曲线与x轴的面积(定积分)。因此AUC越大,说明模型越好
- B的AUC显然大于A,因此B模型更好
- 此外,也可以根据ROC曲线选择最合适的阈值
多分类中的ROC和AUC
对于多分类数据,假设测试样本个数为m,分类个数为n(分类label分别为:1,2,…,n),可以将这些样本及对应的label表示为矩阵形式,每行一个样本,每列为该样本是否属于该分类,从而形成一个[m, n]的标签矩阵L:
ID | 分类1 | 分类2 | 分类3 |
---|---|---|---|
A | 1 | 0 | 0 |
B | 0 | 0 | 1 |
C | 0 | 1 | 0 |
D | 0 | 0 | 1 |
模型预测完成后,会计算出测试样本在各个分类下的概率,模型预测得分也能用一个[m, n]的矩阵表示,每一行表示样本在各个类别下的概率,记该矩阵为P。
ID | 分类1 | 分类2 | 分类3 |
---|---|---|---|
A | 0.8 | 0.15 | 0.05 |
B | 0.2 | 0.3 | 0.5 |
C | 0.3 | 0.6 | 0.1 |
D | 0.2 | 0.1 | 0.7 |
多分类下画ROC曲线有两种方法:
方法1:对每种类别,都可以从矩阵P中得到m个测试样本在该分类下的打分(矩阵P中的列),从矩阵L中获取样本的类别,从而形成一个类似二分类的得分矩阵,以上图为例,分类1 的矩阵为:
ID | label | score |
---|---|---|
A | 1 | 0.8 |
B | 0 | 0.2 |
C | 0 | 0.3 |
D | 0 | 0.2 |
按二分类中画ROC曲线的方法,根据以上矩阵,可以计算出各个阈值下的假正例率(FPR)和真正例率(TPR),从而画出一条ROC曲线。
例:先确定某次计算,阈值为0.5,对于类别1ABCD预测结果分别为P,N,N,N,实际标签为P,N,N,N,则TP=1,FP=0,TN=3,FN=0,同理别的类别
对每一个类别,可以画出一条ROC曲线,总共可以画出n条ROC曲线。最后对这n条ROC曲线取平均值,即可得到最终的ROC曲线。
在python中,该方法对于sklearn里sklearn.metrics.roc_auc_score函数中参数average值为’macro’的情况。
方法2:对于一个测试样本:
(1)标签由0和1组成,1的位置表明了它的类别,0表示其他类别。1对应二分类问题中的“正”,0对应“负”
(2)如果模型对该样本分类正确,则该样本在标签矩阵L中1对应的位置在概率矩阵P中的值,即为模型预测该分类的概率值。
基于以上两点,将标签矩阵L和概率矩阵P分别按行展开(即sklearn里的ravel()函数),然后转置形成两列,这就得到了一个二分类结果,根据结果直接画出ROC曲线。
ID | label | 预测为positive的概率 |
---|---|---|
A-1 | 1 | 0.8 |
A-2 | 0 | 0.15 |
A-3 | 0 | 0.05 |
B-1 | 0 | 0.2 |
B-2 | 0 | 0.3 |
B-3 | 1 | 0.5 |
… | … | … |
D-3 | 1 | 0.7 |
A-1表示“A预测为1”,将“A预测为1”作为一个单独的样本。
将label为1代表positive,0代表negative,则这时就变成了一个二分类问题
假设阈值为0.6,则A-1,A-2,A-3,B-1…,D-3分别预测为P,N,N,N,N,N,…,P,真实标签为P,N,N,N,N,P,…,P
在python中,该方法对于sklearn里sklearn.metrics.roc_auc_score函数中参数average值为’micro’的情况。
参考:【【小萌五分钟】机器学习 | 模型评估: ROC曲线与AUC值-哔哩哔哩】 https://b23.tv/01RcV9i
【多分类ROC曲线 (2) 微平均法-哔哩哔哩】 https://b23.tv/JCkbYJZ
https://blog.csdn.net/u010505915/article/details/106450150