模型评估:ROC曲线和AUC值

在将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
A100
B001
C010
D001

模型预测完成后,会计算出测试样本在各个分类下的概率,模型预测得分也能用一个[m, n]的矩阵表示,每一行表示样本在各个类别下的概率,记该矩阵为P。

ID分类1分类2分类3
A0.80.150.05
B0.20.30.5
C0.30.60.1
D0.20.10.7

多分类下画ROC曲线有两种方法:

方法1:对每种类别,都可以从矩阵P中得到m个测试样本在该分类下的打分(矩阵P中的列),从矩阵L中获取样本的类别,从而形成一个类似二分类的得分矩阵,以上图为例,分类1 的矩阵为:

IDlabelscore
A10.8
B00.2
C00.3
D00.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曲线。

IDlabel预测为positive的概率
A-110.8
A-200.15
A-300.05
B-100.2
B-200.3
B-310.5
D-310.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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值