最近重新学习了一下机器学习的一些基础知识,这里对性能度量涉及到的各种值与图像做一个总结。

西瓜书里的这一部分讲的比较快,这些概念个人感觉非常绕,推敲了半天才搞清楚。

这些概念分别是:TP、FN、FP、TN,查全率和查准率,P-R曲线和ROC曲线

1、混淆矩阵中的:TP FN FP TN

其实很简单

真实情况有两种可能:正(T)和反(F);

预测结果有两种可能:积极(P)和消极(N)

但是比较绕的是对于这里的P和N的理解,看到一个很好的举例,借用一下:

(pic from http://www.360doc.com/content/19/0806/19/52645714_853362368.shtml)

也就是说

TN的意思是,预测的结果为N,即认为预测对象是F,而这个预测是正确的,所以记为T

这个时候思考:那么TN到底代表真实情况是T还是F?

这就有点绕了,有一个简便的方法:将T记为+,F记为-,P记为+,N记为-

那么++和--的运算结果为+,真实情况为T;+-和-+的运算结果为-,真实情况为F

所以TN(+-)的真实情况是F,它的意思是,预测的结果是N,而这个预测是正确(T)的

2、查准率P和查全率R、P-R曲线

首先注意区分两个P不同的含义,用颜色区分:预测结果P(positive),查准率P(precision)

在看表达式前先说说它们的定义,首先查准率和查全率是一对矛盾的值

查准率是指在所有预测为P的情况(包括将T预测为T的TP,和将F预测为T的FP)下,真实情况为T的比例

故查准率P=TP/P = TP/(TP+FP)

查全率是指在所有真实情况下为T的样本(包括将T预测为T的TP,和将T预测为F的FN)中,预测正确P的比例

故查全率R=TP/T = TP/(TP+FN)

为什么说他们是一对矛盾的值,一个大另外一个就必然小?

可以这样理解:

如果希望查准率P高,则需要尽量“保守”地预测:不能肯定地预测为P,就给出N的答案。这样的话,势必会导致将真实情况下的T预测为N的情况增加,即FN增加,那么查全率R就会相应地下降

这样就能理解:

1、P-R曲线中,随着R的增加,P会随之下降;

2、在R相同的情况下,P更高的学习器性能更好,故若学习器A的曲线“包住”学习器B的曲线,则A的性能优于B

P-R曲线

当我们设置一个阈值时,会得到一对P-R,而当阈值在[0,1]上取值时,就可以获得更多的P-R,由此画出P-R曲线

P-R曲线代表了一个学习器的性能,上文中有得出结论:

若学习器A的曲线“包住”学习器B的曲线,则A的性能优于B。

而当两个曲线发生交叉时,则通过其他方法比较性能:

1、曲线围成的面积,面积大者性能更优

2、寻找平衡点(BEP),即P=R时,即:

另外还有一个Fβ的式子,是F1的一般形式,可以通过参数β控制对查准或查全的偏好,这里不多做解释了

3、ROC曲线(真正利率TPR和假正利率FPR)

有了前面的解释,搞懂TPR和FPR就不难了

直接上表达式:

ROC曲线则是以这两个值为横纵坐标画出的曲线:

由于一般情况下的样本是离散的,所以一般来说ROC曲线的形状是类似于右图的”锯齿状“

呈现这种锯齿状的特征是由于ROC曲线在绘制的过程中,是一个点一个点画的。

模拟一下这个过程:

1、将所有测试对象根据预测值(在0~1之间)按从大到小排序,记为序列L

2、认为所有样本皆为负,则100%预测为N,故P=0,即TP=FP=0,TPR=FPR=0,第一个点为(0,0)

3、将阈值调整为L[0]的值,则L[0]将被预测为P,则必有 TP=1&FP=0 或 TP=0 FP=1,相应的会得到TPR和FPR,得到第二个点

4、重复3的过程,将阈值继续调整为L[1],则L[0]和L[1]将被预测为P,TPR和FPR的值会再次改变,得到第三个点

5、重复上述过程,最终可以得到完整的ROC曲线

如何通过ROC曲线判断模型的性能

真正(TP)利率反映的是预测正确的概率,假正(FP)利率反映的是预测错误的概率,所以在图中能”包住“另一条曲线的性能更优

【机器学习】搞清楚机器学习的TP、FN、FP、TN,查全率和查准率,PR曲线和ROC曲线的含义与关系的更多相关文章

  1. 机器学习--PR曲线, ROC曲线

    在机器学习领域,如果把Accuracy作为衡量模型性能好坏的唯一指标,可能会使我们对模型性能产生误解,尤其是当我们模型输出值是一个概率值时,更不适宜只采取Accuracy作为衡量模型性泛化能的指标.这 ...

  2. scikit-learn机器学习(二)逻辑回归进行二分类(垃圾邮件分类),二分类性能指标,画ROC曲线,计算acc,recall,presicion,f1

    数据来自UCI机器学习仓库中的垃圾信息数据集 数据可从http://archive.ics.uci.edu/ml/datasets/sms+spam+collection下载 转成csv载入数据 im ...

  3. 机器学习模型评价指标之ROC 曲线、 ROC 的 AUC 和 投资回报率

    前文回顾: 机器学习模型评价指标之混淆矩阵 机器学习模型评价指标之Accuracy.Precision.Recall.F-Score.P-R Curve.AUC.AP 和 mAP 1. 基本指标 1. ...

  4. 机器学习中 TP FP TN FN的概念

    二分类 在二分类问题中,TP FP TN FN 是非常清楚且易于理解的. TP (True Positive) : 预测为 1 ,真实值也为 1 -> 真阳性 FP (False Positiv ...

  5. 从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估

    从TP.FP.TN.FN到ROC曲线.miss rate.行人检测评估 想要在行人检测的evaluation阶段要计算miss rate,就要从True Positive Rate讲起:miss ra ...

  6. 100天搞定机器学习|Day7 K-NN

    最近事情无比之多,换了工作.组队参加了一个比赛.和朋友搞了一些小项目,公号荒废许久.坚持是多么重要,又是多么艰难,目前事情都告一段落,我们继续100天搞定机器学习系列.想要继续做这个是因为,一方面在具 ...

  7. 100天搞定机器学习|Day11 实现KNN

    机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习|D ...

  8. 100天搞定机器学习|Day8 逻辑回归的数学原理

    机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习|D ...

  9. 100天搞定机器学习|Day9-12 支持向量机

    机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习|D ...

  10. 100天搞定机器学习|Day16 通过内核技巧实现SVM

    前情回顾 机器学习100天|Day1数据预处理100天搞定机器学习|Day2简单线性回归分析100天搞定机器学习|Day3多元线性回归100天搞定机器学习|Day4-6 逻辑回归100天搞定机器学习| ...

随机推荐

  1. 命令行编译、运行带包(package)的java源码

    首先安装好JDK,过程略. 准备一个源码Main.java,如下 1 package com.compiltetest; 2 3 public class Main { 4 5 public stat ...

  2. Dinic的几种复杂度

    学了那么久网络流才发现自己不知道 Dinic 算法的一个在各边容量均为 \(1\) 的网络时复杂度上的结论.我说为啥学术社区那题优化建图复杂度是对的呢-- 以下均认为使用了当前弧优化与多路增广. 以下 ...

  3. 利用position: absolute最简便实现水平居中的css样式

    html <div class="horizontal-center"></div> css .horizontal-center { left: 50%; ...

  4. .NET Core中的AOP

    1.AOP的应用场景 AOP全称Aspect Oriented Progarmming(面向切面编程),其实AOP对ASP.NET程序员来说一点都不神秘,你也许早就通过Filter来完成一些通用的功能 ...

  5. vue仿QQ聊天室|vue聊天实例,直播聊天室

    图片压缩 百亿站点 基于vue2.0+vue-cli+vuex+vue-router+webpack+es6+wcPop等技术开发的仿微信聊天界面|仿微信聊天室vue-chatRoom,实现了微信聊天 ...

  6. stm32的boot0和boot1

    stm32的boot0和boot1 TM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash.2)SRAM = 芯片内置的RAM区,就是内存啦.3)系统存储器 ...

  7. DEV GridControl 主从表 (层次表)

    DataTable dtData= DbHelperOra.Query(strSql2.ToString()).Tables[0]; //主表 dtusers.TableName = "病人 ...

  8. (jmeter笔记)添加正则提取器和JSON提取器

    添加正则提取器和JSON提取器 1.正则提取器: 返回的Token如下: 引用名称:可以理解为变量名 //调用表示${变量名} 正则表达式:"Token":"(.+?)& ...

  9. gin 使用gorilla 关闭 websocket 时候设置close code 和message

    gin 使用gorilla 时建立websocket的教程很多博客都有写,但是很少有人讲关闭websocket时自定义 close code 和message.主要是使用:websocket.Form ...

  10. 047_SOQL 基本查询总结

    User currentUser = [SELECT Id, Profile.Name,UserRole.Name FROM User WHERE Id = :UserInfo.getUserId() ...