如何评估分类模型的好坏
如何评估分类模型的好坏
评估分类预测模型的质量,常用一个矩阵、三条曲线和六个指标。
- 一个矩阵:混淆矩阵;
- 三条曲线:ROC曲线、PR曲线、KS曲线;
- 六个指标:正确率Acc、查全率R、查准率P、F值、AUC、BEP值、KS值。
ROC曲线和AUC值
ROC曲线
ROC曲线(Receiver Operating Characteristic curve),即接收者操作特征曲线,是反映TPR和FPR的综合指标。
TPR = TP/(TP+FN),即正类中正确预测的百分比(查全率)。
FPR = FP/(FP+TN),即负类中错误预测的百分比(相当于误判率)。
ROC曲线是由点(TPR,FPR)组成的曲线,横坐标是FPR,而纵坐标是TPR。
显然,ROC曲线应该越靠近左上角越好,即表示查全率越高,而误判率越低。
一般来说,如果ROC是光滑的,那么基本可以判断没有太大的过拟合。
ROC曲线有助于比较不同分类器的相对性能。如下两个模型M1和M2,当FPR小于0.36时模型M1较好,而当FPR大于0.36时模型M2较好。
AUC值
与ROC曲线一同使用的,还有AUC指标。
AUC(Area Under Curve),其实就是ROC曲线下方的面积。
因为,ROC曲线一般都处于对角线的上方,即模型的效果应该比瞎猜(猜中的概率为50%)要好,所以AUC的取值范围一般是[0.5,1]。
AUC值越大,即ROC曲线越靠近左上角,其下方的面积越大,说明模型质量越高。
显然,由于ROC/AUC与混淆矩阵的TP、FP、TN、FN四个值都有关,所以,AUC是一个综合的评价指标。AUC值越大,也相当于TP和TN越大越好,FP和FN越小越好。
所以在大多数数据挖掘比赛中,要比较两个模型哪个会更优,AUC指标要比Accuracy指标常用得多,也比其它查全率R和查准率P要常用得多。
PR曲线和BEP值
PR曲线
PR曲线,反应的是查准率P和查全率R之间的关系。以P为横坐标,R作为纵坐标,就是PR网线。
P = TP/(TP+FP),即模型预测的正类中被正确预测的百分比。
R = FP/(FP+FN),即正类中被正确预测的百分比。
对于同一个分类模型,通过调整分类的阈值(从大到小变化),就可以得到不同的P-R值,即可画出PR曲线。
显然,我们要求P和R都应该是越高越好。如果一个模型的PR曲线被另一个模型的PR曲线所“包住”,则后者的性能要优于前者。如下图所示,模型A比模型C的性能要好,模型B比模型C的性能也要好。
一般情况下,查准率和查全率这两个指标不可能兼顾。要想查全率R高,则模型需要输出更多的样本(极端地,返回全部样本,则查全率为100%);要想查准率P高,则要求在模型认为的正类中,尽量地选择少的概率高的样本。
BEP值
PR曲线中,一般要求P和R都越高越好,因此引入了一个指标BEP来表示模型的质量。
BEP(Break Even Point),亦称盈亏平衡点、保本点。即当查准率=查全率时的值。
在上图中,模型A和模型B,由于存在交叉,不太容易判断哪个模型会更好。如果使用BEP来判断,可知模型A的性能要优于模型B的性能。
显然,由于PR /BEP与混淆矩阵的TP、FP、FN三个值都有关(与TN无关),所以,BEP并不是一个综合的评价指标。
但是,即使是正样本非常少的情况下,PR表现的效果也比较好。也就是说,在正负样本不平衡的情况下,PR曲线比ROC曲线能更有效地反应分类器的好坏。
KS曲线和KS值
KS曲线
KS曲线(Kolmogorov-Smirnov),又叫洛伦兹曲线。以TPR和FPR分别分为纵轴,以阈值作为横轴,画出两条曲线。KS曲线反映的是在同一阈值下TPR和FPR的差值。
显然,我们希望的是TPR越高越好,而FPR越低越好,即要求两条折线离得越开越好,这说明模型对于正负样本区分度更好。
可以知道,KS曲线和ROC曲线一样,描述的都是TPR和FPR的关系,只是横坐标的取法不一样。
KS值
考虑到量化,所以将TPR和FPR折线的最远距离作为KS值,即KS=max(TPR-FPR),作为模型的分区度。
K-S值越大,表示评分模型能够将“好客户”、“坏客户”区分开来的程度越大。
一般认为:
1) 当KS<0.2时,模型无鉴别能力
2) 在0.2~0.4之间,模型勉强接受,需要考虑优化
3) 在0.4~0.5之间,模型有区别能力
4) 在0.5~0.6之间,模型有较好的区别能力
5) 在0.6~0.7之间,模型有非常好的区别能力
6) 当KS>0.75时,要检验模型是否过拟合
由于KS值主要是体现模型中差异的最大的一个分段,因此适合于找阈值。像信用评分卡中,就比较适合使用KS值来评估,寻找出最大的区分度阈值。
曲线对比
一般来说,ROC曲线会更稳定,在正负样本足够(样本均衡)的情况下,ROC曲线会比较稳定,能够反映模型的整体质量。当样本不平衡时,特别是正样本极少时,ROC曲线并不准确。
在样本不均衡时,特别是正样本数远小于负样本数时,采用PR曲线会更合适。
而KS曲线,只是反映出哪个分段的区分度是最大的,而不能反映出总体的效果。所以,KS曲线往往只用在寻找区分的最佳阈值(比如信用评分卡中的审批阈值)。
一般情况下,最好能够综合考虑上述的三种曲线以及三个指标,这样对模型有一个全面的质量评估。
相关文章:

