混淆矩阵、ROC、AUC

主要内容

(1)混淆矩阵(主要指标)

(2)绘制ROC

(3)AUC

(4)多分类

-------------------------------------------------------------------------------------------------------------------------

一、混淆矩阵

样本预测值
10
实际值1TP(真正)FN(假负)
0FP(假正)TN(真负)

TP(真正)True Positive:实际为正,预测为正

FP(假正)False Positive:实际为负,预测为正

FN(假负)False Negative:实际为正,预测为负

TN(真负)True Negative:实际为负,预测为负

主要指标计算(另外还有其余指标):

真正类率:Sensitive or True Positive Rate(TPR)= TP/(TP+FN)【击中率】

假真类率:Fall-out or False Positive Rate(FPR)= FP/(FP+TN)【错误报警率】

真负类率:TNR = TN/(FP+TN) = 1 - FPR


准确率:Accuracy(ACC) =  (TP+TN)/(P+N) = (TP+TN)/(TP+FP+FN+TN)

精确率(就预测结果而言):Precision = TP/(TP+FP)

召回率(就原来样本而言):Recall = TP/(TP+FN)

调和平均值 F1 = 2*P*R/(P+R)

二、ROC曲线绘制

ROC曲线(receiver operating characteristic curve),又称为感受性曲线(sensitivity curve),如下图所示。

在一个二分类模型中,对于所得到的连续结果,假设已确定一个阀值,比如说 0.6,大于这个值的实例划归为正类,小于这个值则划到负类中。如果减小阀值,减到0.5,固然能识别出更多的正类,也就是提高了识别出的正例占所有正例 的比类,即TPR,但同时也将更多的负实例当作了正实例,即提高了FPR。为了形象化这一变化,在此引入ROC,ROC曲线可以用于评价一个分类器。

(a)ROC曲线上的每一个点对应于一个threshold,对于一个分类器,每个threshold下会有一个TPR和FPR。

比如Threshold最大时,TP=FP=0,对应于原点;Threshold最小时,TN=FN=0,对应于右上角的点(1,1)

(b)随着阈值theta增加,TP和FP都减小,TPR和FPR也减小,ROC点向左下移动;

 

那么,ROC曲线如何绘制呢?

参照网上一个例子来说

preview

这张表共20个样本,实际数据有10个p(正例),10个n(反例),Score代表正例的概率(通过模型得到,例如RF等),对这个概率进行降序排列,即最可能为正样本的排在前面。但至于这个样本是否是正例,需要将score与分类阈值进行比较,若大于这个阈值,则为正例,反之为反例,接着对混淆矩阵进行计算。

下面共列举3个场景说明如何画出ROC曲线点。

(1)场景一:假设设定的阈值为0.9(即大于或等于0.9,预测为正;小于0.9,预测为负)

下面计算混淆矩阵:对于10个实际为正的,1个预测为正,9个预测为负;对于10个实际为负的,0个预测为正,10个预测为负。混淆矩阵如下:

样本

预测值

p

n

实际值

p

1

9

n

0

10

TPR = TP/(TP+FN) = 1/(1+9) = 0.1

FPR = FP/(FP+TN) = 0/(0+10) = 0

即该点在ROC曲线坐标下为(0,0.1)

(2)场景二:假设设定的阈值为0.8(即大于或等于0.8,预测为正;小于0.8,预测为负)

下面计算混淆矩阵:对于10个实际为正的,2个预测为正,8个预测为负;对于10个实际为负的,0个预测为正,10个预测为负。混淆矩阵如下:

样本

预测值

p

n

实际值

p

2

8

n

0

10

TPR = TP/(TP+FN) = 2/(2+8) = 0.2

FPR = FP/(FP+TN) = 0/(0+10) = 0

即该点在ROC曲线坐标下为(0,0.2)

(3)场景三:假设设定的阈值为0.7(即大于或等于0.7,预测为正;小于0.7,预测为负)

下面计算混淆矩阵:对于10个实际为正的,2个预测为正,8个预测为负;对于10个实际为负的,1个预测为正,9个预测为负。混淆矩阵如下:

样本

预测值

p

n

实际值

p

2

8

n

1

9

TPR = TP/(TP+FN) = 2/(2+8) = 0.2

FPR = FP/(FP+TN) = 1/(1+9) = 0.1

