机器学习中你不可不知的几个算法常识

https://mp.weixin.qq.com/s/Fh-eQm41DI3rkKjEgC1Yig

本文是《机器学习宝典》第 2 篇,读完本文你能够掌握机器学习几个算法常识:欠拟合和过拟合、没有免费的午餐定理、偏差和方差以及贝叶斯误差。

PS:文末附有练习题

读完 机器学习基础 之后,你已经知道了到底什么是机器学习以及机器学习的学习任务。在这篇给大家介绍一些机器学习中必须要了解的几个算法常识,这些算法常识在之后从事机器学习方面研究和工作时是非常重要的。

欠拟合与过拟合

我们已经知道,我们希望通过机器学习学得的模型的泛化能力比较强,直白来说就是使得学得的模型不仅仅在在训练样本中工作得很好,更应该在新的样本中工作很好。

通常我们把分类错误的样本数占总样本数的比例称为错误率(error rate),而准确度(accuracy)= 1 - 错误率。举例来说,如果在 m 个样本有 a 个样本分类错误,那么错误率为 a/m,准确度为 1 - a/m。

更一般地,我们将模型在训练集上的误差称为训练误差(train error),在测试集上的误差称为测试误差(test error),在假设测试数据与真实数据独立同分布的前提下,测试误差可以作为泛化误差(generalization error)的近似。我们当然是希望能够得到泛化误差小的模型,但是由于我们事先不知道测试集是什么样子,所以我们在使用机器学习算法时,不会提前固定参数,而是调整参数去降低训练误差。在整个过程中,泛化误差的期望会大于等于训练误差的期望。

想要保证模型效果好,也就是泛化误差比较小,可以通过以下两个因素来实现:

  1. 降低训练误差。
  2. 缩小训练误差和泛化误差的差距。

这两个因素分别对应机器学习的两个主要挑战:欠拟合(underfitting)和过拟合(overfitting)。欠拟合是指模型不能再训练集上获得足够低的误差,而过拟合是指训练误差和泛化误差之间的差距太大。

欠拟合相对容易理解点,过拟合可能不太容易理解,这里给出一个形象的比喻。上学考试的时候,有的人采取题海战术,把每个题目都背下来。但是题目稍微一变,他就不会做了。因为他非常复杂的记住了每道题的做法,而没有抽象出通用的规则。直观理解,这种情况就属于过拟合。

我们再来通过一张图片来直观地理解下欠拟合与过拟合的区别。有一组数据集包含了特征X和标签Y,简单起见,我们只考虑一个特征,现在我们通过三个假设函数来拟合这批相同的数据,得到结果如下:

解释下图片的内容:(左) 用一个线性函数拟合数据得到的模型导致欠拟合——它无法捕捉数据中的曲率信息。(中) 用二次函数拟合数据得到的模型在未观察到的点上泛化得很好。这并不会导致明显的欠拟合或者过拟合。 (右) 用一个高阶的多项式拟合数据得到的模型会导致过拟合。

相比于欠拟合,过拟合在实际工作中更为常见,出现过拟合的原因常见的有以下几种:

  • 训练集和测试集分布不一致。
  • 训练集的数量级和模型的复杂度不匹配。训练集的数量级小于模型的复杂度。
  • 样本里的噪音数据干扰过大,大到模型过分记住了噪音特征,反而忽略了真实的输入输出间的关系。

没有免费的午餐定理

我们经常听人谈论“什么算法更好”或者“A算法比B算法好”这样类似说法,其实这样的说法忽略了一个前提,那就是在解决某一个具体的问题(任务)上。为什么这么说呢,因为如果考虑所有潜在的问题,所有的学习算法都一样好。要谈论算法的相对优劣,必须要针对具体的问题和任务才有意义。

举个例子,我们有两组数据集,将它们分别切分成训练集和测试集之后,然后通过假设函数A和B分别拟合对应的两个训练集,得到结果如下:

在图(a)中的数据分布下,模型A和B都完美地拟合了所有的训练样本,但是在测试样本上的表现,模型A的拟合效果超过了模型B;在图(b)中的数据分布下,模型A和B同样完美地拟合了所有的训练样本,但是在测试样本上的表现,模型B的拟合效果超过了模型A。

上面的例子充分说明了没有哪个算法是绝对完美的,每个算法都有它适合的数据集,也就是说它适合的任务。

没有免费的午餐定理(No Free Lunch Theorem,简称 NFL)说的就是无论我们能设想到的最先进的算法还是多么笨拙的算法(比如胡乱猜测),它们的期望性能其实都是相同的。

这个结论看起来非常地“匪夷所思”,但实际上它是成立的。不过它成立的前提在所有可能出现的数据分布上。但是在实际生活中,我们很多时候只关注自己试图解决的问题,希望为它找到一个好的解决方案。举个实际生活中的场景,比如说你的家里地铁口有800m,你上班时想快速到达地铁口,这时候选择共享单车就是一个不错的方案;但如果说你想快速从北京到上海,这时候,共享单车显然不是一个好的选择。所以我们关注的就是在当前要解决的问题下(或者任务下),为它找到一个合适的解决方案。

