auc指标含义的理解

机器学习实践中分类器常用的评价指标就是auc,不想搞懂,简单用的话,记住一句话就行
auc取值范围[0.5,1],越大表示越好,小于0.5的把结果取反就行。

想搞懂的,看An introduction to ROC analysis (Tom Fawcett)这篇论文把。我把这篇论文的要点整理了一下。

引子

假设有下面两个分类器,哪个好?

A类样本90个
B 类样本10个
分类精度(分类正确占比)
分类器C1结果
A* 90  (100%)
A*10 (0%)
90%
分类器C2结果
A*70 + B*20  (78 %)
A*5 + B*5    (50%)
75%
测试样本中有A类样本90个, B 类样本10个。
分类器C1 把所有的测试样本都分成了A类(比如分类器的输出只是一句代码 printf ("A") ),
分类器C2把A类的90个样本分对了70个,B类的10个样本分对了5个。
则C1的分类精度为 90%,C2的分类精度为75%,但直觉上,我们感觉C2更有用些。
我们需要一个评价指标,能客观反映对正样本、负样本综合预测的能力,还要考虑消除样本倾斜的影响(其实就是归一化之类的思想,实际中很重要,比如pv总是远远大于click),这就是auc指标能解决的问题。

啥是auc

roc曲线下的面积就是auc,所以要先搞清楚roc。

先看二分类问题,预测值跟实际值有4种组合情况,见下面的列联表

预测

  合计

1

0

实际

  

1 (P)

True PositiveTP

False NegativeFN

Actual Positive(TP+FN)

0 (N)

False PositiveFP)

True Negative(TN)

Actual Negative(FP+TN)

合计  

Predicted Positive(TP+FP)

Predicted Negative(FN+TN)

TP+FP+FN+TN

我们让:
纵坐标是true positive rate(TPR)  = TP / (TP+FN=P) (分母是横行的合计)直观解释:实际是1中,猜对多少
横坐标是false positive rate(FPR) = FP / (FP+ TN=N )  直观解释:实际是0中,错猜多少


FPR
TPR
c1
10/10=1
90/90=1
c2
5/10=0.5
70/90=0.78


