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

【机器学习】分类模型的评价方法

🌻个人主页:相洋同学
🥇学习在于行动、总结和坚持,共勉!

#学习笔记#

目录

一、混淆矩阵(Confusion Matrix)

二、评估指标(Evaluation metrics)

1.正确率(accuracy)

2.精准率(precision)

3.召回率(recall)

4.调和平均值(F1)

 三、ROC、AUC与P-R曲线

1.ROC曲线

2.AUC

3.P-R曲线


一、混淆矩阵(Confusion Matrix)

混淆矩阵可以用来评估分类模型的正确性,该矩阵是一个方阵,矩阵的数值用来表示模型预测结果与真实结果的对比统计。包括真正例(True Positive)、假正例(False Positive)、真负例(True Negative)、假负例(False Negative)。

 通过上图我们不难得出以下几点结论:

1.竖着来看,正正例(TP)+假负例(FN)= 预测为正样本的数量,假正例(FP)+ 真负例(TN)= 预测为负样本的数量;

2.横着来看,真正例(TP)+ 假正例(FP)= 正样本的数量。假负例(FN)+ 真负例(TN)= 负样本的数量。

3.整体来看,真正例(TP)+ 假正例(FP)+ 假负例(FN)+ 真负例(TN) = 所有样本数量

如何确定正样本和负样本?

一般来我们规定样本少的为正样本,或我们更关注的为正样本。例如垃圾邮件检测中的垃圾邮件,癌症筛查中的癌症患者。

二、评估指标(Evaluation metrics)

从混淆矩阵中可以得到更高级的分类指标,不同的指标在不同场景中发挥作用。

1.正确率(accuracy)

正确率的定义:

 简单来说就是所有预测对的占所预测的数量

2.精准率(precision)

精准率的定义如下:

即正确预测为正的数量占所有预测为正的数量,又称查准率。在垃圾邮件或垃圾短信识别中比较看重

3.召回率(recall)

召回率的定义如下:

即正确预测为正的数量占所有为正的数量,又称查全率,可以理解为宁可错杀一百也不放过一个,在癌症排查,或者流行病筛查中比较看重

4.调和平均值(F1)

F1定义为精确率预召回率的调和平均值:

 三、ROC、AUC与P-R曲线

1.ROC曲线

使用图形来描述二分类系统的性能表现。图形的纵轴为正正例率(TPR--True Positive Rate),横轴为家正例率(FPR--False Positive Rate)。其中,真正例率与加正例率定义为:

 

 ROC曲线通过真正例率(TPR)与假正例率(FPR)两项指标,可以用来评估分类模型的性能。真正例率与假正例率可以通过移动分类模型的阈值进行计算。随着阈值的改变。真正例率与假负例率也会随之发生改变,进而就可以在ROC曲线坐标上形成多个点

随着阈值的降低,TPR与FPR都会增大,重要的是,看谁增长的更快,如果TPR增长的更快,则曲线越想上凸,模型的分类效果越好。

2.AUC

AUC(Area Under the Curve)是指ROC曲线下的面积,在比较多个分类模型效果时,会比ROC曲线更加直观。

3.P-R曲线

模型在不同的阈值下,会对应不同的精准率与召回率,我们以横轴为召回率,纵轴为精准率,将这些点连成线就构成了P-R(Precision-recall)曲线。

P-R曲线上的点体现为不同阈值下,精准率与召回率的对应关系

关于P-R曲线,说明如下

(1)精准率与召回率无法同时增大,一个增大时,另一个可能就会降低

(2)随着召回率的增加,精准率一定会呈现下降的趋势

(3)当对精准率或召回率具有定量要求时,P-R曲线就会非常有用

以上

学习在于行动,总结和坚持,共勉

相关文章:

  • 更安全的C gets()和str* 以及fgets和strcspn的用法
  • 【基础CSS】
  • 3.Windows下安装MongoDB和Compass教程
  • JavaScprit之初识面向对象
  • 用所有语言写“Hello, World!“
  • WebRTC:真正了解 RTP 和 RTCP
  • C++从零开始(day52)——unordered_set,unordered_map学习使用
  • Visual Studio项目模板的创建与使用
  • 基于 K8s 容器集群的容灾架构与方案
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • 淘宝基于Nginx二次开发的Tengine服务器
  • 「SpringBrick快速入门指南」:一款基于Spring Boot的高级插件化开发框架
  • SQLite优化实践:数据库设计、索引、查询和分库分表策略
  • 媒体发稿:澳门媒体发稿7个流程
  • java组合模式揭秘:如何构建可扩展的树形结构
  • 【391天】每日项目总结系列128(2018.03.03)
  • export和import的用法总结
  • express如何解决request entity too large问题
  • Flannel解读
  • Java|序列化异常StreamCorruptedException的解决方法
  • JSDuck 与 AngularJS 融合技巧
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • underscore源码剖析之整体架构
  • Vue.js源码(2):初探List Rendering
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 扑朔迷离的属性和特性【彻底弄清】
  • 前嗅ForeSpider教程:创建模板
  • 通过npm或yarn自动生成vue组件
  • 无服务器化是企业 IT 架构的未来吗?
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 用Python写一份独特的元宵节祝福
  • 追踪解析 FutureTask 源码
  • Nginx实现动静分离
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​你们这样子,耽误我的工作进度怎么办?
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (C语言)逆序输出字符串
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (蓝桥杯每日一题)love
  • (转)linux 命令大全
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .Net语言中的StringBuilder:入门到精通
  • .NET中的十进制浮点类型,徐汇区网站设计
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [<事务专题>]
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [BetterExplained]书写是为了更好的思考(转载)
  • [BZOJ 2142]礼物(扩展Lucas定理)