# 为什么应用机器学习很难

> 原文： [https://machinelearningmastery.com/applied-machine-learning-is-hard/](https://machinelearningmastery.com/applied-machine-learning-is-hard/)

#### 如何处理应用机器学习的难以解决的问题。

应用机器学习具有挑战性。

对于您的具体问题，您必须做出许多已知“_正确答案_”的决定，例如：

*   使用什么框架的问题？
*   要使用哪些输入和输出数据？
*   学习算法使用什么？
*   使用什么算法配置？

对于期望您可以计算或被告知要使用哪些数据或如何最佳配置算法的初学者来说，这是一项挑战。

在这篇文章中，您将发现设计学习系统的难以处理的性质以及如何处理它。

阅读这篇文章后，你会知道：

*   如何为自己和他人制定明确的学习问题定义。
*   在为您的问题设计学习系统时必须考虑的4个决策点。
*   您可以使用3种策略来专门解决在实践中设计学习系统的棘手问题。

让我们开始吧。

## 概观

这篇文章分为6个部分，灵感来自 [Tom Mitchell的](http://www.cs.cmu.edu/~tom/)优秀的1997年书[机器学习](http://amzn.to/2yclAGZ)的第1章;他们是：

1.  良好的学习问题
2.  选择训练数据
3.  选择目标功能
4.  选择目标函数的表示
5.  选择学习算法
6.  如何设计学习系统

## 良好的学习问题

我们可以将应用机器学习领域中的一般学习任务定义为根据特定绩效测量从某些任务的经验中学习的程序。

Tom Mitchell在其1997年出版的“机器学习”一书中明确指出：

> 据说计算机程序从经验E中学习关于某类任务T和表现测量P，如果其在T中的任务中的表现（由P测量）随经验E而改善。

- 第2页，[机器学习](http://amzn.to/2yclAGZ)，1997。

我们将此作为我们可能对应用机器学习感兴趣的学习任务类型的一般定义，例如预测性建模。 Tom列举了几个例子来说明这一点，例如：

*   学会识别口语。
*   学习驾驶自动驾驶汽车。
*   学习分类新的天文结构。
*   学习玩世界级的步步高。

我们可以使用上面的定义来定义我们自己的预测性建模问题。一旦定义，任务就变成了设计学习系统来解决它的任务。

设计学习系统，即机器学习的应用，涉及四种设计选择：

1.  选择训练数据。
2.  选择目标函数。
3.  选择表示。
4.  选择学习算法。

在给定无限资源的情况下，您可以为给定问题做出最佳选择，但我们没有无限的时间，计算资源以及有关域或学习系统的知识。

因此，虽然我们可以准备一个[适当的](https://en.wikipedia.org/wiki/Well-posed_problem)学习问题的描述，但设计最好的学习系统是[难以处理的](https://en.wikipedia.org/wiki/Computational_complexity_theory#Intractability)。

我们所能做的最好的事情就是利用知识，技能和可用资源来完成设计选择。

让我们更详细地看一下这些设计中的每一个。

## 选择训练数据

您必须选择学习系统将用作学习经验的数据。

这是过去观察的数据。

> 可用的训练体验类型会对学习器的成功或失败产生重大影响。

- 第5页，[机器学习](http://amzn.to/2yclAGZ)，1997。

它很少格式化并且可以随时使用;通常，您必须收集所需的数据（或认为您可能需要）以解决学习问题。

这可能意味着：

*   刮痧文件。
*   查询数据库。
*   处理文件。
*   整理不同的来源
*   合并实体。

您需要将所有数据放在一起并形成标准化形式，以便一个观察代表一个可获得结果的实体。

## 选择目标功能

接下来，您必须选择学习问题的框架。

机器学习实际上是学习从输入（X）到输出（y）的映射函数（f）的问题。

```py
y = f(X)
```

然后，此函数可用于将来的新数据，以预测最可能的输出。

学习系统的目标是准备一个功能，在给定可用资源的情况下，将输入最佳地映射到输出。实际存在的基础功能是未知的。如果我们知道这个函数的形式，我们可以直接使用它，我们不需要机器学习来学习它。

更一般地，这是一个称为函数逼近的问题。结果将是近似值，意味着它将有错误。我们将尽最大努力将此错误降至最低，但在给定数据噪声的情况下，总会存在一些错误。

> ......在这种情况下，我们将学习任务减少到发现理想目标函数V的操作描述的问题。一般来说，完全学习V的这种操作形式可能是非常困难的。实际上，我们经常期望学习算法仅获得对目标函数的一些近似，因此学习目标函数的过程通常被称为函数逼近。

- 第8页，[机器学习](http://amzn.to/2yclAGZ)，1997。

该步骤是关于准确选择要用作该函数的输入的数据，例如，输入特征或输入变量以及准确预测的内容，例如输出变量。

通常，我将此称为学习问题的框架。选择输入和输出基本上选择了我们将寻求近似的目标函数的性质。

## 选择目标函数的表示

接下来，您必须选择要用于映射功能的表示。

将此视为您希望拥有的最终模型类型，然后您可以使用它来做出预测。您必须选择此模型的形式，数据结构（如果您愿意）。

> 现在我们已经指定了理想的目标函数V，我们必须选择一个学习程序将用来描述它将学习的函数Vprime的表示。

— Page 8, [Machine Learning](http://amzn.to/2yclAGZ), 1997.

例如：

*   也许您的项目需要一个易于理解并向利益相关者解释的决策树。
*   也许您的利益相关者更喜欢统计人员可以轻松解释的线性模型。
*   也许您的利益相关者不关心模型表现以外的任何事情，因此所有模型表示都可以争夺。

表示的选择将对可用于学习映射函数的学习算法类型施加约束。

## 选择学习算法

最后，您必须选择将获取输入和输出数据的学习算法，并学习您首选表示的模型。

如果通常情况下对表示选择的限制很少，那么您可以评估一套不同的算法和表示。

如果对功能表示的选择存在强烈限制，例如加权和线性模型或决策树，然后算法的选择将限于那些可以对特定表示进行操作的算法。

算法的选择可能会产生自己的约束，例如特定的数据准备变换，如数据规范化。

## 如何设计学习系统

开发学习系统具有挑战性。

在此过程中，没有人可以告诉你每个决定的最佳答案;对于您的特定学习问题，最佳答案是未知的。

Mitchell帮助澄清了这一点，并描述了设计学习系统以进行跳棋的选择。

![Depiction of Choices in Designing a Checker-Playing Learning System](img/de821f1cb6c18d39cbdd6bfc32f986f0.jpg)

设计棋盘游戏学习系统的选择描述。
取自“机器学习”，1997年。

这些选择充当了设计过程的约束点。米切尔继续说：

> 这些设计选择以多种方式限制了学习任务。我们已将可获得的知识类型限制为单个线性评估函数。此外，我们将此评估功能限制为仅依赖于所提供的六个特定板功能。如果真正的目标函数V确实可以通过这些特定特征的线性组合来表示，那么我们的程序很有可能学习它。如果没有，那么我们所希望的最好的是它将学习一个很好的近似，因为一个程序肯定永远不会学到任何它至少不能代表的东西。

- 第13-14页，[机器学习](http://amzn.to/2yclAGZ)，1997年。

我喜欢这段经文，因为它确实推动了这些约束对于简化问题的重要性，以及做出限制或阻止系统充分了解问题的选择的风险。

通常，您不能分析地计算这些选择的答案，例如：要使用的数据，要使用的算法或要使用的算法配置。

尽管如此，一切都不会丢失;这里有3种可以在实践中使用的策略：

1.  **复制**。查看文献或专家，了解与您的问题相同或类似问题的学习系统，并复制学习系统的设计。您很可能不是第一个处理给定类型问题的人。在最糟糕的情况下，复制的设计为您自己的设计提供了一个起点。
2.  **搜索**。列出每个决策点的可用选项，并根据实际情况对每个决策点进行评估，以了解哪些方法最适合您的特定数这可能是应用机器学习中最强大和最实践的方法。
3.  **设计**。通过上面的复制和搜索方法完成许多项目后，您将开发出如何设计机器学习系统的直觉。

发展学习系统不是一门科学;这是工程。

开发新的机器学习算法并描述它们如何以及为什么工作是一门科学，在开发学习系统时通常不需要这样做。

开发学习系统很像开发软件。您必须结合（1）过去设计的工作副本，（2）显示有希望的结果的原型，以及（3）开发新系统以获得最佳结果时的设计经验。

## 进一步阅读

如果您希望深入了解，本节将提供有关该主题的更多资源。

*   第1章，[机器学习](http://amzn.to/2yclAGZ)，1997。
*   [Tom Mitchell的主页](http://www.cs.cmu.edu/~tom/)
*   [维基百科问题很好](https://en.wikipedia.org/wiki/Well-posed_problem)
*   [维基百科上的难以理解](https://en.wikipedia.org/wiki/Computational_complexity_theory#Intractability)
*   [如何定义机器学习问题](https://machinelearningmastery.com/how-to-define-your-machine-learning-problem/)
*   [应用机器学习过程](https://machinelearningmastery.com/start-here/#process)

## 摘要

在这篇文章中，您发现了在应用机器学习中设计学习系统的难以处理的性质以及如何处理它。

具体来说，你学到了：

*   如何为自己和他人制定明确的学习问题定义。
*   在为您的问题设计学习系统时必须考虑的4个决策点。
*   您可以使用3种策略来专门解决在实践中设计学习系统的棘手问题。

你有任何问题吗？
在下面的评论中提出您的问题，我会尽力回答。