我们知道,同一个问题,可采用多种机器学习模型来解决,那如何评价这些模型的好坏呢?这时,就需要构建一系列“靠谱”的标准。因此,提及机器学习,性能评估是一个绕不开的话题。

训练误差与测试误差

性能评估,主要用于反映所构建学习模型的效果。在预测问题中,要评估模型的性能,就得将预测结果和真实标注进行比较。对于监督学习而言,假设我们有 m 个样本,其中有 a 个被模型错误分类,那么一种简易的评价标准—分类错误率(error rate)可以定义为 a/m。

通常,我们将学习模型在训练集上的误差称为训练误差(training error),将在测试集上的误差称为测试误差(test error),而将在新样本上的误差称为泛化误差(generalization error)。这里的“泛化”,是指模型在新情况、新样本上的性能表现,你也可以把它理解为“通用”。

显然,训练模型的终极目的,不仅是希望它在训练集上表现很好,还希望它在新环境中对新样本表现也不逊色。机器学习算法对于新样本的适应能力,称为泛化能力。

这就好比,如果在家里我们把孩子训练得服服帖帖,事事符合我们的预期,这可能并非好事,因为孩子最终还是要走出家门,踏上社会。如果在新环境下,孩子还能表现得适应能力很强(用机器学习的术语来说,就是泛化能力强),这才是我们想要的。

腾讯文档

然而,在新样本到来之前,我们根本不知道它是什么模样。因此,借助所谓的“新样本”,提升模型的泛化能力,只是一个美好的梦想。通常,我们能做的就是,把所能拿到的数据一分为二,一部分用作训练,一部分用作测试。这里用作测试的集合,由于不参与训练,因此在功能上相当于新样本。

训练模型时,一开始的训练误差和测试误差都比较高,随着训练的次数增加(模型的复杂度也因此提升),训练误差会越来越小,但测试误差可能会越来越大,我们需要平衡(tradeoff)训练误差和测试误差,让它们达到一个取舍均衡点,如图 1 所示。

平衡训练误差与测试误差

图 1:平衡训练误差与测试误差

为什么一开始训练误差和测试误差都很高,而后来二者会逐渐分道扬镳呢?这就涉及机器学习中的两个重要概念:欠拟合(underfitting)和过拟合(overfitting)。

过拟合和欠拟合

先说什么是欠拟合。欠拟合的概念比较容易理解,就是样本不够,训练不精,连已有数据集(即训练集)中的特征都没有学好的一种表现,当它面对新样本做预测时,自然预测效果也好不到哪里去。有时,我们也把欠拟合称作高偏差(high bias)。

比如说,在图 2 的右下图中,如果仅把样本中的“4 条腿”当作青蛙的特征,这是“欠缺”的,这样分类器就会把所有 4 条腿的动物(比如壁虎)也当作青蛙,这显然是错误的。

过拟合与欠拟合的直观对比

图 2 过拟合与欠拟合的直观对比

那什么是过拟合呢?过拟合是指,模型“一丝不苟”地反映训练数据中的特征,从而在训练集中表现过于“卓越”。但这样一来,它对未知数据(新样本)的预测能力就会比较差,稍有“风吹草动”,分类器就不认识了。因此,有时我们也把过拟合称为高方差(high variance)。

这里的高方差是指,模型在一个地方(训练集)很行,换个地方(测试集)就不行了,这说明模型的泛化能力很差。比如在图 2 的右上图中,过拟合的模型学习得太“入戏”,它会把青蛙背上的斑点当作青蛙的特征。于是,新来的样本青蛙仅仅由于背上没有斑点(不同于训练数据),就被判定为非青蛙,这岂不是很荒诞?

此外,其实所谓的训练数据,本身也是有误差的。过于精准的拟合,可能会把这些数据的误差当作特征来学习,从而导致在训练集上拟合得越精确,面对新样本时预测的效果反而越糟糕。

