前言
emmm...第一次写技术贴,工作时候再次学auc,roc....
我引用了这几个帖子,加上其他的是自己深入思考总结的。
- 讲解参考:https://zhuanlan.zhihu.com/p/87768945?utm_source=wechat_session&utm_medium=social&utm_oi=786600774271664128
- 实战参考:https://www.zhihu.com/question/39840928/answer/146205830?utm_source=wechat_session&utm_medium=social&utm_oi=786600774271664128
抛几个问题,以及超简单回答:
- AUC, ROC 干啥的?
- 答:用来做模型评估的。
- 问:我擦,就是看模型准不准呗,那为啥不用准确率啥的,auc啥的看着就麻烦?
- 答:准确率有的场景下没意义,比如拿来100个人,预测一个人是否得疯牛病了,实际上这群人就1个疯牛病,我给个报告就说这些人全正常,那准确率就是99%,你说有意义没?
- 问:对哦,我去…这样确实看不出啥,其实得知道这个疯牛病预测的咋样
- 答:是啊,所以要搞auc啊,我也很烦,auc其实这玩意相对于准确率的优化点就是把好人和坏人的“准确率”分开算,互不影响。
- 问:额,好吧,懂了,那咋算?
- 答:就是先搞懂 ROC,不过还得先搞懂混淆矩阵,算了。。你往下看吧。。。
- 学这个要提前知道啥?
- 混淆矩阵
- 问:啥东西?搞的我脑子都混淆了。
- 答:就是实际真的,实际假的,预测对的,预测错的,弄成了一个矩阵。着急啥,你接着往下看。
- 问 :啥啊,听不懂你说啥,看啥呢?
- 答:擦,用这个算FPR,TPR呢哇。
- 问:啥FPT啥啊?
- 答:滚。。。
- FPR,TPR???
- 答:就是混淆矩阵再加工一下,算了2个比例。
- 问:啥比例?
- 答:就FPR,TPR啊!!
- 问:那为啥不用其他比例。
- 答:大哥,其他也行,比如 FNR 不就是 1-FPR 吗,都是一个理儿。。。
- 问:好吧,那你记着讲。。。诶?那这和ROC有啥关系?
- 答:你再往下看,这俩东西就是画ROC的!
- 混淆矩阵
- ROC怎么画啊?
- 官方话:设定某一阈值之后,计算出该阈值对应的TPR & FPR,便可以绘制出ROC上对应的一个点,当设定若干个阈值之后,便可以连成ROC曲线,因此当所采样的阈值越多,ROC Curve越平滑。
- 问:越是官方好像越是废话,你不觉得吗?
- 答:我也觉得,那实操一下吧。。。一会儿看正文。
- 问:好吧。。切。。。看看你能到底能不能讲明白.
- 画ROC干啥呢?
- 答:为了计算AUC啊,auc因为单词就是 area under curve,就是个面积
- 问:那为啥这个面积能评估呢?
- 答:emmm....这个…往下慢慢读哇,前言说不明白。。。
- 有啥优缺点?
- 讲完再说!
混淆矩阵
进来看的人,混淆矩阵我猜你懂了,我就用最简单的描述
- Positive 预测为1,Negative 预测为0
- True 预测正确,False 预测错误
![1cb7c25ea0293819d758430ae440b5a7.png](https://i-blog.csdnimg.cn/blog_migrate/55b67e09061069c7accb17ff8a4e9e3e.png)
记住:混淆矩阵是为了FPR,TPR铺垫。
ROC
- ROC 曲线
- 纵轴 TPR:真阳率(命中率)真实为 1 的被预测为 1 的
- TPR = TP / (TP + FN) = TP / P 所有真实类别为 1 的样本中,预测为 1 的比例,越大表示 预测的 1 中 实际 1 越多
- 横轴 FPR:假阳率(误诊率)真实为 0 的被预测为 1 的:
- FPR = FP / (FP + TN) = FN / N 所有真实类别为 0 的样本中,预测为 1 的比例,越大表示 预测的 1 中 实际 0 越多
- 理想:TPR = 1, FPR = 0
- 记住:FPR,TPR是为了画ROC做铺垫。
- 纵轴 TPR:真阳率(命中率)真实为 1 的被预测为 1 的
- ROC 绘制
-
- 前面说过了:在设定某一阈值之后,计算出该阈值对应的TPR & FPR,便可以绘制出ROC上对应的一个点,当设定若干个阈值之后,便可以连成ROC曲线,因此当所采样的阈值越多,ROC Curve越平滑。
- 这段废话前面说过了,还是看看实例吧,看完就懂了
-
import
- 这个图非常清晰了,数据有预测的概率,真实的 label
- 从高到低排个序,然后遍历,阈值从高到低划分
- 对应不就能算tpr fpr了么
- 算出来之后,这些TPR,FPR的点不就可以画ROC了吗。
![b3b8cbeda04e0f9732c17ef0fee47470.png](https://i-blog.csdnimg.cn/blog_migrate/f3c7039b4f70c14dddbca55ebd937468.jpeg)
这个图就是用FPR,TPR描出来的
![89f0e43588e6538e74bea8d5f38148e5.png](https://i-blog.csdnimg.cn/blog_migrate/20781c286775aabb51a2681460ac09cc.png)
- ROC解读
- 面积(AUC)
- 从所有正例中随机选取一个样本A,再从所有负例中随机选取一个样本B,分类器将A判为正例的概率比将B判为正例的概率大的可能性。
- 可以看到位于随机线上方的点被认为好于随机猜测,在这样的点上TPR总大于FPR,意为正例被判为正例的概率 > 负例被判为正例的概率。
- 为啥比准确率更有意义?
- ROC 的TPR,FPR:能顾兼顾正例和负例的权衡:测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。
- TPR聚焦于正例(分母为全部正例),FPR聚焦于与负例(分母为全部负例),因此正负例数量改变时,不会影响另一列。
- 看下面这个图: (a)和(c)为Roc曲线,(b)和(d)为Precision-Recall曲线,ab样本均衡,cd不均衡。样本不均衡时,ROC曲线基本保持原貌,而P-R曲线变化较大。
- 面积(AUC)
![25de9f78fa935f3f6be200c7abf599e5.png](https://i-blog.csdnimg.cn/blog_migrate/38bed5df5377e8fe121961fdb43cd131.png)
先不写了哈哈,有点事,回头再更。