首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

机器学习的主要挑战

训练数据的数量不足

目前大部分机器学习算法都需要大量的数据才能正常工作(除非重用现有模型的某些部分)

数据的不合理有效性

2001年,微软有研究员表明,截然不同的机器学习算法(包括最简单的算法)在自然语言歧义消除这个复杂问题的表现上,几乎完全一致

这些结果表明,相对于算法开发上,数据的建设也尤为重要

训练数据不具有代表性

就如之前的根据人均GDP预测人民生活满意度任务为例,如果有部分数据缺失,则会使模型的预测不准确

采样偏差

采样偏差是使训练数据不具代表性的重要原因,一个著名的案例是1936年,兰登对决罗斯福

其次,还有一种特殊类型的采用偏差,叫做无反应偏差

质量差的数据

如果训练数据满是错误、异常值和噪声,系统将更难检测到底层模式,更不太可能会表现良好 ,所以很有必要花时间处理训练数据。

如果某些实例明显是异常情况,要么直接丢弃,要么手动修复错误

如果某些实例缺少部分特征,(例如,5%的顾客没有指定年龄),要么整体忽略这些特征,要么 忽略这部分有缺失的实例,又或者是将缺失的值补充完整(比如填写年龄值的中位数,或者训练 一个带有这个特征的模型,再训练一个不带有这个特征的模型)

无关特征

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

特征选择:选择最有用的特征进行训练

特征提取:将现有特征进行整合,产生更有用的特征(比如降维)

通过收集数据创造新特征

训练数据的过度拟合

以GDP预测幸福的为例

如果我们采用高阶多项式,固然可以获得在训练数据上表现好得多的模型,但显然,也是一点用都没有的。

解决方案:

简化模型(例如:选择线性模型,而不是高阶多项式)

收集更多训练数据

减少训练数据中的噪声(例如:修复数据错误和消除异常值)

通过约束模型使其更加简单,降低过拟合的风险-----正则化,也就是将原来模型的自由度进行额外的限制,这个正则化参数不是模型训练优化出来的,而是人手动给定的,故又称为超参数。

训练数据的拟合不足

与过拟合相反,产生的原因是对于训练数据来说,模型太过于加单,比如用线性模型预测幸福度,就属于拟合不足,因为实际情况显然比这要复杂的多。

解决方式:

选择更多参数,更强大的模型

给学习算法提供更好的特征集(特征工程)

减少模型中的约束(比如,减少正则化超参数)

退后一步

总结一下:

机器学习是关于如何让机器更好地处理某些特定任务的理论,它从数据中学习,而不是将规则进行清晰的编码。

机器学习有很多类型:监督式和无监督式,批量的和在线的,基于实例的和基于模型的,等等

在一个机器学习项目中,你从训练集中采集数据,然后将数据交给学习算法来计算,如果算法是基于模型的,它会调整一些参数来将模型适配于训练集(即对训练集本身做出很好的预测),然后算法就可以对新的场景做出合理的预测。如果算法是基于实例的,它会记住这些样例,然后根据相似度来对新的实例进行泛化。

如果训练集的数据太少,训练代表性不够,包含太多噪声或者是被一些无关特征污染(垃圾进,垃圾出),那么系统将无法很好的工作。最后,你的模型既不能太简单(这会导致拟合不足),也不能太复杂(这会导致过度拟合)。

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

下面就来看看如何做到这一点

测试和验证

    了解一个模型对于新场景的泛化能力的唯一办法就是,让模型真实的去处理新场景。

测试集

     做法之一是将模型部署到新场景,然后监控它的输出。但这样如果模型效果不好,用户肯定会抱怨,所以这显然不是最好的办法。

    更好的选择是将数据分割成两部分:训练集和测试集。顾名思义,训练集用来训练模型,测试集用来测试模型,应对新场景的误差率称为泛化误差。通过测试集来评估模型,就可以得到对这个误差的评估。这个评估可以知道模型在处理新场景的能力如何。

    如果训练误差很低(模型对于训练集很少出错),但是泛化误差很高,那说明模型对于训练数据存在过度拟合。

    通常采用2/8定律,20%用于测试,80%用于训练。

交叉验证

    评估一个模型。可以采用测试集,那么对于多个模型呢?(比如线性模型和多项式模型)这时候,千万不要用测试集去验证,这样仍然会出现过拟合。正确的做法是交叉验证,通过将训练集分成若干个互补的子集,然后将多个模型,在这些子集的不同组合进行训练,再用剩下的子集进行验证,从而选定最好的模型,最后再用测试集来测量泛化误差。

没有免费的午餐的定理

    模型是观察的简化,这个简化是丢弃了哪些数据不大可能泛化至新实例上的多余细节。但是要决定对丢弃哪些数据以及保留哪些数据,必须要做出假设。

    比如,线性模型基于的假设就是,数据基本上都是线性的,而实例与直线之间的距离都是噪声,可以安全的忽略它们。

    1996年,David Wolpert提到,如果没有对数据做出假设,就么没有理由更偏好于哪个模型,那么想要知道哪个模型最好的方式,就是对所有模型进行评估,但实际是不可能的,所以需要对数据做出一些合理的假设。比如,对于简单任务,只会评估几个具有不同正则化水平的线性模型,而对于复杂的问题,则会评估多个神经网络模型。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200802A0I45400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券