欠拟合是比较容易克服的,比如在决策树算法中扩展分枝,再比如在神经网络中增加训练的轮数,这样就可以更加“细腻”地学习样本中蕴含的特征。相比而言,要克服过拟合就困难得多。发生过拟合的一个重要原因是,模型过于复杂。而我们需要的是一个更为简化的模型,学习蕴含在数据中的特征。这种“返璞归真”的纠正策略,就是正则化(regularization)。

模型选择与数据拟合

从前面的图 1 中可以看出,如果我们一味地追求降低训练误差,那么所选模型的复杂度只能越来越高。因为只有这样,模型才能有较强的数据拟合能力。但“过犹不及”,当模型足够复杂时,模型中的参数也会过多,发生过拟合的概率就会上升。在选择模型时,我们需要遵循一项基本原则:避免过拟合并提高泛化能力。

下面就以多项式函数的拟合问题为例,来说明模型选择与数据拟合的关系。对于这样的一个训练数据集 T={(x1,y1),(x2,y2),...,(xn,yn)},其中 xi 是样本的观测值(即特征),yi 是对应的输出观测值(i=1,2,…,n)。

现在我们的任务是,用 m 次多项式函数来拟合这些数据(由于观测值是连续值,所以这是一个回归任务而非分类任务)。此处的 m 是可变值,比如说一次多项式(m=1)、三次多项式(m=3)等。我们的目标是,选出一个对训练数据有较好拟合且能对新样本有较好预测能力的多项式函数。

设 m 次多项式的一般形式为:

image

对于以上公式,解读如下:

  • 目前有 m+1 个特征:x0,x1,x2,...,xm;
  • 对应有 m+1 个需要学习得到的权值参数:w0, w1,w2,…,wm;
  • 这些参数的正与负、大与小,就代表我们选择特征的“态度”,如果某个 wi 是很大的值,则说明它对应的特征 xi 很“位高权重”,值得重视;
  • 如果某个 wi 值接近于 0,就表明与这个权值相关联的特征 xi“人微言轻”,可有可无;
  • 有意识地让某些权值接近于 0,从而抛弃某些特征的训练方法,叫作权重衰减(weight decay),它在某种程度上避免了过拟合;

现在的问题是,如何学到“这是 m+1 个参数”呢?常用的策略之一就是最小二乘法(Method of Least Squares,简称 MLS)。

通常,拟合出来的函数值 f(xi,w) 和预期标签 yi 之间是有误差的,即残差(residual):

ei=f(xi, w)-yi

1829 年,伟大的数学家高斯已经证明,在误差 e0, e1,..., en 独立同分布的假定下,最小二乘方法拥有一个优势:在所有无偏线性估计类中方差最小(见高斯-马尔可夫定理,Gauss-Markov Theorem)。即残差平方和最小时,拟合函数 f(x, w) 和预期标签 y 相似度最高。

即当下列公式中的 L(w) 取得最小值时,w0, w1,w2,…,wn 便是最优的拟合参数。

image

