# 机器学习的有用知识

> 原文： [https://machinelearningmastery.com/useful-things-to-know-about-machine-learning/](https://machinelearningmastery.com/useful-things-to-know-about-machine-learning/)

您是否想要一些有助于开发成功的机器学习应用程序的技巧和窍门？

这是 2012 年一篇题为“[关于机器学习的一些有用的东西](http://www.cs.washington.edu/homes/pedrod/papers/cacm12.pdf)”（PDF）的期刊文章的主题，由 Wash of Washing 教授 [Pedro Domingos](http://homes.cs.washington.edu/~pedrod/) 。

这是一个有趣的阅读，有一个很好的开放钩子：

> 开发成功的机器学习应用程序需要大量的“黑色艺术”，这在教科书中很难找到

这篇文章总结了他的文章中概述的机器学习研究人员和从业者所学到的 12 个主要经验教训。

![Useful Things To Know About Machine Learning](img/1b09dc0a19bc6ff0931c398e49f68bb6.jpg)

有用的事情要了解机器学习
照片由 [jeffreyw](https://www.flickr.com/photos/jeffreyww/6310914828/) ，保留一些权利。

## 1.学习=表达+评估+优化

当面对机器学习算法时，不要使用您可能使用的数百种可能的机器学习算法迷失在杂草中。

专注于三个关键组成部分：

*   **表示**。您选择的分类定义了解决方案将采用的表示以及称为假设空间的所有可学习分类器的空间。示例包括实例，超平面，决策树，规则集和神经网络。
*   **评估**。您将用于从错误的分类器判断良好分类器的评估函数。这可能是算法内部使用的损失函数。示例包括准确，平方误差，可能性和信息增益。
*   **优化**。搜索好分类器的方法。这在内部是如何算法在评估函数的上下文中遍历假设空间到能够进行准确预测的最终分类器。示例包括组合优化和连续优化及其子集。

## 重要的是概括

> 机器学习的基本目标是概括超出训练集中的示例。

我们必须期望不再遇到与训练集中的样本相同的样本。单独评估模型在训练集上的准确率几乎不能说明模型对看不见的数据的有用性。

注意不要用测试数据污染训练过程。在训练数据集上使用交叉验证，并为最终验证创建保留集。

> 我们必须使用训练错误作为测试错误的替代，这充满了危险。

## 仅数据还不够

无论你拥有多少数据，仅靠数据是不够的。

> 每个学习器必须在其给出的数据之外体现一些知识或假设，以便超越它。

我们必须做出假设。这些产生了偏见，但让我们避免了没有免费午餐的陷阱，也没有假设我们正在解决的问题。

我们在分类器中做出的简单假设使我们走了很长的路，例如：

*   误差函数的平滑度
*   类似的例子有类似的类
*   有限的依赖
*   复杂性有限

归纳（机器学习方法所使用的学习类型）将少量数据转化为大量的输出知识。它比演绎更强大。归纳需要少量的知识作为输入，我们必须有效地使用它。

例如：

*   如果我们对在域中使示例类似的内容有很多了解，我们可以使用实例方法。
*   如果我们了解概率依赖性，我们可以使用图形模型。
*   如果我们知道每个类需要哪些前提条件，我们就可以使用规则集。

> 机器学习并不神奇;它无法从无到有。它的作用是从更少的东西中获得更多。

## 过拟合有很多面孔

我们必须谨慎地学习训练数据中的随机波动。这称为过拟合，当训练数据的准确度较高且测试数据集较低时，可以识别。

泛化错误可以分解为偏差和方差：

*   **偏见**是学习器学习错误的倾向。线性学习器具有高偏差，因为它仅限于使用超平面分离类。
*   **方差**是学习器倾向于学习随机事物而不管真实信号。决策树具有很大的差异，因为它们受到训练数据中细节的高度影响。

有时强大的错误假设（读取偏差）可能比弱假设更好，这解释了为什么具有强独立性假设的朴素贝叶斯能够比像 C4.5 这样需要更多数据以避免过拟合的强大决策树做得更好。

*   交叉验证有帮助，但如果我们经常检查并最终过拟合整个训练数据集，则会导致问题。
*   正规化可以通过惩罚更复杂的分类器来提供帮助。
*   统计显着性检验可以帮助确定变化是否是有意义的变化。

> 通过陷入欠拟合（偏差）的相反误差，很容易避免过拟合（方差）。同时避免两者都需要学习一个完美的分类器，并且事先不知道它没有一种技术总能做到最好（没有免费的午餐）。

有关更多信息，请参阅 [Bias-variance 权衡](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff)上的维基百科条目。

## 5.直觉在高维度上失败

机器学习中的第二大问题是[维数诅咒](https://en.wikipedia.org/wiki/Curse_of_dimensionality)。

多明戈斯很好地说明了这一点：

> 随着示例的维度（特征的数量）的增加，正确地推广变得指数级更难，因为固定大小的训练集覆盖了输入空间的逐渐减少的部分。

基于相似性的推理在高维空间中迅速崩溃。在高维度上，所有示例看起来都相似。我们的直觉也会崩溃，例如试图理解多元高斯分布中的均值。

反击这种问题的效果被称为“_ 非均匀性 _ 的祝福”（我认为是多明戈斯的术语）。这指的是这样一个事实，即来自现实世界域的观察结果通常不是均匀分布的，而是以有用和有意义的方式进行分组或聚类。

## 6.理论上的保证不是它们看起来的样子

应该用大量的盐来理论保证。

例子包括：

*   算法确保良好泛化所需的样本数。
*   给定无限数据，算法保证输出正确的分类器。

如果您不是理论机器学习背景，那么这一课可能看起来很深奥。 Domongos 很好地总结了它：

> 理论保证在机器学习中的主要作用不是作为实际决策的标准，而是作为算法设计的理解和推动力的源泉。

## 7.特征工程是关键

使机器学习项目失败并成功的最大区别的因素是所使用的功能。

当所有特征与类相关时，学习很容易，但更常见的是类是功能的复杂功能。

> 机器学习不是构建数据集和运行学习器的一次性过程，而是运行学习器，分析结果，修改数据和/或学习器以及重复的迭代过程

原始数据通常不包含用于学习算法的足够结构，必须从可用数据构造特征以更好地将结构暴露给算法。因此，特征工程通常是特定于域的。

一种方法是生成大量特征并选择与该类最相关的特征。这可以很好地工作，但陷阱是忽略与输出变量有用的特征内非线性关系的可能性。

有关特征工程的更多信息，请参阅帖子：[发现特征工程，如何设计特征以及如何获得它](http://machinelearningmastery.com/discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/)

## 8.更多数据胜过更聪明的算法

当您达到限制但仍需要更好的结果时，您有两种选择：

*   设计更好的学习算法
*   收集更多数据（更多观察和/或更多功能）

获得更好结果的最快途径通常是获取更多数据。

> 根据经验，具有大量数据的愚蠢算法胜过一个具有适度数量的聪明算法。

计算机科学受时间和记忆的限制，机器学习增加了第三个约束，即训练数据。

今天我们经常拥有的数据超出了我们的使用范围。复杂的分类器可能需要很长时间才能进行训练或者无法大规模运作。这意味着在实践中使用更简单的分类器。此外，大规模地，大多数分类器实现非常相似的结果。

> 所有学习器基本上都是通过将附近的例子分组到同一个班级来工作;关键的区别在于“附近”的含义。

通常，在更复杂的算法之前使用更简单的算法。根据算法使用的参数或术语数量来看复杂性。

## 9.学习很多模型，而不只是一个

不要选择一个喜欢的算法并优化它来解决你的问题。尝试许多不同的算法然后将它们组合在一起以获得最佳结果。

> 在机器学习的早期，每个人都有他们最喜欢的学习器，以及一些先验理由相信它的优越性。

考虑采取三种最流行的合奏方法：

*   **Bagging** ：生成不同的训练数据样本，为每个训练数据做好准备，并使用投票结合预测。
*   **提升**：在训练期间通过他们的难度训练实例，特别关注那些难以分类的实例。
*   **堆叠**：使用更高级别的分类器来学习如何最好地组合其他分类器的预测。

## 10.简单并不意味着准确率

选择具有相同训练误差的两个分类器的简单是一个很好的经验法则。更简单的分类器并不总是在测试数据集上具有最佳精度。

或许更有趣的观点是考虑每个分类器的假设空间大小的复杂性。这是每个算法可以生成的可能分类器的空间。较大的空间可能被采样较少，并且所得到的分类器可能不太可能过拟合到训练数据。

> 结论是，更简单的假设应该是首选，因为简单本身就是一种美德，而不是因为与准确率的假设联系。

## 11.代表性并不意味着可以学习

与挑选最喜欢的算法相关，从业者可以陷入挑选最喜欢的表示的陷阱并且用通用近似的理论声明来证明它（例如，它可以用于近似任意目标函数）。

> 给定有限的数据，时间和记忆，标准学习器只能学习所有可能功能的一小部分，并且这些子集对于具有不同表示的学习器是不同的。

关注可以学习目标函数的问题，而不是它的表现。

## 12.相关性并不意味着因果关系

分类器只能学习相关性。它们具有统计性​​质。

预测模型所做的预测旨在帮助复杂领域的人类决策，其中只有历史观察可用且无法进行对照实验。

有趣的是，相关性可以作为因果关系的指南，并可以作为调查的起点。

## 摘要

在这篇文章中，我们查看了多明戈斯 2012 年论文中概述的机器学习研究人员和从业者所学到的 12 个经验教训。

那些教训再次是：

1.  学习=表达+评估+优化
2.  重要的是概括
3.  仅凭数据还不够
4.  过拟合有很多面孔
5.  直觉在高维度上失败
6.  理论上的保证不是他们看起来的
7.  特征工程是关键
8.  更多数据胜过更聪明的算法
9.  学习很多模型，而不只是一个
10.  简单并不意味着准确率
11.  可代表性并不意味着可以学习
12.  相关并不意味着因果关系

您可以下载一份 PDF 文件，题为“[一些有用的机器学习知识](http://www.cs.washington.edu/homes/pedrod/papers/cacm12.pdf)”。

Domingos 也是一个名为“[机器学习](https://www.coursera.org/course/machlearning)”的课程在线机器学习课程的作者，可能是在华盛顿大学录制的。点击“[预览讲座](https://class.coursera.org/machlearning-001/lecture/preview)”按钮可以免费查看课程的所有视频。

最后，多明戈斯有一本新书名为“[主算法：终极学习机器将如何重建我们的世界](http://www.amazon.com/dp/0465065708?tag=inspiredalgor-20)”。我的副本今天到了。