所以说,机器学习研究的目标不是找一个通用学习算法或是绝对最好的学习算法。反之,我们的目标是理解什么样的分布与机器学习获取经验的“真实世界”相关,什么样的学习算法在我们关注的数据生成分布上效果最好。

偏差和方差

我们希望在能够得到一个泛化误差比较小的模型的同时,也希望能够解释为什么模型的泛化误差比较小(或者比较大)。我们可以将模型的期望泛化误差分解为两部分:偏差(bias)和方差(variance)之和。即:

泛化误差 = 偏差 + 方差。

偏差度量了学习算法的期望预测与真实结果偏离程度,即刻画了学习算法本身的拟合能力。方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响,或者说学习算法的稳定性。

偏差-方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。给定学习任务,为了取得好的泛化性能,则需使偏差较小,既能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小

这里我们通过一张扔飞镖的图片来解释下偏差和方差。

左上角的低偏差、低方差是理想中的模型,类似于把飞镖扔到了离靶心很近的地方,并且聚集效果也很好;右上角的低偏差、高方差是模型过拟合的表现,类似于把飞镖扔到了离靶心很近的地方,但是聚集效果效果不好;左下角的高偏差、低方差是模型欠拟合的表现,类似于把飞镖扔到了离靶心很远的地方,但是都集中在一个位置;右下角的高偏差、高方差是最差的模型了,类似于把飞镖扔到了靶子上,但是飞镖离靶心也很远,而且彼此间很分散。

一般来说,偏差和方差是有冲突的,也就是说,当模型复杂度较低时,模型的偏差较高,方差较低;当模型复杂度较高时,模型的偏差较低,方差较高。下图给出了他们之间的一个关系。

当我们有了模型的偏差和方差之后,就能够知道下一步该如何优化算法。

假设说,我们的分类器模型在训练集上的错误率为1%,测试集上的错误率为11%,我们估计它的偏差为1%,方差为11%-1%=10%,明显过拟合了,所以下一步优化时应该考虑降低方差。

如果说一个分类器模型在训练集上的错误率为15%,测试集上的错误率为16%,我们估计它的偏差为15%,方差为16%-15%=1%,明显欠拟合了,所以下一步优化时应该考虑降低偏差。

贝叶斯误差

贝叶斯误差也叫最优误差,通俗来讲,它指的就是现有技术下人和机器能做到最好的情况下,出现的误差。

人类擅长很多任务,比如图像识别和语音识别这类处理自然数据的任务,人类水平和贝叶斯水平相差不远,通常用人类水平来近似成贝叶斯水平,也就是说人的误差可以近似地看成贝叶斯误差。

有了贝叶斯误差之后,饿哦们可以将偏差分解为贝叶斯误差与可避免偏差之和。即:

偏差 = 贝叶斯误差 + 可避免偏差

假设我们训练了一个分类器模型,在训练集上的错误率有15%,在测试集上的错误率有30%,如果说贝叶斯误差为14%,那么我们可以知道它的可避免误差有15%-14%=1%,方差有30%-15%=15%,这时候,我们应该考虑如何降低方差,而不是降低偏差。

降低偏差和方差的办法

降低模型的偏差,能够降低模型欠拟合的风险;降低模型的方差,能够降低模型过拟合的风险。这里我们来看下如何一些常用的方法。

降低模型的偏差

  1. 增加新特征。比如挖掘组合特征、上下文特征、ID类特征。
  2. 增加模型复杂度。比如在线性模型中增加高次项,在神经网络中增加网络层数或神经元个数。
  3. 减少或去除正则化系数。比如L1、L2、dropout等。

降低模型的方差

  1. 增加更多的训练数据。
  2. 降低模型复杂度。比如决策树模型中降低树深度、进行剪枝等。
  3. 加入正则化。使用正则化能够给模型的参数进行一定的约束,避免过拟合。

练习题

看完这篇文章,我们来做几道练习题来检验下学习成果:

  1. 小明在平时模拟考试时基本上都是考95分,但是一上考场遇到真实考题,就只能考70分,小明的这种情况对应机器学习中的哪种现象?
  2. 思考下欠拟合和过拟合与模型复杂的之间的关系什么?
  3. 对于模型来说,如果训练集和测试集的分布不一致,会造成什么问题呢?
  4. 医生或者机器可以通过片子看病,普通的医生的准确诊断率为92%,有经验的专家为95%,多个专家组成的专家组的为98%,机器学习给出的预测的准确率为99%,那贝叶斯误差是多少呢?