机器学习中是如何处理误差的相关推荐

  1. 从重采样到数据合成:如何处理机器学习中的不平衡分类问题?

    从重采样到数据合成:如何处理机器学习中的不平衡分类问题? 2017-03-19 13:17 来源:机器之心 技术 原标题:从重采样到数据合成:如何处理机器学习中的不平衡分类问题? 选自Analytic ...

  2. 从重采样到数据合成:如何处理机器学习中的不平衡分类问题? 转载 2017年08月01日 17:09:03 标签: 机器学习 / 数据 719 转自:http://www.sohu.com/a/12

    从重采样到数据合成:如何处理机器学习中的不平衡分类问题? 转载 2017年08月01日 17:09:03 标签: 机器学习 / 数据 719 转自:http://www.sohu.com/a/1293 ...

  3. 机器学习中如何处理缺失数据(NAN和Ifo)?

    机器学习中如何处理缺失数据(NAN)? 文章目录: 一.NAN 和 Inf 二.机器学习中空值的处理方法 一.NAN 和 Inf NAN(Not A number):意思:不是一个数字,是一个空值 I ...

  4. envi最大似然分类_闲谈最大后验概率估计(MAP estimate)amp;极大似然估计(MLE)和机器学习中的误差分类...

    上一篇文章中提到了一个有趣的实验,简单来说就是1-100中有若干个数字是"正确的",只告诉其中一部分"正确的"数字,去猜全部"正确的"数字. ...

  5. 在机器学习中为什么只需要正的误差而不用负的误差

    如果我们使用数百万对input->goal_prediction(输入->预测目标)来进行训练,在此基础上,我们仍然希望能够做出准确的预测.因此,我们希望可以将数百万对数据的平均误差降为0 ...

  6. [转]如何处理机器学习中的不平衡类别

    如何处理机器学习中的不平衡类别 原文地址:How to Handle Imbalanced Classes in Machine Learning 原文作者:elitedatascience 译文出自 ...

  7. 机器学习中的偏差、方差以及泛化误差

    在机器学习中学习器的实际预测结果与样本的真实输出往往存在误差(error) 学习器在训练集上的误差称为"训练误差"(training error)or "经验误差&quo ...

  8. 机器学习:算法中的泛化误差、偏差、方差、噪声的理解(超详细)

    摘要:在现实任务中,我们往往有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型,那么,我们该如何选用哪一个学习算法,使用哪一种参数配置呢?这就是机器学习中的&qu ...

  9. 蜡炬教育:如何处理机器学习中大型数据的加载问题?

    原标题:蜡炬教育:如何处理机器学习中大型数据的加载问题? 蜡炬教育老师表示,在处理机器学习算法时,经常会因为数据库太大而导致无法放入内存中,而遇到这样几个问题:当运行数据集算法而导致崩溃时如何解决?当 ...

最新文章

  1. Wireshark数据包分析之TCP协议包解读
  2. Redis 命令参考
  3. 面试官:给我说一下 Spring MVC 拦截器的原理?
  4. 1357. 优质牛肋骨【一般 / 思维 爆搜】
  5. python最大分词_python正向最大匹配分词和逆向最大匹配分词的实例
  6. el表达式的语法_「手把手教python3接口自动化」「第三章」:Python3 语法
  7. oracle数据库的导入导出
  8. python-IDE的使用(小白先看)
  9. 学生成绩管理系统mysql课程设计_数据库课程设计报告-学生成绩管理系统
  10. 对话DeepMind创始人:建立通用人工智能
  11. 日期抽象数据类型设计与实现作业总结
  12. JavaScript 【99乘法表】【案例】
  13. BZOJ.2726.[SDOI2012]任务安排(DP 斜率优化)
  14. (贰)笔记:AUI 中 Tab 的使用及 item 样式与下划线样式的修改
  15. 阿里注资新浪微博 冲击最大的是腾讯
  16. IKVM.NET的妙手偶得
  17. 服务器间通过ssh使用密钥对实现无密码登录
  18. jq 移动端网页分享功能_js实现QQ、微信、新浪微博分享功能
  19. MUI开发大全(小程序前端框架)
  20. 最新!使用Python爬取蓝奏云文件下载直链并下载,支持批量爬取,已封装为函数,可直接使用(含注释、库的使用解释)

热门文章

  1. 超详细易理解的HTTPS(易上手哦)
  2. Python海龟turtle画椭圆方法
  3. 【Python】关于DataFrame数据类型二三事
  4. strtol,strtoul,strtod
  5. Transformer25
  6. 2021年深圳市专精特新中小企业遴选申报指南
  7. 大屏联屏发布系统解决方案
  8. mmdetection训练 显卡选择
  9. 用C语言编写简单的通讯录(大一课程作业)
  10. 涂鸦蓝牙SDK开发系列教程——5.应用开发