偏斜类(Skewed Classes)

引子

假定我们通过逻辑回归来预测病人是否患有癌症:
y={0,病人未患癌症1,病人患有癌症y=\begin{cases}0,\quad病人未患癌症\\1,\quad病人患有癌症\end{cases}y={0,病人未患癌症1,病人患有癌症​

并且,令人欣喜的是,测试集的错误率只有 1%。别着急高兴,假如我们的测试样本中只有 0.5% 患有癌症,那么我们何不直接让预测函数为:
hθ(x)=0h_θ(x)=0hθ​(x)=0

即,我们永远预测病人不患病,那么准确率会高达 95%。但这可不是一件好事儿,我们追求高准确率牺牲的是病人的利益。引起这个问题的原因是样本中出现了偏斜类(Skewed Classes),偏斜即倾斜,大量样本倾斜向了某一类型。

查准率(Precision)与召回率(Recall)

从上面的例子我们知道,单纯地使用误差(Error)并不能完善地评价模型好坏,现在引入两个重要的评价指标:(1)查准率(Precision);(2)召回率(Recall),并定义:

  • 阳性(Positive):表示正样本。当预测和实际都为正样本时,表示真阳性(True Positive);如果预测为正样本,而实际为负样本,则表示假阳性(False Positive)。
  • 阴性(Negative):表示负样本。当预测和实际都为负样本时,表示真阴性(True Negative);如果预测为负样本,而实际为正样本,则表示假阴性(False Negative)。

    则:
  • 查准率(Precision):
    Precision=TruePosPredicatedPos=TruePosTruePos+FalsePosPrecision=\frac{TruePos}{PredicatedPos}=\frac{TruePos}{TruePos+FalsePos}Precision=PredicatedPosTruePos​=TruePos+FalsePosTruePos​

在上例中,查准率就描述了:在我们预测患癌的病人中,确实患了癌症的病人的比例。从公式中我们也可以得出,要想得到提高查准率,我们就要降低假阳性的出现的频次,即,我们只有在拥有十足的把握是,才预测一个样本为正样本。

  • 召回率(Recall):
    Recall=TruePosActualPos=TruePosTruePos+FalseNegRecall=\frac{TruePos}{ActualPos}=\frac{TruePos}{TruePos+FalseNeg}Recall=ActualPosTruePos​=TruePos+FalseNegTruePos​

在上例中,召回率就描述了:在患癌的病人中,有多少病人被我们预测到了。从公式中我们也可以得出,要想提高召回率,我们就要降低假阴性出现的频次,即,尽可能不放过任何可能为正样本的样本。

查准率和召回率的权衡

理想状况下,我们希望假设函数能够同时具备高准确率(High Precision)及高召回率(High Recall)。但是往往鱼和熊掌不可兼得。回到预测病人患癌的例子中,假定我们的预测函数为:
y={1,hθ(x)≥0.50,otherwisey=\begin{cases}1,\quad h_\theta(x)≥0.5\\0,\quad otherwise\end{cases}y={1,hθ​(x)≥0.50,otherwise​

即,我们设定的预测阈值为 0.5 。这么做似乎风险不小,很多没有患癌的病人被我们认为患有癌症而接受了不必要的治疗,因此,我们调高我们的阈值为 0.7 :
y={1,hθ(x)≥0.70,otherwisey=\begin{cases}1,\quad h_\theta(x)≥0.7\\0,\quad otherwise\end{cases}y={1,hθ​(x)≥0.70,otherwise​

此时,必须有较高的把握,我们才会预测一个患有癌症,避免非癌症患者接受到了不必要的治疗,假阳性样本少,此时我们也获得了高查准率。然而,这么预测的代价是,有些癌症病患体征不明显,就被我们认为没有患癌,从而得不到治疗,假阴性样本多,即我们的召回率偏低。

当我们尝试构建了不同的算法模型,并且获得了不同的查准率和召回率:

那么选择哪个算法是最好的呢,假定我们使用平均值来权衡查准率和召回率:
Average=P+R2Average=\frac{P+R}2Average=2P+R​

按照平均值,我们会选择算法 3,但是这并不是一个好的算法,因为其查准率太低了,我们希望有一个指标能选出查准率和召回率都高的算法,为此,引入了 F1Score :
F1Score=2PRP+RF_1Score=2\frac{PR}{P+R}F1​Score=2P+RPR​

从公式中也可以看到,分子是查准率和召回率的乘积,只有二者都较高时, F1ScoreF_1ScoreF1​Score 才会较高,特别地:
F1Score=0,ifP=0orR=0F_1Score=0,if\ P=0\ \ or\ \ R=0F1​Score=0,if P=0  or  R=0F1Score=1,ifP=1andR=1F_1Score=1,if\ P=1\ and\ R=1F1​Score=1,if P=1 and R=1


F1ScoreF_1ScoreF1​Score 帮我们选出了算法1,事实也确实如此,算法1的查准率和召回率都较高。

4.5 偏斜类-机器学习笔记-斯坦福吴恩达教授相关推荐

  1. 4.4 机器学习系统设计--垃圾邮件分类-机器学习笔记-斯坦福吴恩达教授

    机器学习系统设计–垃圾邮件分类 假定我们现有一封邮件,其内容如下: From: cheapsales@buystufffromme.com To: ang@cs.stanford.edu Subjec ...

  2. 3.12 程序示例--多分类问题-机器学习笔记-斯坦福吴恩达教授

    多分类问题 我们手上包含有手写字符的数据集,该数据集来自斯坦福机器学习的课后作业,每个字符图片大小为 20×20 ,总的样本规模为 5000×400 , 我们的神经网络设计如下,包含 1 个隐含层,隐 ...

  3. 10.1 掌握大数据-机器学习笔记-斯坦福吴恩达教授

    掌握大数据 在算法分析与优化一节中,我们就提到,在机器学习界流传着这样一句话: It's not who has the best algorithm that wins. It's who has ...

  4. 9.5 程序示例--推荐系统-机器学习笔记-斯坦福吴恩达教授

    程序示例–推荐系统 推荐模型 在推荐模型中,我们将暴露: 训练接口 train() 预测接口 predict(Theta, X) 获得推荐接口 getTopRecommends(Theta, X, i ...

  5. 9.1 基于内容的推荐系统-机器学习笔记-斯坦福吴恩达教授

    基于内容的推荐系统 推荐系统是机器学习最重要的应用之一,你所知道的淘宝.亚马逊.facebook.豆瓣这些网站都把推荐系统作为了核心.在某个电影资讯的网站,有那么一份用户对于电影的打分(1 - 5 分 ...

  6. 8.4 有监督学习与异常检测-机器学习笔记-斯坦福吴恩达教授

    有监督学习与异常检测 很多人会认为异常检测非常类似于有监督学习,尤其是逻辑回归,但我们用一张表格来描述有监督学习与异常检测的区别: 有监督学习 异常检测 数据分布均匀 数据非常偏斜,异常样本数目远小于 ...

  7. 8.3 算法流程与评估-机器学习笔记-斯坦福吴恩达教授

    算法流程与评估 算法流程 有了前面的知识,我们可以得到,采用了高斯分布的异常检测算法流程如下: 选择一些足够反映异常样本的特征 xjx_jxj​ . 对各个特征进行参数估计: μj=1m∑i=1mxj ...

  8. 8.1 概述-机器学习笔记-斯坦福吴恩达教授

    概述 异常检测(Anomaly Detection)是机器学习里面的一个常见应用,机器通过训练,将知道什么样的样本是正常样本,从而具备识别异常样本的能力. 飞机制造商在飞机引擎从生产线上流入市场前,会 ...

  9. 7.1 概述-机器学习笔记-斯坦福吴恩达教授

    概述 我们很希望有足够多的特征(知识)来保准学习模型的训练效果,尤其在图像处理这类的任务中,高维特征是在所难免的,但是,高维的特征也有几个如下不好的地方: 学习性能下降,知识越多,吸收知识(输入),并 ...

最新文章

  1. OpenCV油画效果
  2. SAP S/4HANA product search generated SQL statement的生产原理介绍
  3. 所谓的Dumb Question
  4. 如何利用ide进行跟踪调试_使用调试器进行事后跟踪
  5. 如何设置电脑开机自动提示(防止忘打卡等)
  6. 【Java基础篇】集合排序
  7. mysql数据库约束详解_基于MySQL数据库的数据约束实例及五种完整性约束介绍
  8. vba 数组赋值_VBA数组与字典解决方案第31讲:VBA数组声明及赋值后的回填方法
  9. 解决安装Discuz!插件时提示“对不起,您安装的不是正版应用,安装程序无法继续执行”的方法...
  10. 一图看完双11阿里云原生技术亮点
  11. DOS bat 的注释方法
  12. 华为交换机初始化_华为交换机如可恢复出厂设置
  13. idea打包jar,并运行
  14. Java DataStore 封装代码
  15. 消防工程师 8.2 防排烟系统-防烟
  16. Angularjs之模块(angular.module('myApp', [])参数)
  17. 大庭广众、朗朗乾坤之下,老师竟然带十男两女拉上窗帘、关上门做出这种不可描述之事...
  18. echarts制作多个纵轴的折线图
  19. 幽默笑话,哥们误会了,木子家原创
  20. Latex 中文简历 过程(更新Miktex和 修改utf字体)

热门文章

  1. 在Linux系统安装Nodejs 最简单步骤
  2. 怎么添加项目到SVN上面
  3. Java——Java封装
  4. 【工作感悟】——聊聊面试那些事
  5. 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to
  6. 修改.fig文件中图的x轴或y轴的标题及数据图
  7. UMDF驱动开发入门
  8. Python(3) 进制转换
  9. 随便写写的正则表达式
  10. 别人的Linux私房菜(17)进程管理与SELinux初探