auc指标含义的理解
引子
A类样本90个
|
B 类样本10个
|
分类精度(分类正确占比) | |
分类器C1结果
|
A* 90 (100%)
|
A*10 (0%)
|
90%
|
分类器C2结果
|
A*70 + B*20 (78 %)
|
A*5 + B*5 (50%)
|
75%
|
啥是auc
预测 |
合计 |
|||
1 |
0 |
|||
实际
|
1 (P) |
True Positive(TP) |
False Negative(FN) |
Actual Positive(TP+FN) |
0 (N) |
False Positive(FP) |
True Negative(TN) |
Actual Negative(FP+TN) |
|
合计 |
Predicted Positive(TP+FP) |
Predicted Negative(FN+TN) |
TP+FP+FN+TN |
FPR
|
TPR
|
|
c1
|
10/10=1
|
90/90=1
|
c2
|
5/10=0.5
|
70/90=0.78
|
有啥特点
- roc上的点,越靠近左上角越好。(tp rate is higher, fp rate is lower,or both )
- y = x这条对角线代表随机猜测的结果。比如用投掷硬币结果来猜测,点在(0.5, 0.5) ;假设硬币不均匀,90%概率向上,那就是(0.9, 0.9) (正例中,90%能猜对;反例中,90%猜错)
- auc范围[0.5, 1],小于0.5的分类器把结果取反一下把。
- 分类器不一定要输出概率,输出可比较的score也行。
- 画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相同的样本一起算,不要一个样本就输出一个采样点。 - 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这里就行了。
- 容忍样本倾斜的能力。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)
具体代码实现
#!/usr/local/bin/pythondef scoreAUC(labels,probs):i_sorted = sorted(range(len(probs)),key=lambda i: probs[i], reverse=True)auc_temp = 0.0TP = 0.0TP_pre = 0.0FP = 0.0FP_pre = 0.0P = 0;N = 0;last_prob = probs[i_sorted[0]] + 1.0for i in range(len(probs)):if last_prob != probs[i_sorted[i]]: auc_temp += (TP+TP_pre) * (FP-FP_pre) / 2.0 TP_pre = TPFP_pre = FPlast_prob = probs[i_sorted[i]]if labels[i_sorted[i]] == 1:TP = TP + 1else:FP = FP + 1auc_temp += (TP+TP_pre) * (FP-FP_pre) / 2.0auc = auc_temp / (TP * FP)return aucdef read_file(f_name):f = open(f_name)labels = []probs = []for line in f:line = line.strip().split()try:label = int(line[2])prob = float(line[3])except ValueError:# skip over headercontinuelabels.append(label)probs.append(prob)return (labels, probs)def main():import sysif len(sys.argv) != 2:print("Usage: python scoreKDD.py file")sys.exit(2)labels, probs = read_file(sys.argv[1])auc = scoreAUC(labels, probs)print("%f" % auc)
if __name__=="__main__":main()
auc指标含义的理解相关推荐
- ROC和AUC指标的理解
ROC曲线的通俗理解 auc指标含义的理解
- 深刻理解AUC指标与ROC曲线的关系
一定要理解ROC曲线和AUC指标两者之间的关系: 图中的曲线和直线的含义搞清楚: ROC 曲线:图中无论是曲线还是直线,曲线或直线每一个点都代表一个阈值,遍历所有的阈值,就得到了ROC曲线.曲线距离左 ...
- 机器学习AUC指标的理解
机器学习AUC指标的理解 AUC在机器学习领域中是一种模型评估指标,是指模型ROC曲线下的面积.分类器效果月AUC值成正比.即当分类器的分类效果越好的时候,ROC曲线下面积越大,AUC越大. 其中,R ...
- ROC曲线与AUC指标理解
ROC曲线,也称受试者工作特征曲线,感受性曲线.用于研究X对于Y的预测准确率情况. ROC曲线涉及的几个术语名词: 指标: ROC曲线最初是运用在军事上,当前在医学领域使用非常广泛,因此指标称&quo ...
- 神经网络常见评价指标超详细介绍(ROC曲线、AUC指标、AUROC)
目录 一.基本概念 二.ROC曲线 三.AUROC(AUC指标) 四.实例介绍 4.1 公式实现 4.2 代码实现 一.基本概念 真阳性(TP):判断为真,实际也为真: 伪阳性(FP):判断为真,实际 ...
- 模型auc指标_auc致命缺陷模型指标
模型auc指标 by John Elder, Ph.D., Founder & Chairman, Elder Research 作者:John Elder,博士,Elder Research ...
- 深度剖析ROC曲线以及AUC指标
首先,我们要知道,ROC描绘的是一条曲线,而AUC则是ROC曲线下的面积,是一个数值. 接下来,在正式讲解之前,我们先来看一个例子: 假设测试样本集的数量为1k个,其中A类样本有950个,B类样本有5 ...
- 机器学习算法 03 —— 逻辑回归算法(精确率和召回率、ROC曲线和AUC指标、过采样和欠采样)
文章目录 系列文章 逻辑回归 1 逻辑回归介绍 1.1 逻辑回归原理 输入 激活函数 1.2 损失以及优化 2 逻辑回归API介绍 3 案例:肿瘤良性恶性预测 4 分类模型的评估 4.1 分类评估方法 ...
- ROC曲线与AUC指标
ROC曲线 ROC曲线的动机 对于0,1两类分类问题,一些分类器得到的结果往往不是0,1这样的标签,如神经网络,得到诸如0.5,0.8这样的分类结果.这时,我们人为取一个阈值,比如0.4,那么小于0. ...
最新文章
- Python 之 matplotlib (十四)图中图
- 计算机基础16秋在线作业,北大16秋《计算机基础与应用-第二组》在线作业.doc
- 微信小程序 倒计时实现
- CentOS6.6上进程挂起的诡异问题和处理
- Spring 创建对象的问题,不同构造方法创建对象,使用工厂类类获取对象、单例或多例、延迟创建问题
- python字符串截取:截取yaml文件名后3个字符
- 【Vegas原创】使用GreenAMP时,提示“无法载入mysql扩展”解决方法
- 如何开发Teams Bot
- 【CodeForces - 155C】Hometask (字符串,思维,贪心,熟悉句式)(总结)
- 曲线连接线_荷重位移曲线仪操作使用注意事项-荷重位移曲线仪厂家
- submit与button区别提交区别
- MATLAB-阶乘运算
- AMD yes! 平民炬丹师的卡皇Radeon VII,老年博士生的丹房修建记录:Rocm 3.1+ pytorch 1.4+tensorflow 2+tensorflow 1.15.2 折腾记
- Python xlrd、xlwt 用法说明
- 正则表达式删除空白行
- 置信区间的置信区间_什么是置信区间,为什么人们使用它们?
- 电路级静电防护设计技巧与ESD防护方法
- MySql InnoDB与MyISAM的区别
- 使用SQLAlchemy创建数据模型
- Jave-Date(DateUtil)