您是否需要一些有助于开发成功机器学习应用程序的技巧和窍门?
这是 2012 年一篇题为《关于机器学习的几个有用知识》(PDF)的期刊文章的主题,作者是华盛顿大学教授 Pedro Domingos。
这是一篇有趣的读物,开头很有吸引力
开发成功的机器学习应用程序需要大量的“黑魔法”,这在教科书中很难找到。
本文总结了他文章中概述的机器学习研究人员和实践者学到的 12 个关键课程。

关于机器学习需要知道的有用事情
摄影:jeffreyw,保留部分权利。
1. 学习 = 表示 + 评估 + 优化
面对机器学习算法时,不要纠结于您可能使用的数百种可能的机器学习算法。
关注三个关键组成部分:
- 表示。您选择的分类器定义了解决方案将采用的表示形式以及所有可学习分类器的空间,称为假设空间。例如,实例、超平面、决策树、规则集和神经网络。
- 评估。您将用于判断一个分类器好坏的评估函数。这可能是算法内部使用的损失函数。例如,准确率、平方误差、似然度和信息增益。
- 优化。搜索好分类器的方法。这是算法在评估函数上下文中遍历假设空间以获得能够做出准确预测的最终分类器的内部方式。例如,组合优化和连续优化,以及它们的子集。
2. 泛化才重要
机器学习的根本目标是泛化到训练集之外的示例。
我们必须预期不会再遇到与训练集中的示例相同的样本。仅评估模型在训练集上的准确率,几乎无法了解模型在未见过的数据上的有用性。
注意不要用测试数据污染训练过程。在训练数据集上使用交叉验证,并创建一个留出集进行最终验证。
我们必须使用训练误差作为测试误差的代理,但这充满危险。
3. 仅有数据是不够的
仅有数据是不够的,无论您拥有多少数据。
为了泛化到数据之外,每个学习器都必须包含超出其接收到的数据的一些知识或假设。
我们必须做出假设。这些假设会产生偏差,但能让我们避免“没有免费的午餐”的陷阱,并让我们对正在处理的问题做出一些假设。
我们在分类器中做出的简单假设让我们走得很远,例如:
- 误差函数的平滑性
- 相似的示例具有相似的类别
- 有限的依赖性
- 有限的复杂度
归纳(机器学习方法使用的学习类型)将少量数据转化为大量的输出知识。它比演绎更强大。归纳需要少量知识作为输入,我们必须有效地利用它。
例如
- 如果我们对我们的领域中使示例相似的原因有很多了解,我们可以使用实例方法。
- 如果我们了解概率依赖性,我们可以使用图模型。
- 如果我们知道每个类需要哪些先决条件,我们可以使用规则集。
机器学习不是魔法,它无法凭空变出东西。它所做的是以更少换取更多。
4. 过拟合有多种表现形式
我们必须警惕学习训练数据中的随机波动。这被称为过拟合,当训练数据的准确率很高,而测试数据集的准确率很低时,就可以识别出来。
泛化误差可分解为偏差和方差
- 偏差是学习器学习错误事物的倾向。线性学习器具有高偏差,因为它仅限于使用超平面来分离类别。
- 方差是学习器学习随机事物而不考虑真实信号的倾向。决策树具有高方差,因为它们高度受训练数据细节的影响。
有时,强烈的错误假设(请阅读偏差)可能比薄弱的真实假设更好,这解释了为什么具有强烈独立性假设的朴素贝叶斯模型可以比强大的决策树(如 C4.5)做得更好,而 C4.5 需要更多数据来避免过拟合。
- 交叉验证有帮助,但如果我们检查得太频繁并最终过度拟合整个训练数据集,则可能会导致问题。
- 正则化可以通过惩罚更复杂的分类器来提供帮助。
- 统计显著性检验可以帮助确定变化是否是有意义的变化。
很容易通过陷入欠拟合(偏差)的相反错误来避免过拟合(方差)。同时避免两者都需要学习一个完美的分类器,而在事先知道它的情况下,没有单一的技术总是能做得最好(没有免费的午餐)。
有关更多信息,请参阅维基百科上的偏差-方差权衡条目。
5. 直觉在高维空间中失效
机器学习中的第二个最大问题是维度灾难。
Domingos 总结得很好:
随着示例维数(特征数)的增加,正确泛化变得指数级困难,因为固定大小的训练集仅覆盖了输入空间的一小部分。
基于相似性的推理在高维空间中会很快失效。在高维空间中,所有示例看起来都差不多。我们的直觉也会失效,例如试图理解多元高斯分布的均值。
反制这些问题的效应被称为“非均匀性祝福”(我认为是 Domingos 的术语)。这指的是来自现实世界域的观测值通常不是均匀分布的,而是以有益且有意义的方式分组或聚类的。
6. 理论保证并非如你所见
理论保证应持保留态度。
示例包括
- 算法要保证良好泛化所需的样本数量。
- 给定无限数据,算法保证输出正确的分类器。
如果您不是来自理论机器学习背景,这一课可能看起来有些深奥。Domongos 总结得很好:
机器学习中理论保证的主要作用不是作为实际决策的标准,而是作为算法设计理解和驱动力的来源。
7. 特征工程是关键
导致机器学习项目成败最大的因素是使用的特征。
当所有特征都与类别相关时,学习很容易,但更常见的是类别是特征的复杂函数。
机器学习不是一次性构建数据集和运行学习器的过程,而是一个迭代的过程:运行学习器、分析结果、修改数据和/或学习器,然后重复。
原始数据通常不包含足够的结构供学习算法使用,必须从可用数据中构建特征,以便更好地向算法暴露结构。因此,特征工程通常是领域特定的。
一种方法是生成大量特征,然后选择与类别最相关的特征。这可能效果很好,但要避免忽略目标变量可能存在的有用的特征内非线性关系。
有关特征工程的更多信息,请参阅博文:发现特征工程,如何进行特征工程以及如何擅长它。
8. 更多数据胜过更聪明的算法
当您达到极限仍需要更好的结果时,您有两个选择:
- 设计更好的学习算法
- 收集更多数据(更多观测值和/或更多特征)
获得更好结果的最快途径通常是获取更多数据。
经验法则是,一个拥有海量数据的笨拙算法胜过一个拥有适量数据的聪明算法。
计算机科学受时间和内存的限制,机器学习增加了第三个约束,即训练数据。
如今,我们拥有的数据常常超过我们能使用的量。复杂的分类器可能需要太长时间才能训练,或者在大规模下效果不佳。这意味着在实践中,我们更常使用更简单的分类器。此外,在大规模下,大多数分类器都能获得非常相似的结果。
所有学习器基本上通过将附近的示例分组到同一类别来工作;关键区别在于“附近”的含义。
一般来说,在更复杂的算法之前使用更简单的算法。从算法使用的参数或项的数量方面考虑复杂度。
9. 学习多个模型,而非一个
不要选择一个喜欢的算法并对其问题进行过度优化。尝试多种不同的算法,然后将它们集成起来以获得最佳结果。
在机器学习的早期,每个人都有自己喜欢的学习器,并且有一些先验的理由相信其优越性。
考虑更仔细地研究三种最流行的集成方法:
- Bagging:生成训练数据的不同样本,在每个样本上准备一个学习器,并通过投票组合预测。
- Boosting:在训练过程中对训练实例按难度加权,以特别关注那些难以分类的实例。
- Stacking:使用更高级别的分类器来学习如何最好地组合其他分类器的预测。
10. 简单并不意味着准确
选择两个具有相同训练误差的分类器中更简单的那个是一个很好的经验法则。更简单的分类器在测试数据集上的准确率不一定最佳。
一个也许更有趣的观点是,从每个分类器的假设空间大小来看待复杂度。即每个算法可能生成的分类器空间。更大的空间可能采样不足,并且产生的分类器可能不太可能被过度拟合到训练数据。
结论是,应该偏好更简单的假设,因为简洁本身就是一种美德,而不是因为与准确率存在假设的联系。
11. 可表示不等于可学习
与选择喜欢的算法类似,实践者可能会陷入选择喜欢的表示的陷阱,并用通用近似的理论声明来证明(例如,它可以用于近似任何任意目标函数)。
鉴于有限的数据、时间和内存,标准学习器只能学习所有可能函数的一小部分,而具有不同表示的学习器的这些子集是不同的。
关注目标函数是否可学习的问题,而不是是否可表示。
12. 相关不等于因果
分类器只能学习相关性。它们本质上是统计性的。
预测模型所做的预测旨在帮助人类在只能获得历史观测且无法进行受控实验的复杂领域中做出决策。
有趣的是,相关性可以是因果关系的指南,并且可以作为调查的起点。
总结
在本文中,我们回顾了 Domingos 2012 年的论文中概述的机器学习研究人员和实践者学到的 12 个教训。
这些教训再次是:
- 学习 = 表示 + 评估 + 优化
- 泛化才重要
- 仅有数据是不够的
- 过拟合有多种表现形式
- 直觉在高维空间中失效
- 理论保证并非如你所见
- 特征工程是关键
- 更多数据胜过更聪明的算法
- 学习多个模型,而非一个
- 简单并不意味着准确
- 可表示不等于可学习
- 相关不等于因果
您可以下载原始论文的 PDF,题为《关于机器学习的几个有用知识》。
Domingos 也是 Coursera 上一门在线机器学习课程“机器学习”的作者,该课程据推测在华盛顿大学录制。可以通过点击“预览课程”按钮免费观看所有课程视频。
最后,Domingos 的新书名为《终极算法:对终极学习机器的追求将如何重塑我们的世界》。我的副本今天已送达。
很棒的帖子,期待更多!谢谢!
谢谢。对我帮助很大。继续努力。
Sami,不客气。