机器学习中你不可不知的几个算法常识相关推荐

  1. 机器学习中的概念区分:模型 vs 算法

    文章目录 1. 刷题里的算法 2. 机器学习里的算法 2.1 理解1:比较浅显,靠近常规认知 2.2 理解2:比较复杂,有点矛盾 2.3 我的理解 2.3.1 目标函数 vs 损失函数 以前没有注意过 ...

  2. 机器学习中你不得不知道的数学符号表示

    文章目录 引入 1 标量向量及矩阵 2 自然数 3 定义 4 集合 5 导数 6 函数 7 概率 参考文献 引入   最近在补一些机器学习的理论基础,因此把常用的符号做一个总结.当然,不同的子方向可能 ...

  3. 无监督机器学习中,最常见4类聚类算法总结 | 技术头条

    点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」,购票请扫码咨询 ↑↑↑ 编译 | 安然.狄思云 来源 | 读芯术(ID:AI_Discovery) 在机器学习过程中,很多数据都具有特 ...

  4. 机器学习中,梯度下降算法的问题引入

    来源 | 动画讲编程 今天讲解的内容是梯度下降算法. 梯度下降算法在机器学习中的应用十分广泛,该算法的最主要目的是通过迭代的方法找到目标函数的最小值,经常用来解决线性回归和逻辑回归等相关问题.本节课主 ...

  5. 机器学习中的常见问题—损失函数

    机器学习中的常见问题--损失函数 一.分类算法中的损失函数 在分类算法中,损失函数通常可以表示成损失项和正则项的和,即有如下的形式: J(w)=∑iL(mi(w))+λR(w)J(w)=∑iL(mi( ...

  6. 机器学习中为什么需要梯度下降_机器学习,梯度下降算法,问题引入

    知乎视频​www.zhihu.com 今天讲解的内容是梯度下降算法. 梯度下降算法在机器学习中的应用十分广泛,该算法的最主要目的是通过迭代的方法找到目标函数的最小值,经常用来解决线性回归和逻辑回归等相 ...

  7. 机器学习中的编码器-解码器结构哲学

    其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造. 书的购买链接 书的勘误,优化,源代码资源 本文PD ...

  8. 机器学习中使用的交叉熵(cross entropy)透彻分析

    从字面分析交叉熵,1是交叉.2是熵(熵与信息量有关):首先交叉熵涉及信息论里面的东西,想要彻底理解交叉熵就要明白此概念跟信息量的关系以及里边的熵怎么理解. (1)信息量 衡量信息量可以用大小或者多少来 ...

  9. 深度机器学习中的batch的大小对学习效果有何影响?

    深度机器学习中的batch的大小对学习效果有何影响? 如题,在深度学习中,刚入门的小弟一直听闻一个batch中同时训练多个数据可以得到较好的效果,于是小弟在caffe上跑deepID的网络时对如何选取 ...

最新文章

  1. Navicat Premium无法连上ORACLE数据库的几种问题解决方法
  2. c语言 unlink,unlink 漏洞笔记
  3. java对象的内存结构_JAVA 对象内存结构
  4. CRM_OPPORT_TEXT_DETER_STANDARD
  5. anaconda和python有什么不一样_黄山毛峰的味道为什么会不一样?
  6. webBroser获取cookie
  7. 空格 过滤多个_CAD选择过滤器的运算符如何使用?
  8. mysql c 调用存储过程返回值_Mysql:使用返回值调用存储过程
  9. Game of Lines(POJ-3668)
  10. HDU 2066 一个人的旅行(地杰斯特拉)
  11. JDK5.0的11个主要新特征
  12. video downloadhelper 无时间限制_如何避免背景音乐侵权?自媒体和vlog必备的七大无版权背景音乐网...
  13. struts入门的ognl
  14. 【MATLAB深度学习工具箱】学习笔记--Deep Network Designer学习--组成和使用方法
  15. 对于ARX的简单介绍
  16. android 监听飞行模式,如何在Android上检测飞行模式?
  17. 91 个常见的 Laravel 面试题和答案
  18. Win10 解决CSDN、阿里云国内站、小米商城国内站等国内网站打不开的问题(超详细教程)
  19. ++k与k++区别 和双目运算符结合
  20. Java中String接受的最大字符串的长度

热门文章

  1. 《预训练周刊》第5期:智源等研究力证:GPT语言理解能力不输BERT、盘点NLP预训练「兵器谱」...
  2. 博士后工作站来了!智源研究院获得正式授牌
  3. 中国“芯”的突破攻略——智源大会“智能体系架构与芯片”论坛发布
  4. 凝聚世界著名UNIX/Linux专家Sobell十年功力的巨著1
  5. “清华数为”工业时序数据库IoTDB与DWF应用开发寒假师资培训圆满结束
  6. 外卖平台涉嫌大数据杀熟,处理不能“自说自话”
  7. 报名 | 首届!Apache Flink 极客挑战赛强势来袭,重磅奖项等你拿,快来组队报名啦!...
  8. TensorFlow Lite指南实战,附48页ppt
  9. 一文理清集成学习知识点(BoostingBagging)
  10. set list词频排序java_Hadoop WordCount改进实现正确识别单词以及词频降序排序 | 学步园...