当前位置: 首页 > news >正文

如何评估分类模型的好坏

如何评估分类模型的好坏

评估分类预测模型的质量,常用一个矩阵、三条曲线和六个指标。

  • 一个矩阵:混淆矩阵;
  • 三条曲线: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曲线往往只用在寻找区分的最佳阈值(比如信用评分卡中的审批阈值)。

 

一般情况下,最好能够综合考虑上述的三种曲线以及三个指标,这样对模型有一个全面的质量评估。

相关文章:

如何评估分类模型的好坏

如何评估分类模型的好坏 评估分类预测模型的质量&#xff0c;常用一个矩阵、三条曲线和六个指标。 一个矩阵&#xff1a;混淆矩阵&#xff1b;三条曲线&#xff1a;ROC曲线、PR曲线、KS曲线&#xff1b;六个指标&#xff1a;正确率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>>() {}); 在这个示例中&#xff0c;我们使用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 思路 九九乘法表图示&#xff1a; 思路如下&#xff1a;定义两层for循环即可实现九九乘法表 一共有9层&#xff0c;所以要定义一个变量i&#xff…...

[机缘参悟-102] :IT人 - 管理的本质?管理人与从事技术的本质区别?人性、冰山模型、需求层次模型

感悟&#xff1a; 管理的本质是&#xff1a;学习各种管理理论、方法、技能&#xff0c;克服自身的人性缺点、预防他人人性的恶点、利用他人的人性特点拿到结果&#xff0c;从而完成组织、管理者的上司、管理者自身、管理者下属的目标。管理中的问题&#xff0c;80%以上都人性问…...

[论文阅读笔记26]Tracking Everything Everywhere All at Once

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

【Java 动态数据统计图】前后端对接数据格式(Map返回数组格式数据)六(120)

说明&#xff1a; 前端使用&#xff1a;vue3.0 前后端对接数据格式&#xff1a;无非就是前端把后端返回的数据处理为自己想要的格式&#xff0c;或者&#xff0c;后端给前端处理好想要的格式&#xff1b; 针对前后端的柱状图&#xff0c;趋势图等数据对接&#xff0c;前端一般需…...

❤ 给自己的mac系统上安装java环境

❤ 给自己的mac系统上安装java环境 &#x1f353; 作为前端工程师如何给自己的mac系统上安装java环境 &#x1f34e; 最近因为自己的一些项目需求&#xff0c;mac电脑上需要安装一些后台的java环境&#xff0c;用来跑后台的java程序&#xff0c;于是从一个前端工程师的角度安…...

Java-匿名类

介绍 匿名类是指没有名字的类&#xff0c;它对一个给定的类进行拓展&#xff0c;或者实现一个给定的接口。使用匿名类可以使得代码更加简洁、紧凑、模块程度更高。 实现方式及语法 匿名类有两种实现方式 继承一个类&#xff0c;重写其方法实现一个接口&#xff08;可以是多…...

Maven的超级POM

对于我们创建的一个maven工程&#xff0c;即便我们自己的pom.xm文件中没有明确指定一个父工程&#xff08;父POM&#xff09;&#xff0c;其实也默认继承了超级POM&#xff0c;就好比JAVA类继承Object类一样。 maven官网关于超级POM的介绍&#xff1a; https://maven.apache.o…...

软考高级系统架构设计师系列论文九十二:论新技术的引进

软考高级系统架构设计师系列论文九十二:论新技术的引进 一、摘要二、正文三、总结一、摘要 根据国家税务总局对税务系统内所有系统进行集成与整合的需求,我所在的开发单位组织了全国金税工程防伪税控系统网络版的升级开发工作。该项目工程浩大,要求在具有严格的安全、可靠性…...

vue使用Bootstrap的详细方法

要在Vue中使用Bootstrap&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装Bootstrap&#xff1a;首先&#xff0c;您需要安装Bootstrap。您可以使用npm或者yarn来安装Bootstrap。打开终端&#xff0c;并在项目的根目录中运行以下命令&#xff1a; npm install bootst…...

leetcode做题笔记103. 二叉树的锯齿形层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 思路一&#xff1a;BFS #define N 2000int** zigzagLevelOrder(st…...

如果将PC电脑变成web服务器:利用Nignx反向代理绕过运营商对80端口封锁

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

Eureka:服务注册-信息配置-自我保护机制

首先在提供者服务下&#xff0c;添加一个依赖 <!-- Eureka --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.6.RELEASE</version><…...

C++二叉树进阶

本期内容我们讲解二叉树的进阶知识&#xff0c;没有看过之前内容的小伙伴建议先看往期内容 二叉树-----补充_KLZUQ的博客-CSDN博客 目录 二叉搜索树 代码实现 基础框架 Insert Find Erase 析构函数 拷贝构造 赋值 二叉搜索树的应用 全部代码 二叉搜索树 二叉搜索树…...

layui tree组件取消勾选

