导读:让我们看看你在学习过程中可能会遇到哪些问题,阻碍你做出准确的预测。
简单来说,由于你的主要任务是选择一种学习算法,并对某些数据进行训练,所以最可能出现的两个问题不外乎是坏算法和坏数据。
作者:奥雷利安·杰龙(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年美国总统大选期间,兰登对决罗斯福。