前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习重大挑战:坏数据和坏算法正在毁掉你的项目

机器学习重大挑战:坏数据和坏算法正在毁掉你的项目

作者头像
IT阅读排行榜
发布2018-12-21 13:19:57
7220
发布2018-12-21 13:19:57
举报
文章被收录于专栏:华章科技

导读:让我们看看你在学习过程中可能会遇到哪些问题,阻碍你做出准确的预测。

简单来说,由于你的主要任务是选择一种学习算法,并对某些数据进行训练,所以最可能出现的两个问题不外乎是坏算法坏数据

作者:奥雷利安·杰龙(Aurélien Géron)

本文摘编自《机器学习实战:基于Scikit-Learn和TensorFlow》,如需转载请联系我们

01 坏数据

让我们先从坏数据开始。

1. 训练数据的数量不足

要教一个牙牙学语的小朋友什么是苹果,你只需要指着苹果说“苹果”(可能需要重复这个过程几次)就行了,然后孩子们就能够识别各种颜色和形状的苹果了,简直是天才!

机器学习还没有到这一步,大部分机器学习算法需要大量的数据才能正常工作。即使是最简单的问题,很可能也需要成千上万个示例,而对于诸如图像或语音识别等复杂问题,则可能需要上千万的示例(除非你可以重用现有模型的某些部分)。

在2001年发表的一篇著名论文中,微软研究员 Michele Banko 和 Eric Brill 表明,截然不同的机器学习算法,包括相当简单的算法,在自然语言歧义消除这个复杂问题上,表现几乎完全一致(如图1-20所示)。

▲图1-20 数据对算法的重要性

正如作者所说:“这些结果表明,我们可能会重新思考如何在二者之间做权衡——将钱和时间花在算法的开发上,还是花在语料库的建设上。

对复杂问题而言,数据比算法更重要,这一想法被Peter Norvig等人进一步推广,于2009年发表论文《数据的不合理有效性》。不过需要指出的是,中小型数据集依然非常普遍,获得额外的训练数据并不总是一件轻而易举或价廉物美的事情,所以暂时先不要抛弃算法。

2. 训练数据不具代表性

为了很好地实现泛化,至关重要的一点是,对于将要泛化的新示例来说,训练数据一定要非常有代表性。不论你使用的是基于实例的学习还是基于模型的学习,都是如此。

例如,前面我们用来训练线性模型的国家数据集并不具备完全的代表性,有部分国家的数据缺失。图1-21显示了补上缺失国家/地区信息之后的数据表现。

▲图1-21 一个更具代表性的训练样例

如果你用这个数据集训练线性模型,将会得到图中的实线,而虚线表示旧模型。正如你所见,添加部分缺失的国家信息,不仅显著地改变了模型,也更清楚地说明,这种线性模型可能永远不会有多准确。

看起来,某些非常富裕的国家并不比中等富裕国家幸福(事实上,看起来甚至是不幸福),反之,一些贫穷的国家也似乎比许多富国更加快乐。

使用不具代表性的训练集训练出来的模型不可能做出准确的预估,尤其是针对那些特别贫穷或特别富裕的国家。

针对你想要泛化的案例使用具有代表性的训练集,这一点至关重要。不过说起来容易,做起来难:如果样本集太小,将会出现采样噪声(即非代表性数据被选中);而即便是非常大的样本数据,如果采样方式欠妥,也同样可能导致非代表性数据集,这就是所谓的采样偏差

最著名的采样偏差的案例,应该是发生在1936年美国总统大选期间,兰登对决罗斯福。《文学摘要》当时举行了一次非常大范围的民意调查,向约1000万人发送了邮件,并得到了240万个回复,因此做出了高度自信的预言——兰登将获得57%的选票。

结果恰恰相反,罗斯福赢得了62%的选票。问题就在于文学摘要的采样方式:

  • 首先,为了获取发送民意调查的地址,《文学摘要》采用了电话簿、杂志订阅名单、俱乐部会员名单等类似名簿。而所有这些名单上的人往往对富人有更大的偏好,也就是更有可能投给共和党(即兰登)。
  • 其次,收到民意调查邮件的人中,不到25%的人给出了回复。这再次引入了采样偏差,那些不怎么关心政治的人,不喜欢《文学摘要》的人以及其他的一些关键群体直接被排除在外了。这是一种特殊类型的采样偏差,叫做无反应偏差