所以评估标准改成离左上角近的是好的分类器。(考虑了正负样本的综合分类能力)
如果一个分类器能输出score,调整分类器的阈值,把对应的点画在图上,连成线这条线就是roc,曲线下的面积就是auc(Area under the Curve of ROC 

有啥特点

  1. roc上的点,越靠近左上角越好。(tp rate is higher, fp rate  is lower,or both )
  2. y = x这条对角线代表随机猜测的结果。比如用投掷硬币结果来猜测,点在(0.5, 0.5) ;假设硬币不均匀,90%概率向上,那就是(0.9, 0.9) (正例中,90%能猜对;反例中,90%猜错)
  3. auc范围[0.5, 1],小于0.5的分类器把结果取反一下把。
  4. 分类器不一定要输出概率,输出可比较的score也行。
  5. 画roc曲线的时候,threshold采样点是有限的离散化点,其实就用score,毕竟score是有限的。Any ROC  curve generated from a finite set of instances is actually a step function。画曲线需要两个值TP/P和FP/N。P和N可以先扫描一遍找出来,后面不会变的。把score排一下序,从高到底,依次作为threshold(>=threshold的我们预测为p,其他为n)。TP判断class为P的加一就行,FP判断class为N的也加一就行。变得很简单了。

    这里就有一个细节问题了,score相同的点怎么处理?

    论文里给出一个直观的图,先累加正样本和先累加负样本的差异(先加TP往上走,还是FP往右走)。结论就是score相同的样本一起算,不要一个样本就输出一个采样点。
  6. auc的直观含义是任意取一个正样本和负样本,正样本得分大于负样本的概率。The  ROC curve shows the ability of the classifier to rank the positive instances relative to the negative instances, and it is indeed perfect in this ability.(想想这个组合问题的概率怎么求?对每一个负样本,把分数大于这个负样本的正样本个数累加起来,最后除以总的组合数P*N,前面算roc curve是不是也类似这样累加?除了P或者N先除了。还不确定看下面的代码实现,代码里为了平滑,求的是小梯形的面积,而不是矩形,稍微有些差别。)论文里举了个例子,auc算出来是1,但是可以发现预测结果不是完全对的(7和8就预测错了)。但实际上只是threshold选择得不好而已,threshold选0.7这里就行了。
  7. 容忍样本倾斜的能力。ROC curves have an attractive property: they are insensitive to changes in class distribution. 看看公式TP/P 和FP/N本身就包含了归一化的思想(上面的表格每一行乘以常数C,TPR和FPR不变的),比如负样本*10的话 : FPR = (FP*10)/(N*10),不变的。
    再看看precision和recall就不行了,因为一个表格里是竖行,一个是横行。
    precision=tp/(tp+fp),  recall=tp/(tp+fn)
    负样本*10的话 :
    precision=tp/(tp+fp*10),  recall=tp/(tp+fn)

具体代码实现

求一个个小的梯形的面积。

搞到一个scoreKDD.py的代码
[python]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #!/usr/local/bin/python  
  2.   
  3. def scoreAUC(labels,probs):  
  4.     i_sorted = sorted(range(len(probs)),key=lambda i: probs[i], reverse=True)  
  5.     auc_temp = 0.0  
  6.     TP = 0.0  
  7.     TP_pre = 0.0  
  8.     FP = 0.0  
  9.     FP_pre = 0.0  
  10.     P = 0;  
  11.     N = 0;  
  12.     last_prob = probs[i_sorted[0]] + 1.0  
  13.       
  14.     for i in range(len(probs)):  
  15.         if last_prob != probs[i_sorted[i]]:   
  16.             auc_temp += (TP+TP_pre) * (FP-FP_pre) / 2.0          
  17.             TP_pre = TP  
  18.             FP_pre = FP  
  19.             last_prob = probs[i_sorted[i]]  
  20.         if labels[i_sorted[i]] == 1:  
  21.             TP = TP + 1  
  22.         else:  
  23.             FP = FP + 1  
  24.     auc_temp += (TP+TP_pre) * (FP-FP_pre) / 2.0  
  25.     auc = auc_temp / (TP * FP)  
  26.     return auc  
  27.       
  28. def read_file(f_name):  
  29.       
  30.     f = open(f_name)  
  31.     labels = []  
  32.     probs = []  
  33.     for line in f:  
  34.         line = line.strip().split()  
  35.         try:  
  36.             label = int(line[2])  
  37.             prob = float(line[3])  
  38.         except ValueError:  
  39.             # skip over header  
  40.             continue  
  41.         labels.append(label)  
  42.         probs.append(prob)  
  43.     return (labels, probs)  
  44.   
  45.   
  46. def main():  
  47.     import sys  
  48.     if len(sys.argv) != 2:  
  49.         print("Usage: python scoreKDD.py file")  
  50.         sys.exit(2)  
  51.     labels, probs = read_file(sys.argv[1])  
  52.   
  53.     auc = scoreAUC(labels, probs)  
  54.     print("%f" % auc)  
  55. if __name__=="__main__":  
  56.     main()  


转载自:http://blog.csdn.net/dinosoft/article/details/43114935









03-12
<think>好的,我现在要详细解答用户关于AUC-ROC曲线的问题。首先,我需要回顾一下自己对这些概念的理解,并确保信息的准确性。用户提到了几个引用资料,我需要结合这些内容来组织回答,同时遵循系统级指令中的格式要求。 首先,AUC-ROC是机器学习中用于评估二分类模型性能的重要指标。ROC曲线全称是受试者工作特征曲线,而AUC则是ROC曲线下的面积,用来量化模型的整体性能。用户可能想知道这两者的具体定义、如何解读,以及它们在模型评估中的实际应用。 接下来,我需要分步骤解释这些概念。首先定义ROC曲线,说明其横轴(FPR)和纵轴(TPR)的含义,以及它们如何随着分类阈值的变化而变化。然后,解释AUC值的意义,比如AUC为1表示完美分类,0.5相当于随机猜测,这时需要强调AUC如何反映模型的区分能力。 然后,结合用户提供的引用资料,特别是引用[2]和[3],其中提到ROC曲线接近左上角表示模型准确率高,AUC值高则性能更好。这部分需要自然地融入回答中,并正确添加引用标识。例如,在解释ROC曲线的位置时,引用[2]的内容。 此外,用户可能对如何绘制ROC曲线以及计算AUC的方法感兴趣。我需要简要说明绘制步骤,比如需要不同阈值下的TPR和FPR,然后连接这些点形成曲线。AUC的计算方法可以通过梯形法则或积分,这部分可能需要提及,但不需要太深入数学细节,以保持回答的实用性。 还要注意用户的应用场景,可能想知道AUC-ROC在模型选择、调参或比较中的作用。例如,引用[3]提到AUC不受类别不平衡的影响,这一点很重要,需要在回答中突出,说明为什么在处理不平衡数据时AUC比准确率更有优势。 同时,需要确保回答中的数学公式使用正确的LaTeX格式,如FPR公式写成$FPR = \frac{FP}{FP + TN}$,TPR写成$TPR = \frac{TP}{TP + FN}$,并用$$包围独立公式。此外,所有行内公式如$AUC$需要用$符号包裹。 可能还需要比较AUC与其他指标(如准确率、F1-score)的不同,指出AUC的综合性和对类别不平衡的鲁棒性,这部分可以引用资料中的内容来支持观点。 最后,生成的相关问题需要围绕AUC-ROC的延伸话题,比如如何解读不同AUC值、与其他指标的比较、应用场景、计算方法及类别不平衡的影响。这些问题应帮助用户进一步探索该主题。 在整理回答时,要确保结构清晰,分点解释,每个部分自然过渡,并在适当的位置添加引用标记。同时,检查LaTeX语法是否正确,避免格式错误。例如,独立公式是否使用$$,行内公式是否正确使用$符号。 现在,综合以上思考,组织成一个逻辑连贯的回答,满足用户的需求,并符合给定的格式要求。</think>### AUC-ROC曲线详解及在分类模型评估中的作用 #### 1. **基本概念** - **ROC曲线**(Receiver Operating Characteristic Curve)是用于评估二分类模型性能的工具,横轴为**假正率**(False Positive Rate, FPR),纵轴为**真正率**(True Positive Rate, TPR),其计算公式为: $$ FPR = \frac{FP}{FP + TN}, \quad TPR = \frac{TP}{TP + FN} $$ 其中,$TP$(真正例)、$FP$(假正例)、$TN$(真负例)、$FN$(假负例)构成混淆矩阵[^1][^3]。 - **AUC**(Area Under the Curve)是ROC曲线下的面积,取值范围为$[0,1]$,用于量化模型区分正负类的能力。AUC值越接近1,模型性能越好;若AUC=0.5,则等同于随机猜测[^2]。 #### 2. **ROC曲线的绘制与解读** - **绘制方法**:通过调整分类阈值(如逻辑回归中的概率截断值),计算不同阈值下的TPR和FPR,将各点连接成曲线。 - **关键形态**: - **靠近左上角**:模型准确率高(高TPR、低FPR)[^2]。 - **接近对角线**:模型性能与随机猜测相当(AUC=0.5)。 - **低于对角线**:可能因模型预测反向导致,需重新检查数据或模型。 #### 3. **AUC值的意义** - **AUC=1**:完美分类器,所有正负样本均被正确区分。 - **AUC>0.9**:模型具有优秀的区分能力。 - **AUC<0.7**:模型性能较差,需优化特征或算法。 #### 4. **在模型评估中的应用** - **模型比较**:AUC提供单一数值指标,便于横向对比不同模型的性能。 - **类别不平衡鲁棒性**:AUC不受正负样本比例影响,适用于评估信用卡欺诈检测、疾病诊断等不平衡场景[^3]。 - **调参指导**:通过观察不同参数下AUC的变化,选择最佳超参数组合。 #### 5. **与其他指标的关系** - **对比准确率**:AUC更关注模型对正负类的整体区分能力,而非单纯分类正确率。 - **对比F1-score**:F1-score依赖于特定阈值,而AUC综合所有阈值下的表现,更全面[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值