# 如何使用机器学习清单可靠地获得准确的预测（即使您是初学者）

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

如何在问题出现后使用机器学习获得准确的结果？

困难在于每个问题都是独特的，需要不同的数据源，特征，算法，算法配置等等。

解决方案是使用每次都能保证良好结果的清单。

在这篇文章中，您将发现一个清单，您可以使用该清单可靠地获得有关机器学习问题的良好结果。

![Machine Learning Checklist](img/f04f6f6b35c099974ee7a29b13bf03dc.jpg)

机器学习清单
照片由 [Crispy](https://www.flickr.com/photos/37333113@N03/14742904577/) 拍摄，部分版权所有。

## 每个数据问题都不同

在开始之前，您不知道哪种算法最能解决问题。

即使专家数据科学家也无法告诉你。

该问题不限于机器学习算法的选择。您无法知道哪些数据转换以及数据中哪些特征如果暴露出来最能将问题的结构呈现给算法。

你可能有一些想法。你也可能有一些喜欢的技巧。但是你怎么知道上次让你获得成绩的技术会让你获得好成绩呢？

您怎么知道这些技术可以从一个问题转移到另一个问题？

启发式算法是一个很好的起点（[随机森林在大多数问题上做得很好](http://machinelearningmastery.com/use-random-forest-testing-179-classifiers-121-datasets/)），但它们就是这样。一个起点，而不是结束。

## 在每个问题上都不要从零开始

您不需要从零开始解决每个问题。

就像您可以使用机器学习工具或库来利用机器学习的最佳实践实现一样，您应该利用最佳实践来解决问题。

另一种方法是每次遇到新问题时都必须补偿。结果是您忘记或跳过关键步骤。你花费的时间比你需要的时间长，你得到的结果不太准确，你可能没有那么有趣。

你怎么知道你已经完成了机器学习问题，除非你已经定义了解决方案并且预先使用它？

## 如何可靠地获得准确的结果

您可以可靠地获得有关机器学习问题的准确结果。

首先，这是一个经验问题。什么算法？什么属性？你必须考虑可能性并尝试它们。你必须尝试找到这些问题的答案。

将每个数据集视为搜索问题。找到一个可以产生良好结果的组合。您花费在搜索上的时间与结果的好坏有关。但是有一个拐点，你可以从大量收益转向收益递减。

换句话说，数据准备，数据变换，模型选择，模型调整，集成等选择是一个组合问题。有许多组合可行，甚至有许多组合足够好。

通常你不需要最好的解决方案。事实上，最好的解决方案可能是你不想要的。找到它可能是昂贵的，它可能对数据中的扰动很脆弱，并且很可能是过拟合的产物。

您需要一个好的解决方案，足以满足您正在处理的问题的特定需求。通常，足够好的解决方案是快速，廉价和强大的。这是一个更容易解决的问题。

此外，如果您认为自己需要最佳解决方案，则可以使用足够好的解决方案作为第一个检查点。

这个简单的重构从“_最准确_”到“_足够准确_”结果就是如何保证在你工作的每个机器学习问题上取得好成绩。

## 你需要一个机器学习清单

您可以使用核对表来构建搜索正确元素组合的结构，从而可靠地为任何机器学习问题提供良好的解决方案。

[核对表](https://en.wikipedia.org/wiki/Checklist)是一个保证结果的简单工具。它们一直被用在经验领域，在那里知识很难获得，并且保证结果是非常可取的。

例如在航空中起飞和使用飞行前检查表。此外，在医学与外科检查清单和其他领域，如安全合规性。

有关清单的更多信息，请参阅“[清单宣言：如何正确处理](http://www.amazon.com/dp/0312430000?tag=inspiredalgor-20)”一书。

如果结果很重要，为什么每次都要制作一个流程。遵循一套定义明确的解决方案步骤。

![Aviation Checklist](img/b7879ee4ea43089444a544adc1755178.jpg)

清单是航空日常生活的一部分。
照片由 [Jeffery Wong](https://www.flickr.com/photos/jaydubproductions/3707263569) 保留一些权利。

### 机器学习清单的好处

使用清单来解决机器学习问题的5个好处是：

*   **减少工作量**：您不必考虑所有技术来尝试每个新问题。
*   **更好的结果**：通过遵循所有步骤，您可以保证获得良好的结果，可能比平均结果更好。事实上，它可以确保您获得任何结果。许多项目失败的原因有很多。
*   **改进的起点**：你可以将它作为一个起点，并在你想到更多的东西时添加它。而你总是这样做。
*   **未来项目效益**：您所有未来的项目都将受益于该过程的改进。
*   **可自定义流程**：您可以为您的工具，问题类型和首选项设计最佳清单。

机器学习算法非常强大，但将它们视为商品。如果您感兴趣的是准确率，那么您使用的具体问题就会少得多。

事实上，这个过程的每个元素都变成了商品，最喜欢的方法的想法开始逐渐消失。我认为这是解决问题的成熟位置。我认为这可能不适合某些努力，比如学术研究。

学术界对特定算法的投入很大。从业者将算法仅视为结束，预测或预测模型的手段。

## 应用机器学习清单

本节概述了一个清单，您可以使用该清单来解决应用的机器学习问题。

如果您对可以下载并用于下一个问题的清单版本感兴趣，请查看本文的底部。

该清单基于我之前对KDD /数据挖掘过程的应用，适用于应用机器学习。

您可以在帖子“[什么是数据挖掘和KDD](http://machinelearningmastery.com/what-is-data-mining-and-kdd/) ”中了解有关KDD过程的更多信息。您可以在“[处理机器学习问题](http://machinelearningmastery.com/process-for-working-through-machine-learning-problems/)的过程”中了解有关我建议的工作流程的更多信息。

每个点都可以是博客文章，甚至是书。这个清单中有很多细节被压缩。我试图在推理中加入链接，并在适当的地方进一步阅读。

我错过了一些重要的事吗？请在评论中告诉我。

[![Machine Learning for Programmers - Select Tools](img/e8ee3b384634f311cc805035a204e77b.jpg)](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2015/08/Machine-Learning-for-Programmers-Select-Tools-e1439699936331.png)

将您首选的机器学习工具映射到您选择的系统过程，以解决问题。

### 关于此示例清单的注释

为简洁起见，此示例受到严格限制。事实上，认为它是一个示范或原理证明，而不是所有机器学习问题的真实清单 - 它故意不是。

对于处理表格数据的分类问题，我已经限制了这个清单。

另外，为了保持可消化性，我将抽象水平保持在合理的高水平，并将大多数部分限制为三个点。

有时这还不够，所以我给出了数据转换和算法的具体示例，以便在清单的某些部分进行尝试，称为插入。

让我们潜入。

### 1.定义问题

在触摸任何数据或算法之前，必须对问题有一个很好的理解。这将为您提供解释结果的工具以及解决方案将采用何种形式的愿景。

您可以在帖子“[如何定义您的机器学习问题](http://machinelearningmastery.com/how-to-define-your-machine-learning-problem/)”中深入了解清单的这一部分。

#### 1.1问题是什么？

本节旨在捕捉问题的明确陈述，以及可能已经设定的任何期望和可能存在的偏差。

*   非正式地和正式地定义问题。
*   列出有关问题的假设（例如关于数据）。
*   列出与您的问题类似的已知问题。

#### 1.2为什么需要解决问题？

本节旨在捕捉解决问题的动机，并强制预先考虑预期结果。

*   描述解决问题的动机。
*   描述解决方案的好处（模型或预测）。
*   描述如何使用该解决方案。

#### 1.3如何手动解决问题？

本节旨在清除任何剩余的领域知识，并帮助您评估是否真的需要机器学习解决方案。

*   描述问题目前是如何解决的（如果有的话）。
*   描述主题专家如何进行手动预测。
*   描述程序员如何手动编写分类器代码。

### 2.准备数据

了解您的数据是您应该花费大部分时间的地方。

您对数据的理解越好，您可以做的更好的工作就是将其固有的结构暴露给要学习的算法。

深入研究“[如何为机器学习准备数据](http://machinelearningmastery.com/how-to-prepare-data-for-machine-learning/)”和“[机器学习问题的快速和脏数据分析](http://machinelearningmastery.com/quick-and-dirty-data-analysis-for-your-machine-learning-problem/)”中的核对清单的这一部分。

#### 2.1数据描述

本节旨在强制您考虑所有可用和不可用的数据。

*   描述可用数据的范围。
*   描述不可用但可取的数据。
*   描述您不需要的可用数据。

#### 2.2数据预处理

本节旨在将原始数据组织到您可以在建模工具中使用的表单中。

*   格式化数据，使其处于可以使用的形式。
*   清理数据，使其统一和一致。
*   对数据进行采样，以便最好地权衡冗余和问题保真度。

#### 插曲：数据采样的候选名单

在最后的采样检查中可能需要解开很多东西。

这里有两个重要问题：

1.  **示例实例**：创建一个数据样本，该样本既代表各种属性密度，又足够小，可以快速构建和评估模型。通常它不是一个样本，而是许多样本。例如，一个用于子分钟模型评估，一个用于亚小时，一个用于子日，依此类推。更多数据可以改变算法的表现。
2.  **样本属性**：选择最能将数据中的结构暴露给模型的属性。不同的模型有不同的要求，真正不同的偏好，因为有时打破“_要求_”给出更好的结果。

以下是您可以用来对数据进行采样的不同方法的一些想法。不要选择，依次使用每个，并让测试工具的结果告诉您使用哪种表示。

*   随机或分层样本
*   按类重新平衡实例（更多关于重新平衡方法）
*   删除异常值（更多关于异常值方法）
*   删除高度更正的属性
*   应用降维方法（主要组件或t-SNE）

#### 2.3数据转换

本节旨在创建数据的多个视图，以便在以后的步骤中将更多的数据问题结构暴露给建模算法。

*   创建所有属性的线性和非线性转换
*   将复杂属性分解为其组成部分。
*   将非规范化属性聚合为更高阶的数量。

#### 插曲：数据转换的候选名单

您可以使用的数据转换数量有限。您还可以使用旧的收藏夹作为起点来帮助弄清楚是否值得探索特定的途径。

下面列出了您可以使用的一些单变量（单属性）数据转换。

*   广场和立方体
*   平方根
*   标准化（例如0均值和单位方差）
*   标准化（例如重新缩放为0-1）
*   描述（例如将真实转换为分类）

你应该使用哪些？所有这些反过来，再次让您的测试工具的结果告知您问题的最佳转换。

#### 2.4数据摘要

本节旨在清除数据中的任何明显关系。

*   创建每个属性的单变量图。
*   使用每个其他属性创建每个属性的双变量图。
*   使用类变量创建每个属性的双变量图

### 3.抽查算法

现在是时候开始构建和评估模型了。

要深入了解清单的这一部分，请参阅帖子“[如何评估机器学习算法](http://machinelearningmastery.com/how-to-evaluate-machine-learning-algorithms/)”和“[为什么你应该在机器学习问题](http://machinelearningmastery.com/why-you-should-be-spot-checking-algorithms-on-your-machine-learning-problems/)上进行采样检查算法”。

#### 3.1创建测试工具

本节旨在帮助您定义用于模型评估的可靠方法，该方法可以可靠地用于比较结果。

*   创建保留验证数据集以供日后使用。
*   评估并选择适当的测试选项。
*   选择用于评估模型的一个（或一小组）表现度量。

#### 3.2评估候选算法

本节旨在快速了解问题的可学习性，以及哪些算法和数据视图可能有助于下一步的进一步调查。

*   选择要评估的各种算法（10-20）。
*   使用通用或标准算法参数配置。
*   在每个准备好的数据视图上评估每个算法。

#### 插曲：短名单算法尝试分类问题

坦率地说，列表与点检查策略无关，也不与您喜欢的算法一致。

然而，如果你正在处理一个分类问题，那么可以使用很好的混合算法来对问题进行建模。例如：

*   基于实例的k-最近邻和学习向量量化
*   更简单的方法，如朴素贝叶斯，逻辑回归和线性判别分析
*   决策树如CART和C4.5 / C5.0
*   复杂的非线性方法，如反向传播和支持向量机
*   总是投入随机森林和梯度提升机器

要获得有关算法的想法，请参阅帖子“[机器学习算法之旅](http://machinelearningmastery.com/a-tour-of-machine-learning-algorithms/)”

### 4.改善结果

此时，您将拥有一个较小的模型池，这些模型已知对问题有效。现在是时候改善结果了。

您可以在帖子“[如何改善机器学习结果](http://machinelearningmastery.com/how-to-improve-machine-learning-results/)”中深入了解清单的这一部分。

#### 4.1算法调整

本节旨在从表现良好的模型中获得最大收益。

*   使用历史上有效的模型参数。
*   搜索模型参数的空间。
*   优化表现良好的模型参数。

#### 4.2集合方法

本节旨在结合表现良好的模型的结果，并进一步提高准确率。

*   在表现良好的模型上使用Bagging。
*   在表现良好的模型上使用Boosting。
*   混合表现良好的模型的结果。

#### 4.3模型选择

本节旨在确保充分考虑模型选择过程。

*   选择表现良好的模型或模型配置的不同子集（5-10）。
*   在保持验证数据集上评估表现良好的模型。
*   选择一个小型池（1-3）表现良好的模型。

### 5.完成项目

我们现在有了结果，回顾问题定义并提醒自己如何充分利用它们。

您可以在“[如何使用机器学习结果](http://machinelearningmastery.com/how-to-use-machine-learning-results/)”的帖子中深入了解清单的这一部分。

#### 5.1目前的结果

本节旨在确保您捕获您所做和所学的内容，以便其他人（以及您未来的自己）可以充分利用它

*   在简短的报告中写下项目（1-5页）。
*   将记录转换为幻灯片以与其他人分享调查结果。
*   与感兴趣的各方分享代码和结果。

#### 5.2实现结果

本节旨在确保您实现预先制定的解决方案承诺。

*   使发现的过程从原始数据调整到结果到操作设置。
*   交付并利用预测。
*   提供并利用预测模型。

## 下载您的机器学习清单

![Machine Learning Checklist](img/10a656cec83aa53a50bbfb91b452576c.jpg)每次开始机器学习问题时都不要重新发明轮子。

使用经过实战检验的机器学习清单，快速可靠地获得准确的结果。

无论您是初学者还是专家，都可以充分利用机器学习。还可以获得独家电子邮件提示和技巧。

## 从此清单中获取最多的提示

我认为这个清单，如果遵循，是一个非常强大的工具。

在本节中，我将向您提供一些其他提示，您可以使用这些提示来充分利用您自己问题的清单。

1.  **简化流程**。第一次尝试时不要做任何事情。选择两种算法进行采样检查，一种数据转换，一种改进结果的方法，等等。完成清单的一个周期，然后开始添加复杂性。
2.  **使用版本控制**。您将创建许多模型和大量脚本（如果您使用的是R或Python）。确保使用版本控制（如 [GitHub](https://github.com/) ）不会失去良好的结果。
3.  **程序化**。没有结果，没有变换，没有可视化是特殊的。一切都应该在程序上创建。如果你正在使用Weka，这可能是你写下的一个过程，如果你使用的是R或Python，它可能是Makefile。你会发现你的东西中的错误，你可能希望能够在一滴一滴的情况下重新生成你所有的结果。如果它从零开始都是程序化的，那就像键入“`make`”一样简单。
4.  **记录所有结果**。我认为每个算法都运行以保存文件中的预测是一种很好的做法。还要将每个数据转换和样本保存在单独的文件中。如果数据作为项目的一部分位于目录中的文件中，则始终可以对数据运行新的分析。如果结果需要数小时，数天或数周才能实现，那么这一点非常重要。这包括交叉验证预测，这些预测可用于更复杂的混合策略。
5.  **不要跳过步骤**。你可以缩短一步，但不要跳过任何步骤，即使你认为你知道这一切。清单的想法是保证结果。医生非常聪明，非常合格，但仍需要提醒他们洗手。有时您可以简单地忘记过程中的关键步骤，这绝对是关键（比如定义您的问题并意识到您甚至不需要机器学习）。

## 我很怀疑，这真的有用吗？

这只是一张清单，而不是银弹。

你仍然需要投入工作。您仍然需要了解算法和数据操作方法以从中获得最大收益。您仍然需要了解您的工具以及如何充分利用它们。

#### 亲自试试吧。

向自己证明可以通过端到端的方式解决问题。一小时内完成。

1.  [选择一个数据集](http://machinelearningmastery.com/practice-machine-learning-with-small-in-memory-datasets-from-the-uci-machine-learning-repository/)。
2.  使用 [Weka](http://machinelearningmastery.com/how-to-run-your-first-classifier-in-weka/) （避免任何编程）。
3.  使用该过程。

一旦获得第一个结果，您将看到它是多么容易以及为什么在问题定义，数据准备和在流程后端提供解决方案时花费大量时间这么重要。

#### 这种方法不会给你带来最好的结果。

该清单可以在问题中可靠，一致地提供良好的结果。

你不会通过这个核对清单赢得 [Kaggle](https://www.kaggle.com/) 比赛，你会得到一个你可以提交的结果，并且可能超过排行榜的50％（通常要高得多）。

您可以使用它来获得很好的结果，但这是您想要投入多少时间的问题。

#### 清单用于表格数据的分类问题。

我选择演示这个清单，其中包含表格数据的分类问题。

这并不意味着它仅限于分类问题。您可以轻松地将其适应其他问题类型（如回归）和其他数据类型（如图像和文本）。

我过去曾使用过这个清单的变体。

#### 清单不包括技术“`XYZ`”。

清单的美妙之处在于简单的想法。

如果您不喜欢我已经布置的步骤，请用您自己的步骤替换它们。添加您想要使用的所有技术。建立自己的清单！

如果你这样做，我很乐意看到一份副本。

#### 这种方法有很多冗余。

我认为通过机器学习问题来处理开发和探索之间的平衡。

您希望利用有关机器学习，数据和域名的所有知识。将这些元素添加到您的流程中以解决给定问题。

但不要排除探索。你需要尝试你偏见所暗示的不是最好的东西。因为有时候，你的偏见往往不好。这是数据和机器学习的本质。

#### 为什么不只是对管道进行编码？

为什么不！也许你应该如果你是一个系统人。

我有很多次使用许多不同的工具链和平台。在编码系统中很难找到合适的灵活性。似乎总有一种方法或工具不适合整齐。

我怀疑许多机器学习即服务（MLaaS）创建一个类似于上述清单的管道，以确保良好的结果。

#### 我不知道为什么会得到好结果。

这可能发生在你是初学者的时候。

您可以而且应该更深入地了解数据准备和建模算法的最终组合。您应该将所有程序都提供给您的结果，以便其他任何人都可以复制它（如果是工作项目，则公开或在您的组织内）。

如果交付方式具有可重复性且评估严格，那么良好的结果可以独立存在。如果执行得好，上面的清单会提供这些功能。

## 行动步骤

使用清单完成项目并建立一些信心。

1.  [选择一个问题](http://machinelearningmastery.com/practice-machine-learning-with-small-in-memory-datasets-from-the-uci-machine-learning-repository/)，你可以在1到2小时内完成。
2.  使用清单并获得结果。
3.  分享您的第一个项目（在评论中）。

您想要上述电子表格的PDF和电子表格版本吗？

[现在下载](https://machinelearningmastery.leadpages.co/leadbox/146701e73f72a2%3A164f8be4f346dc/5676830073815040/) 并获得独家电子邮件提示和技巧。