3. 质量差的数据

显然,如果训练集满是错误、异常值和噪声(例如,差质量的测量产生的数据),系统将更难检测到底层模式,更不太可能表现良好。所以花时间来清理训练数据是非常值得的投入。事实上,大多数数据科学家都会花费很大一部分时间来做这个。例如:

  • 如果某些实例明显是异常情况,要么直接将其丢弃,要么尝试手动修复错误,都会大有帮助。
  • 如果某些实例缺少部分特征(例如,5%的顾客没有指定年龄),你必须决定是整体忽略这些特征,还是忽略这部分有缺失的实例,又或者是将缺失的值补充完整(例如,填写年龄值的中位数),或者是训练一个带这个特征的模型,再训练一个不带这个特征的模型,等等。

4. 无关特征

正如我们常说的:垃圾入,垃圾出。只有训练数据里包含足够多的相关特征,以及较少的无关特征,系统才能够完成学习。一个成功的机器学习项目,关键部分是提取出一组好的用来训练的特征集,这个过程,称之为特征工程,包括以下几点:

  • 特征选择:从现有特征中选择最有用的特征进行训练。
  • 特征提取:将现有特征进行整合,产生更有用的特征(正如前文提到的,降维算法可以提供帮助)。
  • 通过收集新数据创造新特征。

02 坏算法

现在我们已经看了不少“坏数据”的例子,再来看几个“坏算法”的例子。

1. 训练数据过度拟合

假设你正在国外旅游,被出租车司机狠宰了一刀,你很可能会说,那个国家的所有出租车司机都是强盗。过度概括是我们人类常做的事情,不幸的是,如果我们不小心,机器很可能也会陷入同样的陷阱。在机器学习中,这被称为过度拟合,也就是指模型在训练数据上表现良好,但是泛化时却不尽如人意。

图1-22 显示了一个与训练数据过度拟合的,高阶多项式的生活满意度模型。虽然它在训练数据上的表现比简单的线性模型要好得多,但是你真的敢相信它的预测吗?

▲图1-22 训练数据过度拟合

诸如深度神经网络这类的复杂模型可以检测到数据中的微小模式,如果训练集本身是嘈杂的,或者说数据集太小(会导致采样噪声),那么很可能会导致模型检测噪声里的模式。很显然,这些模式不能泛化至新的实例。

举例来说,假设你给你的生活满意度模型提供了更多其他的属性,包括一些不具信息的属性例如国家的名字。在这种情况下,一个复杂模型可能会检测到这样的事实模式:

训练数据中,名字中带有字母 W 的国家,生活满意度大于 7 ——新西兰(New Zealand 7.3)、挪威(Norway 7.4)、瑞典(Sweden 7.2)和瑞士(Switzerland 7.5)。

当把这个 W 规则泛化到卢旺达(Rwanda)或津巴布韦(Zimbabwe)时,你对结果有多大的自信?显然,训练数据中的这个模式仅仅是偶然产生的,但是模型无法判断这个模式是真实的,还是噪声产生的结果。

当模型相对于训练数据的数量和噪度都过于复杂时,会发生过度拟合。可能的解决方案是:

  • 简化模型:可以选择较少参数的模型(例如,选择线性模型而不是高阶多项式模型),可以减少训练数据中的属性数量,又或者是约束模型
  • 收集更多的训练数据
  • 减少训练数据中的噪声(例如,修复数据错误和消除异常值)

通过约束模型使其更简单,并降低过度拟合的风险,这个过程称之为正则化。例如,我们前面定义的线性模型有两个参数,θ0和θ1。因此,该算法在拟合训练数据时,调整模型的自由度就等于2:它可以调整线的高度(θ0)和斜率(θ1)。

