当前位置:网站首页>如何选择分类模型的评价指标
如何选择分类模型的评价指标
2020-11-06 01:14:00 【人工智能遇见磐创】
作者|MUSKAN097 编译|VK 来源|Analytics Vidhya
简介
你已经成功地构建了分类模型。你现在该怎么办?你如何评估模型的性能,也就是模型在预测结果方面的表现。为了回答这些问题,让我们通过一个简单的案例研究了解在评估分类模型时使用的度量。
让我们通过案例研究深入了解概念
在这个全球化的时代,人们经常从一个地方旅行到另一个地方。由于乘客排队等候、办理登机手续、拜访食品供应商以及使用卫生间等设施,机场可能会带来风险。在机场追踪携带病毒的乘客有助于防止病毒的传播。
考虑一下,我们有一个机器学习模型,将乘客分为COVID阳性和阴性。在进行分类预测时,可能会出现四种类型的结果:
真正例(TP):当你预测一个观察值属于一个类,而它实际上属于那个类。在这种情况下,也就是预测为COVID阳性并且实际上也是阳性的乘客。
真反例(TN):当你预测一个观察不属于一个类,它实际上也不属于那个类。在这种情况下,也就是预测为非COVID阳性(阴性)并且实际上不是COVID阳性(阴性)的乘客。
假正例(FalsePositive,FP):当你预测一个观察值属于某个类,而实际上它并不属于该类时。在这种情况下,也就是预测为COVID阳性但实际上不是COVID阳性(阴性)的乘客。
假反例(FN):当你预测一个观察不属于一个类,而它实际上属于那个类。在这种情况下,也就是预测为非COVID阳性(阴性)并且实际上是COVID阳性的乘客。
混淆矩阵
为了更好地可视化模型的性能,这四个结果被绘制在混淆矩阵上。
准确度
对!你说得对,我们希望我们的模型能集中在真正的正例和反例。准确度是一个指标,它给出了我们的模型正确预测的分数。形式上,准确度有以下定义:
准确度=正确预测数/预测总数。
现在,让我们考虑平均每天有50000名乘客出行。其中有10个是COVID阳性。
提高准确率的一个简单方法是将每个乘客都归为COVID阴性。所以我们的混淆矩阵如下:
本案例的准确度为:
准确度=49990/50000=0.9998或99.98%
神奇!!这是正确的?那么,这真的解决了我们正确分类COVID阳性乘客的目的吗?
对于这个特殊的例子,我们试图将乘客标记为COVID阳性和阴性,希望能够识别出正确的乘客,我可以通过简单地将每个人标记为COVID阴性来获得99.98%的准确率。
显然,这是一种比我们在任何模型中见过的更精确的方法。但这并不能解决目的。这里的目的是识别COVID阳性的乘客。在这种情况下,准确度是一个可怕的衡量标准,因为它很容易获得非常好的准确度,但这不是我们感兴趣的。
所以在这种情况下,准确度并不是评估模型的好方法。让我们来看看一个非常流行的措施,叫做召回率。
召回率(敏感度或真正例率)
召回率给出你正确识别为阳性的分数。
现在,这是一项重要措施。在所有阳性的乘客中,你正确识别的分数是多少。回到我们以前的策略,把每个乘客都标为阴性,这样召回率为零。
Recall = 0/10 = 0
因此,在这种情况下,召回率是一个很好的衡量标准。它说,把每个乘客都认定为COVID阴性的可怕策略导致了零召回率。我们想最大限度地提高召回率。
作为对上述每个问题的另一个正面回答,请考虑COVID的每一个问题。每个人走进机场,模型都会给他们贴上阳性标签。给每位乘客贴上阳性标签是不好的,因为在他们登机前,实际调查每一位乘客所需的费用是巨大的。
混淆矩阵如下:
召回率将是:
Recall = 10/(10+0) = 1
这是个大问题。因此,结论是,准确度是个坏主意,因为给每个人贴上负面标签可以提高准确度,但希望召回率在这种情况下是一个很好的衡量标准,但后来意识到,给每个人贴上正面标签也会增加召回率。
所以独立的召回率并不是一个好的衡量标准。
还有一种测量方法叫做精确度
精确度
精确度给出了所有预测为阳性结果中正确识别为阳性的分数。
考虑到我们的第二个错误策略,即将每位乘客标记为阳性,其精确度将为:
Precision = 10 / (10 + 49990) = 0.0002
虽然这个错误的策略有一个好的召回值1,但它有一个可怕的精确度值0.0002。
这说明单纯的召回并不是一个好的衡量标准,我们需要考虑精确度。
考虑到另一种情况(这将是最后一种情况,我保证:P)将排名靠前的乘客标记为COVID阳性,即标记出患COVID的可能性最高的乘客。假设我们只有一个这样的乘客。这种情况下的混淆矩阵为:
精确度为:1/(1+0)=1
在这种情况下,精度值很好,但是让我们检查一下召回率:
Recall = 1 / (1 + 9) = 0.1
在这种情况下,精度值很好,但召回值较低。
场景 | 准确度 | 召回率 | 精确度 |
---|---|---|---|
将所有乘客分类为阴性 | 高 | 低 | 低 |
将所有乘客分类为阳性 | 低 | 高 | 低 |
排名靠前的乘客标记为COVID阳性 | 高 | 低 | 低 |
在某些情况下,我们非常确定我们想要最大限度地提高召回率或精确性,而代价是其他人。在这个标记乘客的案例中,我们真的希望能正确地预测COVID阳性的乘客,因为不预测乘客的正确性是非常昂贵的,因为允许COVID阳性的人通过会导致传播的增加。所以我们更感兴趣的是召回率。
不幸的是,你不能两者兼得:提高精确度会降低召回率,反之亦然。这称为准确度/召回率权衡。
准确度/召回率权衡
一些分类模型输出的概率介于0和1之间。在我们将乘客分为COVID阳性和阴性的案例中,我们希望避免遗漏阳性的实际案例。特别是,如果一个乘客确实是阳性的,但我们的模型无法识别它,这将是非常糟糕的,因为病毒很有可能通过允许这些乘客登机而传播。所以,即使有一点怀疑有COVID,我们也要贴上阳性的标签。
所以我们的策略是,如果输出概率大于0.3,我们将它们标记为COVID阳性。
这会导致较高的召回率和较低的精确度。
考虑与此相反的情况,当我们确定乘客为阳性时,我们希望将乘客分类为阳性。我们将概率阈值设置为0.9,即当概率大于或等于0.9时,将乘客分类为正,否则为负。
所以一般来说,对于大多数分类器来说,当你改变概率阈值时,会在召回率和精确度之间进行权衡。
如果需要比较具有不同精确召回值的不同型号,通常可以方便地将精度和召回合并为一个度量。对的!!我们需要一个同时考虑召回率和精确度的指标来计算性能。
F1分数
它被定义为模型精度和召回率的调和平均值。
你一定想知道为什么调和平均而不是简单平均?我们使用调和平均值是因为它对非常大的值不敏感,不像简单的平均值。
比方说,我们有一个精度为1的模型,召回率为0给出了一个简单的平均值为0.5,F1分数为0。如果其中一个参数很低,第二个参数在F1分数中就不再重要了。F1分数倾向于具有相似精确度和召回率的分类器。
因此,如果你想在精确度和召回率之间寻求平衡,F1分数是一个更好的衡量标准。
ROC/AUC曲线
ROC是另一种常用的评估工具。它给出了模型在0到1之间每一个可能的决策点的敏感性和特异性。对于具有概率输出的分类问题,阈值可以将概率输出转换为分类。所以通过改变阈值,可以改变混淆矩阵中的一些数字。但这里最重要的问题是,如何找到合适的阈值?
对于每个可能的阈值,ROC曲线绘制假正例率与真正例率。
假正例率:被错误分类为正例的反例实例的比例。
真正例率:正确预测为正例的正例实例的比例。
现在,考虑一个低阈值。因此,在所有按升序排列的概率中,低于0.1的被认为是负的,高于0.1的都被认为是正的。选择阈值是自由的
但是如果你把你的门槛设得很高,比如0.9。
以下是同一模型在不同阈值下的ROC曲线。
从上图可以看出,真正例率以更高的速率增加,但在某个阈值处,TPR开始逐渐减小。每增加一次TPR,我们就要付出代价—FPR的增加。在初始阶段,TPR的增加高于FPR
因此,我们可以选择TPR高而FPR低的阈值。
现在,让我们看看TPR和FPR的不同值告诉了我们关于这个模型的什么。
对于不同的模型,我们会有不同的ROC曲线。现在,如何比较不同的模型?从上面的曲线图可以看出,曲线在上面代表模型是好的。比较分类器的一种方法是测量ROC曲线下的面积。
AUC(模型1)>AUC(模型2)>AUC(模型2)
因此模型1是最好的。
总结
我们了解了用于评估分类模型的不同度量。何时使用哪些指标主要取决于问题的性质。所以现在回到你的模型,问问自己你想要解决的主要目的是什么,选择正确的指标,并评估你的模型。
欢迎关注磐创AI博客站: http://panchuang.net/
sklearn机器学习中文官方文档: http://sklearn123.com/
欢迎关注磐创博客资源汇总站: http://docs.panchuang.net/
版权声明
本文为[人工智能遇见磐创]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4253699/blog/4704944
边栏推荐
- 用TensorFlow预测纽约市AirBnB租赁价格
- 【數量技術宅|金融資料系列分享】套利策略的價差序列計算,恐怕沒有你想的那麼簡單
- Outlier detection based on RNN self encoder
- Jmeter——ForEach Controller&Loop Controller
- 9.2.4 settingselement method (XML configuration builder analysis) - SSM in depth analysis and project practice
- 刚刚,给学妹普及了登录的两大绝学
- Python 基于jwt实现认证机制流程解析
- Azure DevOps 扩展之 Hub 插件的菜单权限控制配置
- Flink on PaaSTA:Yelp运行在Kubernetes上的新流处理平台
- 普通算法面试已经Out啦!机器学习算法面试出炉 - kdnuggets
猜你喜欢
随机推荐
业务策略、业务规则、业务流程和业务主数据之间关系 - modernanalyst
C语言100题集合004-统计各个年龄阶段的人数
用git2consul从Git同步配置到Consul
利用 AWS SageMaker BlazingText 对不均衡文本进行多分类
C语言中字符字符串以及内存操作函数
企业数据库的选择通常由系统架构师主导决策 - thenewstack
通用的底层埋点都是怎么做的?
被老程式設計師壓榨怎麼辦?我不想辭職
Using tensorflow to forecast the rental price of airbnb in New York City
Azure DevOps 扩展之 Hub 插件的菜单权限控制配置
阻塞队列之LinkedBlockingQueue分析
Python + Appium 自動化操作微信入門看這一篇就夠了
ETCD核心機制解析
6.9.2 SessionFlashMapManager分析(FlashMapManager重定向管理) -《SSM深入解析与项目实战》
刚毕业不久,接私活赚了2万块!
Anomaly detection method based on SVM
vite + ts 快速搭建 vue3 專案 以及介紹相關特性
leetcode之赎金信
5.5 ControllerAdvice注解 -《SSM深入解析与项目实战》
python 下载模块加速实现记录