首页 > 其他分享 >《机器学习》—— AUC评估指标

《机器学习》—— AUC评估指标

时间:2024-08-23 08:53:28浏览次数:11  
标签:AUC 样本 机器 模型 ROC 概率 类别 评估

文章目录

一、什么是AUC?

  • 机器学习中的AUC(Area Under the Curve)是一个重要的评估指标,特别是在二分类问题中。
  • AUC特指ROC曲线(Receiver Operating Characteristic Curve)下的面积用于衡量分类器区分正负类的能力
  • AUC值越大,表示模型的性能越好,即模型能够更好地区分正负样本。

1、什么是ROC曲线?

  • ROC曲线(Receiver Operating Characteristic Curve,受试者工作特征曲线)是一种用于评估分类模型性能的图形化方法,特别是在二分类问题中。ROC曲线通过绘制**真正例率(True Positive Rate, TPR)假正例率(False Positive Rate, FPR)**的关系来展示模型在不同阈值下的性能。

  • 在说明 TPR 和 FPR 是什么意思之前,先来了解一下混淆矩阵

    • 混淆矩阵的基本结构如下:

      _预测为正类别预测为负类别
      实际为正类别True Positive (TP)False Negative (FN)
      实际为负类别False Positive (FP)True Negative (TN)
    • True Positive (TP): 模型将实际为正类别的样本正确预测为正类别。

    • False Negative (FN): 模型将实际为正类别的样本错误预测为负类别。

    • False Positive (FP): 模型将实际为负类别的样本错误预测为正类别。

    • True Negative (TN): 模型将实际为负类别的样本正确预测为负类别。

  • 真正例率(True Positive Rate, TPR):也称为灵敏度(Sensitivity)或召回率(Recall),是正确预测的正例占所有实际正例的比例。

    • TPR= (TP+FN) / TP

      其中,TP是真正例的数量,FN是假负例的数量。
  • 假正例率(False Positive Rate, FPR):是错误预测为正例的负例占所有实际负例的比例。

    • FPR= (FP+TN) / FP

      其中,FP是假正例的数量,TN是真负例的数量。
  • 阈值(Threshold):在分类问题中,模型通常会输出一个介于0和1之间的概率值,表示属于某个类别的概率。通过设置不同的阈值(比如0.5),可以将概率值转换为类别标签(0或1)。

2、ROC曲线的绘制

  • ROC曲线是通过在不同阈值下计算TPR和FPR的值,并将这些点绘制在二维坐标图上得到的。横轴是FPR纵轴是TPR。理想情况下,我们希望模型的ROC曲线尽可能接近左上角(FPR=0, TPR=1),这表示模型具有高灵敏度和高特异性。
  • 正常训练模型所画出的ROC曲线如下图所示:
    • 绿色曲线便是ROC曲线
    • 阴影部分的面积便是AUC的值
      在这里插入图片描述
  • 理想状态下的ROC曲线
    • 实际训练模型很难达到
      在这里插入图片描述

二、如何计算AUC的值

  • AUC有两种计算方法,这里我们介绍用公式求解的方法

  • 下面是一个经过很多复杂的推到得到的求解公式
    在这里插入图片描述

    • M——>正样本的个数
    • N——>负样本的个数
      在这里插入图片描述
    • 表示将为正样本的序列值相加
  • 例子:

    • 假设有4个样本,对应的真实标签有 1 和 0 , 并经过一个二分类模型训练后,所得到为正样本的概率,这里我们规定标签为1的是正样本(其实就是结果为标签1的概率)

      样本真实标签模型预测的概率
      A00.1
      B00.4
      C10.35
      D10.8
    • 按概率升序排列后得到:

      样本真实标签模型预测的概率rank
      A00.11
      C10.352
      B00.43
      D10.84
    • 按照上面的公式,只把正样本的序号加起来也就是只把样本C,D的rank值加起来后减去一个常数项:M(M+1)/2再除以正负样本数量的乘积

    • AUC的计算为:

      • AUC = [ (4+2) -2*(2+1)/2]/2*2=0.75
  • 如果出现概率相等的情况又该如何计算呢?

    • 下面的例子中有4个样本测试后的概率为0.5,而且既有正样本也有负样本的情况

    • 计算的时候,其实原则就是相等概率的rank取平均值

      样本真实标签模型预测的概率
      A10.8
      B10.7
      C00.5
      D00.5
      E10.5
      F10.5
      G00.3
    • 排序:

      样本真实标签模型预测的概率rank
      G00.31
      F10.52
      E10.53
      D00.54
      C00.55
      B10.76
      A10.87
    • 这里需要注意的是:相等概率的样本,无论正负,谁在前,谁在后无所谓。

    • 由于只考虑正样本的rank值

      • 对于正样本A,其rank值为7
      • 对于正样本B,其rank值为6
      • 对于正样本E,其rank值为(5+4+3+2)/4
      • 对于正样本F,其rank值为(5+4+3+2)/4
    • AUC的计算为:

      • AUC = [ 7 + 6 +(5+4+3+2)/4 + (5+4+3+2)/4 - 4*(4+1)/2] / 4*3 = 10/12=5/6

三、代码实现AUC值的计算

  • 可以直接调用Python中 sklearn.metrics 类中 roc_auc_score() 方法

  • 只需要将数据的真实标签模型预测为正例的概率传入即可计算出结果

  • 我们将上面示例中的数据传入,得出结果

    import numpy as np
    from sklearn.metrics import roc_auc_score
    
    y_label_1 = np.array([0, 0, 1, 1])
    x_scores_1 = np.array([0.1, 0.4, 0.35, 0.8])
    AUC_1 = roc_auc_score(y_label_1, x_scores_1)
    print(AUC_1)
    
    # 结果为:0.75 
    
    y_label_2 = np.array([1, 1, 0, 0, 1, 1, 0])
    x_scores_2 = np.array([0.8, 0.7, 0.5, 0.5, 0.5, 0.5, 0.3])
    AUC_2 = roc_auc_score(y_label_2, x_scores_2)
    print(AUC_2)
    
    # 结果为:0.8333333333333334
    
  • 对比可以看出,代码计算出的结果与例子中计算的结果一致