如果我们强行让θ1 = 0,那么算法的自由度将会降为 1,并且其拟合数据将变得更为艰难——它能做的全部就只是将线上移或下移来尽量接近训练实例,最后极有可能停留在平均值附近。这确实太简单了!

如果我们允许算法修改θ1,但是我们强制它只能是很小的值,那么算法的自由度将位于 1 和 2 之间,这个模型将会比自由度为 2 的模型稍微简单一些,同时又比自由度为 1 的模型略微复杂一些。你需要在完美匹配数据和保持模型简单之间找到合适的平衡点,从而确保模型能够较好地泛化。

图1-23显示了三个模型:蓝色虚线代表一开始的原始模型,也就是缺失部分国家的数据;红色的虚线代表用所有国家数据训练的第二个模型;实线代表的模型与第一个模型使用的训练数据相同,但是应用了正则化的约束。

我们可以看出通过正则化使得模型具有较小的斜率,这虽然让模型与训练数据的匹配度略微降低,但是能够更好地泛化至新的实例。

▲图1-23 通过正则化降低过度拟合的风险

在学习时,应用正则化的程度可以通过一个超参数来控制。超参数是学习算法(不是模型)的参数。因此,它不受算法本身的影响;它必须在训练之前设置好,并且在训练期间保持不变。

如果将正则化超参数设置为非常大的值,会得到一个几乎平坦的模型(斜率接近于零);学习算法虽然肯定不会过度拟合训练数据,但是也更加不可能找到一个好的解决方案。调整超参数是构建机器学习系统非常重要的组成部分。

2. 训练数据拟合不足

你可能已经猜到了,拟合不足和过度拟合正好相反:它的产生通常是因为,对于下层的数据结构来说,你的模型太过简单。

举个例子,用线性模型来描述生活满意度就属于拟合不足;现实情况远比模型复杂得多,所以即便是对于用来训练的示例,该模型产生的预测都一定是不准确的。

解决这个问题的主要方式有:

  • 选择一个带有更多参数、更强大的模型
  • 给学习算法提供更好的特征集(特征工程)
  • 减少模型中的约束(比如,减少正则化超参数)

03 退后一步

现在你已经对机器学习有一些了解。不过讲了这么多概念,你可能有点晕,我们暂且退后一步,纵观一下全局:

  • 机器学习是关于如何让机器可以更好地处理某些特定任务的理论,它从数据中学习,而不是将规则进行清晰地编码;
  • 机器学习系统有很多类型:监督式和无监督式,批量的和在线的,基于实例的和基于模型的等等;
  • 在一个机器学习项目中,你从训练集中采集数据,然后将数据交给学习算法来计算。如果算法是基于模型的,它会调整一些参数来将模型适配于训练集(比如,对训练集本身作出很好的预测),然后对新的场景,算法就可以作出合理的预测。如果算法是基于实例的,它会记住这些样例,并根据相似度来对新的实例进行泛化。
  • 如果训练集的数据太少、数据代表性不够、包含太多噪声、或者是被一些无关特征污染(垃圾进,垃圾出),那么系统将无法很好地工作。最后,你的模型既不能太简单(这会导致拟合不足),也不能太复杂(这会导致过渡拟合)。

还有最后一个要讲的重要主题是:在你训练好了一个模型之后,你不能只是“希望”它可以正确的对新的场景作出泛化。你还需要评估它,必要时还要做出一些调整。

关于作者:奥雷利安·杰龙(Aurélien Géron)是机器学习方面的顾问。他曾是Google软件工程师,在2013年到2016年主导了YouTube视频分类工程。2002年和2012年,他还是Wifirst公司(一家法国的无线ISP)的创始人和首席技术官,2001年是Ployconseil公司(现在管理电动汽车共享服务Autolib)的创始人和首席技术官。

本文摘编自《机器学习实战:基于Scikit-Learn和TensorFlow》,经出版方授权发布。

延伸阅读《机器学习实战》

点击上图了解及购买

转载请联系微信:togo-maruko

推荐语:前谷歌工程师撰写,“美亚”人工智能图书畅销榜首图书。从实践出发,手把手教你从零开始搭建起一个神经网络。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据DT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档