如何评估分类模型的好坏
如何评估分类模型的好坏 评估分类预测模型的质量,常用一个矩阵、三条曲线和六个指标。 一个矩阵:混淆矩阵;三条曲线:ROC曲线、PR曲线、KS曲线;六个指标:正确率Acc、查全率R、查准率P、F值、AUC、BEP值、KS…...
● 84.柱状图中最大的矩形
84.柱状图中最大的矩形 class Solution { public:int largestRectangleArea(vector<int>& heights) {stack<int>st;heights.insert(heights.begin(),0);heights.push_back(0);st.push(0);int res0;for(int i1;i<heights.size();i){while(heights[i]<heig…...
未检查的转换: ‘java.lang.Object‘ 转换为 ‘java.util.List
fastjson方式 Object object ... // 获取待转换的objectList<WbsCategory> list JSON.parseObject(JSON.toJSONString(object), new TypeReference<List<WbsCategory>>() {}); 在这个示例中,我们使用JSON.toJSONString()将object对象转换…...

【C语言】使用C语言,实现九九乘法表(另附Python、Java、JavaScript实现方式)
文章目录 1. C语言实现1.1 思路1.2 代码实现 3.其他语言实现3.1 Python实现3.2 Java实现3.3 JavaScript实现 1. C语言实现 1.1 思路 九九乘法表图示: 思路如下:定义两层for循环即可实现九九乘法表 一共有9层,所以要定义一个变量iÿ…...

[机缘参悟-102] :IT人 - 管理的本质?管理人与从事技术的本质区别?人性、冰山模型、需求层次模型
感悟: 管理的本质是:学习各种管理理论、方法、技能,克服自身的人性缺点、预防他人人性的恶点、利用他人的人性特点拿到结果,从而完成组织、管理者的上司、管理者自身、管理者下属的目标。管理中的问题,80%以上都人性问…...

[论文阅读笔记26]Tracking Everything Everywhere All at Once
论文地址: 论文 代码地址: 代码 这是一篇效果极好的像素级跟踪的文章, 发表在ICCV2023, 可以非常好的应对遮挡等情形, 其根本的方法在于将2D点投影到一个伪3D(quasi-3D)空间, 然后再映射回去, 就可以在其他帧中得到稳定跟踪. 这篇文章的方法不是很好理解, 代码也刚开源, 做一…...

【Java 动态数据统计图】前后端对接数据格式(Map返回数组格式数据)六(120)
说明: 前端使用:vue3.0 前后端对接数据格式:无非就是前端把后端返回的数据处理为自己想要的格式,或者,后端给前端处理好想要的格式; 针对前后端的柱状图,趋势图等数据对接,前端一般需…...

❤ 给自己的mac系统上安装java环境
❤ 给自己的mac系统上安装java环境 🍓 作为前端工程师如何给自己的mac系统上安装java环境 🍎 最近因为自己的一些项目需求,mac电脑上需要安装一些后台的java环境,用来跑后台的java程序,于是从一个前端工程师的角度安…...
Java-匿名类
介绍 匿名类是指没有名字的类,它对一个给定的类进行拓展,或者实现一个给定的接口。使用匿名类可以使得代码更加简洁、紧凑、模块程度更高。 实现方式及语法 匿名类有两种实现方式 继承一个类,重写其方法实现一个接口(可以是多…...

Maven的超级POM
对于我们创建的一个maven工程,即便我们自己的pom.xm文件中没有明确指定一个父工程(父POM),其实也默认继承了超级POM,就好比JAVA类继承Object类一样。 maven官网关于超级POM的介绍: https://maven.apache.o…...
软考高级系统架构设计师系列论文九十二:论新技术的引进
软考高级系统架构设计师系列论文九十二:论新技术的引进 一、摘要二、正文三、总结一、摘要 根据国家税务总局对税务系统内所有系统进行集成与整合的需求,我所在的开发单位组织了全国金税工程防伪税控系统网络版的升级开发工作。该项目工程浩大,要求在具有严格的安全、可靠性…...
vue使用Bootstrap的详细方法
要在Vue中使用Bootstrap,您可以按照以下步骤进行操作: 安装Bootstrap:首先,您需要安装Bootstrap。您可以使用npm或者yarn来安装Bootstrap。打开终端,并在项目的根目录中运行以下命令: npm install bootst…...
leetcode做题笔记103. 二叉树的锯齿形层序遍历
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 思路一:BFS #define N 2000int** zigzagLevelOrder(st…...

如果将PC电脑变成web服务器:利用Nignx反向代理绕过运营商对80端口封锁
如果将PC电脑变成web服务器:利用Nignx反向代理绕过运营商对80端口封锁 在上一篇文章中,我们已经实现了内网主机的多次端口映射,将内网主机的端口映射到了公网,可以通过公网访问该主机了。 因为电信的家庭宽带,默认是…...

Eureka:服务注册-信息配置-自我保护机制
首先在提供者服务下,添加一个依赖 <!-- Eureka --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.6.RELEASE</version><…...

C++二叉树进阶
本期内容我们讲解二叉树的进阶知识,没有看过之前内容的小伙伴建议先看往期内容 二叉树-----补充_KLZUQ的博客-CSDN博客 目录 二叉搜索树 代码实现 基础框架 Insert Find Erase 析构函数 拷贝构造 赋值 二叉搜索树的应用 全部代码 二叉搜索树 二叉搜索树…...
layui tree组件取消勾选
layui(2.8.15) tree的api中,只有 tree.setChecked(id, idArr) 方法,没有取消勾选的方法。 我的需求是:勾选后做判断,如果不符合条件则取消勾选。 实现方法: 使用 tree的oncheck事件,在回调函数中做判断&…...
【Android基础面试题】ViewPager与ViewPager2的区别
ViewPager和ViewPager2是Android中用于实现滑动页面切换的控件。它们的主要区别如下: 实现方式 ViewPager2的内部实现是RecyclerView,而ViewPager是通过继承自ViewGroup实现的。因此,ViewPager2的性能更高。 滑动方向 ViewPager2可以实现横向…...
springCloudGateway网关配置
1.配置跨域支持 /*** 跨域支持*/ Configuration public class CorsConfig {Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config new CorsConfiguration();config.addAllowedMethod("*");config.addAllowedOrigin("*");config.addAllowedH…...

kali 2023.3新增工具
在终端模拟器中运行 sudo apt update && sudo apt full-upgrade 命令来更新其安装 Kali Linux 2023.3 发布中包含了九个新工具,分别是: Calico:云原生网络和网络安全。 cri-tools:用于Kubelet容器运行时接口的命令行界面…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...