四、AUC的优缺点

  • 优点
    • 衡量排序能力:AUC主要关注模型对样本的排序能力,即能否将正样本排在负样本之前,适合排序类任务。
    • 对正负样本均衡不敏感:在样本不均衡的情况下,AUC仍然能够提供有效的评估,不会像准确率等指标那样受到样本比例的影响。
      无阈值依赖:AUC是一种无阈值依赖的评估指标,它不需要设定一个具体的分类阈值来判断样本的类别。这使得AUC在评估模型性能时更加灵活和稳定。
  • 缺点
    • 忽略预测概率值:AUC主要关注排序能力,而忽略了预测的具体概率值。这可能导致在某些情况下无法准确反映模型的拟合程度。例如,当模型对所有样本的预测概率都接近时,即使AUC值较高,模型的预测能力也可能较差。
    • 信息笼统:AUC反应的信息较为笼统,无法直接反映召回率、精确率等实际业务关心的指标。因此,在评估模型性能时,还需要结合其他评估指标进行综合考量。
    • 无法衡量样本内部排序:AUC只关心正负样本之间的排序,而不关心正负样本内部的排序。这可能导致在某些个性化推荐等场景中无法准确评估模型的性能。

标签:AUC,样本,机器,模型,ROC,概率,类别,评估
From: https://blog.csdn.net/weixin_73504499/article/details/141439053

相关文章

  • 机器学习1
    机器学习简介定义ArthurSamuel(1959): Fieldofstudythatgivescomputerstheabilitytolearnwithoutbeingexplicitlyprogrammed. 将机器学习定义为  赋予计算机在没有明确编程的情况下进行学习的能力的研究领域。omMitchell(1998): Well-posedLearningPro......
  • 机器学习-KNN 算法
    一.K-近邻(KNN)K-近邻(K-NearestNeighbors,简称KNN)是一种基于实例的学习算法,主要用于分类和回归问题。KNN的工作原理直观且简单,它基于相似性进行预测,也就是说给定一个新的数据点,KNN算法会查找距离最近的K个数据点,然后通过这些邻居来确定新数据点的类别(在分类任务中)或......
  • 【机器学习】西瓜书第一章 绪论
    参考资料:[1]周志华.机器学习[M].清华大学出版社,2016.一、引言我们生活中存在许多基于经验做出的判断,比如月明星稀,那第二天可能会是好天气;一个西瓜敲起来声音响,色泽也不错,大概率是一个好瓜。我们做出这样判断的原因是我们观察到了很多月明星稀之后的好天气,吃到了很多符合......
  • 机器学习/数据分析--通俗语言带你入门K-邻近算法(结合案例)
    ......
  • AI机器人界的叶问,国产全能生活助手
     “从自动驾驶汽车到智能家居,AI的身影无处不在。而今,国产人形AI机器人的横空出世,更是将AI的边界推向了一个新的高度,它的故事,让海外最火AI机器人Figure的CEO也投来关注的目光。”机器人版叶师傅的诞生一个机器人,不仅能弹奏出悠扬的乐曲,还能熟练地泡一壶功夫茶,甚至......
  • OpenCV 机器人手眼标定
    OpenCV机器人手眼标定(九点标定法)对于初学者而言,对相机的标定经常模糊不清。不知道机器坐标与相机坐标如何转换,两个坐标系又是如何建立?我们通常是利用张氏标定法,针对于相机的畸变进行标定,利用校正得到的参数对图形进行处理后再呈现出来。这个方法网上用的人很多,资......
  • 洛谷P1540 [NOIP2010 提高组] 机器翻译答案
    #include<bits/stdc++.h>usingnamespacestd;/*数据结构:队列queue 桶:标记某个单词是否出现在内存中 t[i]=false:不在t[i]=true:在对于读入的每个单词x: 如果不存在单词x 存储(入队) t[x]=true 内存中元素个数(q.size())>M: t[q.front()]=falses; ......
  • 【OS系列】程序是怎么一步步变成机器指令的?
    程序是怎么一步步变成机器指令的?2024年08月22日12:03四川以下文章来源于码农的荒岛求生,作者码农的荒岛求生大家好,今天简单聊聊程序是怎么一步步变成机器指令的。左边是我们写的代码,右边是CPU执行的机器指令:想让CPU执行代码只需要简单的点击一下这个按钮:可是你知道这个......
  • 星尘智能发布AI机器人助理Astribot S1
    原文链接:https://mp.weixin.qq.com/s/P26zhHzmuqe0M2TDTLRlvg星尘智能很高兴正式发布AI机器人助理——AstribotS1我们精心打磨了S1背后的技术与产品细节,希望它为你而生,为你而智(NaturallyYours)。星尘智能S1产品视频请看:https://www.bilibili.com/video/BV1ovpyeTE84......
  • 【花雕动手做】腿机构十一种:盘点机器人行走背后的连杆机械原理
    机器人概念已经红红火火好多年了,目前确实有不少公司已经研制出了性能非常优越的机器人产品,我们比较熟悉的可能就是之前波士顿动力的“大狗”和会空翻的机器人了,还有国产宇树科技的机器狗等,这些机器人动作那么敏捷,背后到底隐藏了什么高科技呢,控制技术太过复杂,一般不太容易了......