layui(2.8.15) tree的api中&#xff0c;只有 tree.setChecked(id, idArr) 方法&#xff0c;没有取消勾选的方法。 我的需求是&#xff1a;勾选后做判断&#xff0c;如果不符合条件则取消勾选。 实现方法&#xff1a; 使用 tree的oncheck事件&#xff0c;在回调函数中做判断&…...

【Android基础面试题】ViewPager与ViewPager2的区别

ViewPager和ViewPager2是Android中用于实现滑动页面切换的控件。它们的主要区别如下&#xff1a; 实现方式 ViewPager2的内部实现是RecyclerView&#xff0c;而ViewPager是通过继承自ViewGroup实现的。因此&#xff0c;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 发布中包含了九个新工具&#xff0c;分别是&#xff1a; Calico&#xff1a;云原生网络和网络安全。 cri-tools&#xff1a;用于Kubelet容器运行时接口的命令行界面…...

openOii:开源工业信息集成框架架构解析与实战指南

1. 项目概述与核心价值最近在开源社区里&#xff0c;一个名为openOii的项目引起了我的注意。这个由开发者 Xeron2000 发起的项目&#xff0c;从名字上就透着一股“开放”和“工业”的气息。作为一个在工业自动化和数据集成领域摸爬滚打了十多年的老兵&#xff0c;我深知在制造业…...

Swift原生大语言模型推理引擎llmfarm_core.swift集成与优化指南

1. 项目概述&#xff1a;一个为Swift生态打造的本地大语言模型推理引擎 最近在折腾一个iOS上的AI应用&#xff0c;想把一些轻量级的开源大语言模型&#xff08;LLM&#xff09;直接跑在手机端。大家都知道&#xff0c;现在主流的LLM推理框架&#xff0c;像llama.cpp、ollama&am…...

告别笨重模拟器:Windows系统上直接安装APK的终极方案

告别笨重模拟器&#xff1a;Windows系统上直接安装APK的终极方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经为了在电脑上运行一个简单的手机应用而不得…...

AI智能体安全策略引擎:AgentEnforcer框架设计与实战应用

1. 项目概述&#xff1a;一个为AI智能体量身定制的“行为守门员” 最近在折腾AI智能体&#xff08;Agent&#xff09;的开发&#xff0c;尤其是在构建那些需要自主执行任务、与外部API交互的复杂系统时&#xff0c;一个核心痛点总是挥之不去&#xff1a; 如何确保智能体的行为…...

Win11精简版系统缺失画图工具?三步教你从微软商店找回(附快速启动技巧)

Win11精简版系统缺失画图工具&#xff1f;三步教你从微软商店找回&#xff08;附快速启动技巧&#xff09; 不少追求系统流畅性的用户会选择安装第三方精简版Win11系统&#xff0c;却在需要基础功能时发现连画图工具都找不到了。这并非微软的疏漏&#xff0c;而是精简版系统为了…...

Gemini3.1Pro透明化指南:模型卡与数据卡入口解析

在 2026 年&#xff0c;越来越多的团队开始把“模型怎么用”升级为“模型用得是否可控、可追溯”。尤其是涉及合规审计、数据治理与风险评估时&#xff0c;工程侧最需要的往往是&#xff1a;能快速找到模型信息与数据来源的透明化页面入口&#xff0c;确保链路清晰、记录完整、…...

WarcraftHelper完整指南:5分钟让魔兽争霸3在现代电脑上完美运行

WarcraftHelper完整指南&#xff1a;5分钟让魔兽争霸3在现代电脑上完美运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代Win…...

若依框架菜单管理实战:手把手教你为列表页添加详情页(Vue+Element UI)

若依框架菜单管理实战&#xff1a;手把手教你为列表页添加详情页&#xff08;VueElement UI&#xff09; 在后台管理系统开发中&#xff0c;列表页与详情页的联动是基础但关键的功能需求。许多开发者在使用若依框架的代码生成器快速搭建项目后&#xff0c;常常面临一个典型问题…...

机器学习在资产管理中的应用:从数据到投资组合的端到端框架

1. 项目概述&#xff1a;当机器学习遇见资产管理如果你在资产管理行业待过&#xff0c;或者对量化投资感兴趣&#xff0c;那你肯定不止一次想过&#xff1a;那些复杂的市场数据、财报、新闻&#xff0c;能不能让机器来帮我们分析&#xff0c;甚至做出决策&#xff1f;firmai/ma…...

别再手动点选了!用C#写个SolidWorks插件,一键智能识别并拉伸草图里的特定轮廓

用C#开发SolidWorks智能插件&#xff1a;一键识别并拉伸特定草图轮廓的工程实践 在机械设计领域&#xff0c;SolidWorks作为主流三维CAD软件&#xff0c;其草图绘制与特征创建是产品开发的基础环节。工程师们经常遇到这样的场景&#xff1a;复杂草图中包含多个相交轮廓&#xf…...