即该点在ROC曲线坐标下为(0.1,0.2)

以下计算按照上面步骤进行,直至完成,结果如下图所示

其中,X轴为FPR,Y轴为TPR,当图中的点(threshold)的个数越多,曲线越平滑。

三、AUC值

AUC值就是ROC曲线下方的面积(计算方法即每个点的对应的梯形面积)

四、多分类

以上所述的为二分类的P值,R值,F1值的计算以及ROC曲线的画法,对于多分类问题,我们该如何解决呢?

下面举例说明:

场景:假设一共五个样本,共三类,如下所示

实际值预测值
00
10
22
22
21

其结果如下

 precisionrecallf1-scoresupport
00.501.000.671
10.000.000.001
21.000.670.803
avg/total0.700.6000.615

拿实际值为2的来看,其余以此类推

实际值为2的样本共有3个,则认为2为正例,0和1为负例。其中2个被预测正确,一个预测错误,无负例被预测为正例,建立混淆矩阵如下:

样本

预测值

p(2)

n(0,1)

实际值

p(2)

2

1

n(0,1)

0

2

在此基础上,计算得到:

P = 2/(2+0) = 1.00

R = 2/(2+1) = 0.67

F1 = 2*1.00*0.67/(1+0.67) = 0.80

对于avg是通过加权平均得到的,结果如下:

avg(P) = (0.50*1+1.00*3)/5 = 0.70

avg(R) = (1.00*1+0.67*3)/5 = 0.60

avg(F1) = (0.67*1+0.80*3)/5 = 0.61

 

那么ROC曲线该如何画呢?

对于测试样本m,共有n个类别。(通过模型训练完后,会得到每个样本在各个类别下的概率,也就是score),接着按类别进行排序,并转换为哑变量(二进制),如下所示(假设n=3)

[ 0 => 100 ; 1 => 010 ; 2 => 001 ]

方法一:对哑变量的每一列进行计算FPR和TPR,那么可以得到3条不同的ROC曲线,再对其去平均值,画出最终的ROC曲线(略)。

方法二:

正样本M个,负样本N个,做交叉,总共会产生M*N个样本对,统计一下在这些样本对中有多少正样本的score大于负样本的score,例如有K对,那么AUC的值就是K/(M*N)

举例说明一下:

样本:y=1,y = 1, y=1, y = -1, y = -1, y = -1

模型1的预测:0.8,0.7,0.3,0.5,0.6,0.9

模型2的预测:0.1, 0.8, 0.9, 0.5, 0.85, 0.2

模型1:正样本score大于负样的对包括(y1,y4)(y1,y5)(y2,y4)(y2,y5)。所以AUC值为4/9

模型2:正样本score大于负样本的对包括(y2,y4)(y2,y6)(y3,y4)(y3,y5)(y3,y6)。所以AUC的值为5/9

五、关键问题

(1)样本数量与threshold不是一个概念。样本量对应的score未出现重复时,样本量与threshold数量保持一致。

(2)当ROC曲线出现斜线时,即相对于上一个阈值,FPR和TPR同时增大。

(3)即使数据很大,ROC曲线也会出现不平滑。

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分类混淆矩阵中,并不包含AUC和Recall这两个指标。混淆矩阵主要用于评估分类模型的性能,通过统计分类模型归错类和归对类的观测值个数,将结果展示在一个表中。混淆矩阵主要包括以下几个指标: 1. 真正例(True Positive, TP):模型正确地将正例分类为正例的个数。 2. 假正例(False Positive, FP):模型错误地将负例分类为正例的个数。 3. 假反例(False Negative, FN):模型错误地将正例分类为负例的个数。 4. 真反例(True Negative, TN):模型正确地将负例分类为负例的个数。 通过这些指标,我们可以计算出其他一些评估指标,比如准确率(Accuracy)、精确率(Precision)、召回率(Recall)等。但是AUC(Area Under the Curve)并不是混淆矩阵中的指标,它是用来评估二分类模型的性能的一个指标,表示ROC曲线下的面积。而Recall是指分类模型正确地识别出所有正例的能力,也被称为灵敏度或真正例率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [混淆矩阵aucroc](https://blog.csdn.net/fuge92/article/details/93745705)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [混淆矩阵ROCAUC 学习记录](https://blog.csdn.net/weixin_44912030/article/details/127291953)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值