`
Taoo
  • 浏览: 293903 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AUC的计算方法总结

阅读更多


前面的一个帖子中谈到了在决策树模型下计算AUC的问题,主要是讨论如何用决策树得到test samples的更为合理的rank。但是,关于怎么计算AUC却没有详细说明。本文试图总结和理清楚AUC计算这个问题,这么做,除了因为AUC本身比较常用和重要以外,还有以下两个方面的原因:

a. 有些做machine learning的同行,没有仔细的搞清楚AUC到底是怎么回事。就写文章(竟然发表在KDD上……)告诉读者他们是多么麻烦的计算AUC!

b. 我们实验室在研究过程中,也实际的需要计算AUC。一开始的时候,我在这个问题的认识上也经历了一段模糊期。所以,我想写这篇帖子还是会有些价值的。

让我们从头说起,首先AUC是一种用来度量分类模型好坏的一个标准。这样的标准其实有很多,例如:大约10年前在 machine learning文献中一统天下的标准:分类精度;在信息检索(IR)领域中常用的recall和precision,等等。其实,度量反应了人们对” 好”的分类结果的追求,同一时期的不同的度量反映了人们对什么是”好”这个最根本问题的不同认识,而不同时期流行的度量则反映了人们认识事物的深度的变 化。近年来,随着machine learning的相关技术从实验室走向实际应用,一些实际的问题对度量标准提出了新的需求。特别的,现实中样本在不同类别上的不均衡分布(class distribution imbalance problem)。使得accuracy这样的传统的度量标准不能恰当的反应分类器的performance。举个例子:测试样本中有A类样本90个,B 类样本10个。分类器C1把所有的测试样本都分成了A类,分类器C2把A类的90个样本分对了70个,B类的10个样本分对了5个。则C1的分类精度为 90%,C2的分类精度为75%。但是,显然C2更有用些。另外,在一些分类问题中犯不同的错误代价是不同的(cost sensitive learning)。这样,默认0.5为分类阈值的传统做法也显得不恰当了。

为了解决上述问题,人们从医疗分析领域引入了一种新的分类模型performance评判方法——ROC分析。ROC分析本身就是一个很丰富的内容,有兴趣的读者可以自行Google。由于我自己对ROC分析的内容了解还不深刻,所以这里只做些简单的概念性的介绍。

ROC的全名叫做Receiver Operating Characteristic,其主要分析工具是一个画在二维平面上的曲线——ROC curve。平面的横坐标是false positive rate(FPR)虚惊概率,纵坐标是true positive rate(TPR)集中概率。对某个分类器而言,我们可以根据其在测试样本上的表现得到一个TPR和FPR点对。这样,此分类器就可以映射成ROC平面上的一个 点。调整这个分类器分类时候使用的阈值,我们就可以得到一个经过(0, 0),(1, 1)的曲线,这就是此分类器的ROC曲线。一般情况下,这个曲线都应该处于(0, 0)和(1, 1)连线的上方。因为(0, 0)和(1, 1)连线形成的ROC曲线实际上代表的是一个随机分类器。如果很不幸,你得到一个位于此直线下方的分类器的话,一个直观的补救办法就是把所有的预测结果反 向,即:分类器输出结果为正类,则最终分类的结果为负类,反之,则为正类。虽然,用ROC curve来表示分类器的performance很直观好用。可是,人们总是希望能有一个数值来标志分类器的好坏。于是Area Under roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC curve下方的那部分面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的performance。好了,到此为止,所有的 前续介绍部分结束,下面进入本篇帖子的主题:AUC的计算方法总结。

   1. 最直观的,根据AUC这个名称,我们知道,计算出ROC曲线下面的面积,就是AUC的值。事实上,这也是在早期 Machine Learning文献中常见的AUC计算方法。由于我们的测试样本是有限的。我们得到的AUC曲线必然是一个阶梯状的。因此,计算的AUC也就是这些阶梯 下面的面积之和。这样,我们先把score排序(假设score越大,此样本属于正类的概率越大),然后一边扫描就可以得到我们想要的AUC。但是,这么 做有个缺点,就是当多个测试样本的score相等的时候,我们调整一下阈值,得到的不是曲线一个阶梯往上或者往右的延展,而是斜着向上形成一个梯形。此 时,我们就需要计算这个梯形的面积。由此,我们可以看到,用这种方法计算AUC实际上是比较麻烦的。
   2. 一个关于AUC的很有趣的性质是,它和Wilcoxon-Mann-Witney Test是等价的。这个等价关系的证明留在下篇帖子中给出。而Wilcoxon-Mann-Witney Test就是测试任意给一个正类样本和一个负类样本,正类样本的score有多大的概率大于负类样本的score。有了这个定义,我们就得到了另外一中计 算AUC的办法:得到这个概率。我们知道,在有限样本中我们常用的得到概率的办法就是通过频率来估计之。这种估计随着样本规模的扩大而逐渐逼近真实值。这 和上面的方法中,样本数越多,计算的AUC越准确类似,也和计算积分的时候,小区间划分的越细,计算的越准确是同样的道理。具体来说就是统计一下所有的 M×N(M为正类样本的数目,N为负类样本的数目)个正负样本对中,有多少个组中的正样本的score大于负样本的score。当二元组中正负样本的 score相等的时候,按照0.5计算。然后除以MN。实现这个方法的复杂度为O(n^2)。n为样本数(即n=M+N)
   3.
      第三种方法实际上和上述第二种方法是一样的,但是复杂度减小了。它也是首先对score从大到小排序,然后令最大score对应的sample 的rank为n,第二大score对应sample的rank为n-1,以此类推。然后把所有的正类样本的rank相加,再减去正类样本的score为最 小的那M个值的情况。得到的就是所有的样本中有多少对正类样本的score大于负类样本的score。然后再除以M×N。即





      另外,特别需要注意的是,再存在score相等的情况时,对相等score的样本,需要 赋予相同的rank(无论这个相等的score是出现在同类样本还是不同类的样本之间,都需要这样处理)。具体操作就是再把所有这些score相等的样本 的rank取平均。然后再使用上述公式。

------------------------------------------------------------------------
ROC(Receiver Operating Characteristic)曲线,用于二分类判别效果的分析与评价.一般自变量为连续变量,因变量为二分类变量.
基 本原理是:通过判断点(cutoff point/cutoff value)的移动,获得多对灵敏度(sensitivity)和误判率(1-Specificity(特异度)),以灵敏度为纵轴,以误判率为横轴,连 接各点绘制曲线,然后计算曲线下的面积,面积越大,判断价值越高.
灵敏度:就是把实际为真值的判断为真值的概率.
特异度:就是把实际为假值的判断为假值的概率.
将绘成的曲线与斜45度的直线对比,若差不多重合,说明自变量对因变量的判断价值很差,若越远离斜45度的直线即曲线下的面积越大,说明自变量对因变量的判断价值越好,即根据自变量可以较为正确的判断因变量.
使用SPSS的操作过程如下:
Graphs/ROC Curve:Test variable选自变量(连续型变量),state varibale选因变量(二分类变量)display的选项一般全选.
运行结果:1.ROC曲线,可直观地看到曲线形状.
2.Area under the curve:曲线下方的面积,包括面积值,显著性分析,置信区间.
3.Coordinates of the curve:ROC曲线各点对应的灵敏度和误判率.
  • 大小: 15 KB
  • 大小: 6.8 KB
分享到:
评论
1 楼 super_wlb 2014-05-14  
lz, 第三种计算auc的方法中 “再减去正类样本的score为最 小的那M个值的情况”这句话是什么意思?公式里面分子的M和分母的M是一样的吗?

相关推荐

    AUC的两种计算方法代码数据

    在实际应用中,AUC计算不仅可以用于模型评估,还可以帮助选择最佳阈值。如果AUC值高,说明模型对于不同阈值的表现相对稳定,对正负样本的区分能力强。 总结来说,这个压缩包提供了两种不同的MATLAB方法来计算AUC,...

    python计算auc的方法

    总结来说,计算AUC和ROC曲线是评估二分类模型性能的关键方法。Python的Scikit-learn库提供了便捷的函数来完成这些任务,使得开发者能够快速评估和比较不同模型的性能。了解并熟练运用这些工具,对于优化模型和提升...

    auc_java_AUC_置信度_分类算法_预测_

    本文将详细阐述AUC的概念、计算方法、其在分类预测中的作用,以及Java在实现这些计算中的应用。 AUC,全称为曲线下面积,是ROC曲线(Receiver Operating Characteristic curve)下方的面积。ROC曲线是衡量二分类...

    KS_AUC的详解

    本文将详细介绍这两种度量方法的原理、计算过程及其在实践中的应用。 #### 二、AUC详解 **AUC**,全称为Area Under the ROC Curve,即ROC曲线下的面积。ROC曲线是根据不同的阈值计算出的真正例率(True Positive ...

    利用Python画ROC曲线和AUC值计算

    示例代码中,作者提供了一个自定义的AUC计算方法,首先读取数据,然后按预测分数排序,依次计算TPR和FPR,最后通过累加每个小矩形的面积来计算AUC。这种方法适用于没有内置AUC计算功能的模型。 需要注意的是,这个...

    基于分布式核的在线AUC最大化算法.pdf

    为了实现这一目标,研究者提出了基于分布式核的在线AUC最大化算法,该算法结合了核学习方法和分布式在线学习框架,以解决大规模不均衡数据集上的分类性能评价问题。 AUC(Area Under Curve,曲线下面积),是一种...

    python计算auc指标实例

    通过上述步骤,我们可以看到 Scikit-learn 提供了非常方便的方法来计算 AUC 和绘制 ROC 曲线。这对于评估和优化分类器的性能至关重要。希望本文能帮助读者更好地理解如何使用 Python 和 Scikit-learn 进行 AUC 计算...

    Pr图构建源码:深度学习结束后,构建PR图并计算AUC数值

    - **计算方法**: - **梯形法则(Trapezoidal Rule)**:通过将曲线分割成一系列梯形,并计算这些梯形的面积总和来近似曲线下的面积。 - **辛普森法则(Simpson's Rule)**:更高级的一种积分方法,适用于曲线形状...

    keras用auc做metrics以及早停实例

    在Keras中,我们可以自定义函数来计算AUC,或者直接使用内置的`tf.metrics.auc`方法。 首先,我们可以自定义一个计算AUC的函数,如代码中的`auroc`函数,它利用了`sklearn.metrics.roc_auc_score`来计算AUC,并通过...

    利用python画出AUC曲线的实例

    - **计算ROC曲线及AUC值**:使用`roc_curve`函数根据真实的标签和预测概率计算出假正率(FPR)、真正率(TPR)以及不同的阈值,然后使用`auc`函数计算AUC值。 ```python plt.figure(figsize=(6, 6)) plt.title('...

    Keras 利用sklearn的ROC-AUC建立评价函数详解

    在`on_epoch_end`方法中,我们使用了`sklearn.metrics.roc_auc_score`函数计算预测值和真实值之间的AUC得分,并打印出每个epoch结束后的得分。 ##### 4.2 使用自定义Callback 接下来,我们需要在模型训练时添加这个...

    ROC.zip_ROC二分类_site:www.pudn.com

    例如,`pROC`包是R中用于ROC分析的标准库,可以进行ROC曲线绘制、阈值选择、AUC计算等操作。以下是一个简单的R代码示例,展示了如何使用`pROC`包来绘制ROC曲线: ```R # 假设我们有预测概率y_pred和真实标签y_true ...

    环网日常经验总结

    11. **用户相似度计算**:改进余弦相似度计算方法,对热门物品给予较小权值,对冷门物品给予较大权值。 12. **推荐系统冷启动问题**:针对不同类型的冷启动问题,可以采取多种策略: - **用户冷启动**:推荐热门...

    机器学习面试总结

    7. 模型评估指标:AUC、IOU、ROC等指标用于评估模型性能,面试者应掌握它们的计算方法和应用场景。 8. 过拟合与防止方法:理解过拟合的原因,并了解数据增强、正则化、Dropout等技术是如何帮助减轻过拟合。 9. ...

    Pytorch中accuracy和loss的计算知识点总结

    本文将深入探讨这两个概念及其在PyTorch中的计算方法。 首先,`accuracy`是衡量模型预测正确率的指标。在给定的数据集中,它表示模型正确分类的样本数占总样本数的比例。在上面的代码示例中,`train_acc`变量被用来...

    ROC.rar_ROC performance_ROC曲线_性能曲线_边缘检测_边缘检测 性能

    总结起来,ROC曲线是一种强大的性能评估工具,特别适用于二分类问题,如边缘检测。在MATLAB中,通过计算和绘制ROC曲线,我们可以定量地理解模型在识别图像边缘方面的表现,进而优化算法,提高检测的准确性和鲁棒性。

    山东大学(威海)90分+《深度学习》课程期末考试考纲核心问题之上

    每个概念都详细解释了其定义、优缺点、作用和计算方法。 梯度下降法是深度学习中最基本的优化方法,用于更新模型参数以最小化损失函数。梯度下降法的基本思想是使用函数梯度来改善所要优化的函数值,更新方法为:w ...

    ROC.rar_ROC曲线_roc

    总结来说,ROC曲线是评估二分类模型性能的关键方法,Python提供了方便的库函数来计算和绘制ROC曲线。ROC曲线和AUC值可以帮助我们直观地理解模型在识别正类和负类方面的表现,从而优化模型参数或选择更好的模型。而...

    机器学习算法总结.docx

    本文档总结了多种常用的机器学习算法及其基本原理,适合有一定基础的学习者进行回顾和面试准备。 首先,文档介绍了统计分析的一些关键概念。统计分析是机器学习的基础,包括计算均值、标准差、方差和协方差等描述性...

Global site tag (gtag.js) - Google Analytics