机器学习概述
机器学习的主要挑战
简单来说,机器学习的主要任务就是挑选一个算法,并在数据集上训练它。因此,就有两个方面主要的问题:坏数据和坏算法。
训练数据数量不够
要教一个幼儿学习什么是苹果,你只需要指着一个苹果说“这是苹果”,多重复几次,小孩子就能认出各种各样苹果了,但是机器学习不是这样的,大多数机器学习算法要想正常工作,都需要大量的数据。即使对于非常简单的问题,往往也需要上千组数据,对于一些复杂的问题,比如图像或语音识别,可能需要上百万组数。
The Unreasonable Effectiveness of Data(不知道咋翻译)
在2001年的一篇著名的文章中,微软的两位研究人员指出,如果有足够多的数据,不同的机器学习算法,包括很简单的算法,在自然语言消歧问题上都能有较好的表现。
正如作者所说“这个结果提示我们要重新思考该把钱和时间花在算法的研发还是语料库(数据集)的开发上”
对于复杂问题,数据比算法更重要这一想法最早是由Peter Norvig 于2009年 在一篇名为 The Unreasonable Effectiveness of Data 的文章中提出的。但是需要注意的是,小型和中型的数据集仍然非常普遍,获取大量数据仍然不是一件非常便宜或者简单的事情,因此,不要抛弃算法
训练数据不具有代表性
要想算法泛化的好,就要求训练数据能够代表想要泛化的新实例,无论你采用基于实例的算法还是基于模型的算法。
比如,我们之前所使用的用来训练线性模型的国家数据集就不具有很好的代表性,一些国家的数据是缺失的。将缺失国家的数据添加进去之后,数据的表现如图1.21所示
图1-21 更具代表性的训练样本
如果使用现在的数据集训练线性模型,将会得到实线所表示的模型,而原来的模型是虚线所表示的。可见,将缺失的数据加上不仅改变了模型的参数,更重要的是这说明原来的模型可能无法做出正确的预测。
使用对于要归纳的情形具有代表性的数据十分重要,但是说起来容易做起来难,如果样例集过小,可能会有样本噪声,即使样本量足够,如果采样方法不当,同样可能存在样本不具有代表性的问题,这被称为“抽样偏差”。
低质量数据
显而易见,如果训练集中的数据满是错误、异常和噪声,那么想要发现数据中隐含的模型是很困难的,因此系统往往也不可能很好的工作。因此,清洗数据往往是一件很有意义的工作,真相就是,大部分的数据科学家都在这件事情上花费了很大的时间和精力。例如:
- 如果一些实例明显是异常,那么剔除它或者人工修改数据异常都是很有用的
- 如果一些实例中缺少一些特征,那就要决定是忽略这些缺失的属性、忽略这个样本、将缺失的数据补齐还是训练两个模型,一个包含这些特征,另一个不包含,如此种种。
不相关的特征
训练数据只有包含了足够多的的相关特征,而不是不相关特征,系统才能不断的“学习”。机器学习项目成功的关键就是要在足够好的特征上进行训练。这个过程被称为特征工程,包括:
- 特征选择:在多种特征中荀泽最有用的特征进行训练
- 特征抽取:将已存在的特征组合成一个更有用的特征
- 通过收集新数据来创造新的特征
接下来介绍“坏算法”的例子。
过拟合训练数据
假设你在一个完全陌生的国家乘坐出租车,司机抢劫了你,你就会觉得这个国家的所有的司机都是贼。以偏概全是人类通常会犯的错误,不幸的是,如果我们不足够小心,机器学习也会陷入同样的陷阱,这被称作“过拟合”,通常是指模型在训练集上表现的很好,但是泛化效果却欠佳。
图1-22就是高阶多项式拟合的幸福指数模型,由图可见,虽然它在训练集上拟合的很好,但是你真的相信这个模型的预测么?
图1-22 过拟合训练数据
复杂模型,如深度神经网络等,可以检测到数据中的微妙的模型,但是如果数据中噪声较多,或者数据集过小,模型就很可能检测到噪声中的模型,显然这样的模型不可能泛化的很好。比如在上边的生活幸福指数的例子中,如果在模型中假设幸福指数与国家的名字有关,那么复杂模型就可能会发现名字中含有w的国家的幸福指数都超过7,那这个模型对卢旺达和津巴布韦怎么解释?显然,“名字中含有w的国家的媳妇指数都超过7”这件事情在纯属偶然,但是模型却无法判断哪些特征是真的,哪些是噪声。
警告:当模型相对训练数据的数量和噪声而言过于复杂时,就会发生过拟合。通常的解决途径