# 机器学习表现改进备忘单

> 原文： [https://machinelearningmastery.com/machine-learning-performance-improvement-cheat-sheet/](https://machinelearningmastery.com/machine-learning-performance-improvement-cheat-sheet/)

**32个可以用来做出更好预测的技巧，窍门和黑客。**

机器学习中最有价值的部分是预测性建模。

这是对历史数据进行训练并对新数据做出预测的模型的开发。

在预测性建模方面，首要问题是：

> 我怎样才能获得更好的结果？

这个备忘单包含了我自己应用多年的最佳建议，并研究了顶级机器学习从业者和竞赛获胜者。

通过本指南，您不仅可以获得不稳定性和提升表现，甚至可以获得有关预测问题的世界级结果。

让我们潜入。

请注意，本指南的结构基于早期指南，您可能对提高深度学习的表现非常有用，标题为：[如何提高深度学习表现](http://machinelearningmastery.com/improve-deep-learning-performance/)。

![Machine Learning Performance Improvement Cheat Sheet](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2016/11/Machine-Learning-Performance-Improvement-Cheat-Sheet.jpg)

机器学习表现改进备忘单
照片由 [NASA](https://www.flickr.com/photos/gsfc/9807812154/) ，保留一些权利。

## 概观

此备忘单旨在为您提供提升机器学习问题表现的想法。

所有这一切都是获得突破的好主意。

找到一个想法，然后回来找另一个想法。

我将列表分为4个子主题：

1.  通过数据提高表现。
2.  使用算法提高表现。
3.  通过算法调优提高表现。
4.  使用Ensembles提高表现。

从列表中进一步增加，收益通常会变小。

例如，您的问题或更多数据的新框架通常会比调整最佳表现算法的参数给您更多的回报。并非总是如此，但总的来说。

## 1.通过数据提高表现

通过更改训练数据和问题定义，您可以获得巨大成功。也许即使是最大的胜利。

**策略**：为您的数据创建新的和不同的视角，以便最好地将基础问题的结构暴露给学习算法。

### 数据策略

*   **获取更多数据**。 _您可以获得更多或更好的质量数据吗？_ 现代非线性机器学习技术，如深度学习，可以通过更多数据继续提高表现。
*   **发明更多数据**。 _如果您无法获得更多数据，是否可以生成新数据？_ 也许您可以扩充或置换现有数据或使用概率模型生成新数据。
*   **清理您的数据**。 _你能改善数据中的信号吗？_ 可能存在可以修复或删除的缺失或损坏的观察结果，或者可以修复或删除的合理范围之外的异常值，以提高数据质量。
*   **重采样数据**。 _您可以重采样数据以更改大小或分布吗？_ 也许您可以在实验中使用更小的数据样本来加速或过度采样或对特定类型的欠采样观察，以便更好地在数据集中表示它们。
*   **重构你的问题**：_你能改变你正在解决的预测问题的类型吗？_ 将您的数据重新构建为回归，二元或多分类，时间序列，异常检测，评级，推荐等类型问题。
*   **重缩放数据**。 _你能重缩放数字输入变量吗？_ 输入数据的标准化和标准化可以提高使用加权输入或距离测量的算法的表现。
*   **转换您的数据**。 _您能重塑数据分发吗？_ 使输入数据更高斯或通过指数函数传递可以更好地将数据中的特征暴露给学习算法。
*   **投射您的数据**：_您可以将数据投影到较低维度的空间吗？_ 您可以使用无监督聚类或投影方法来创建数据集的全新压缩表示。
*   **特征选择**。 _所有输入变量都同等重要吗？_ 使用特征选择和特征重要性方法创建数据的新视图，以便使用建模算法进行探索。
*   **特色工程**。 _您可以创建和添加新的数据功能吗？_ 也许有些属性可以分解为多个新值（如类别，日期或字符串）或可以聚合以表示事件的属性（如计数，二进制标记或统计摘要）。

**结果**：您现在应该拥有一套新的数据集视图和版本。

**下一页**：您可以使用预测性建模算法评估每个值。

## 2.使用算法提高表现

机器学习就是算法。

**策略**：确定在表现基准之上执行且优于平均值的算法和数据表示。保持对结果和设计实验的怀疑，这使得很难欺骗自己。

### 算法策略

*   **重采样方法**。 _使用什么重采样方法来估算新数据的技巧？_ 使用可充分利用可用数据的方法和配置。具有保持验证数据集的k折交叉验证方法可能是最佳实践。
*   **评估指标**。 _用什么指标来评估预测技巧？_ 使用最能捕获问题和域要求的指标。它可能不是分类准确率。
*   **基线表现**。 _比较算法的基准表现是什么？_ 使用随机算法或零规则算法（预测均值或模式）来建立基线，通过该基线对所有评估的算法进行排名。
*   **抽查线性算法**。 _什么线性算法运作良好？_ 线性方法通常更偏向，易于理解并且训练速度快。如果你能取得好成绩，他们是首选。评估各种线性方法。
*   **抽查非线性算法**。 _哪些非线性算法效果很好？_ 非线性算法通常需要更多数据，具有更高的复杂性，但可以实现更好的表现。评估各种非线性方法。
*   **从文献中窃取**。 _文献中报道了哪些算法可以很好地解决您的问题？_ 也许您可以获得算法类型的想法或经典方法的扩展来探索您的问题。
*   **标准配置**。 _被评估算法的标准配置是什么？_ 每个算法都需要有机会在您的问题上做得很好。这并不意味着调整参数（但是）确实意味着要研究如何很好地配置每个算法并在算法烘烤中给它一个战斗机会。

**结果**：您现在应该有一个表现良好的算法和数据表示的简短列表。

**下一步**：下一步是通过算法调整来提高表现。

## 3.通过算法调整提高表现

算法调整可能是您花费大部分时间的地方。这可能非常耗时。您通常可以通过现场检查快速发现一两个表现良好的算法。从这些算法中获取最大收益可能需要数天，数周或数月。

**策略**：充分利用表现良好的机器学习算法。

### 调整策略

*   **诊断**。 _您对算法的诊断和评论是什么？_ 也许您可以查看学习曲线，以了解该方法是否过度或不合适，然后更正。不同的算法可以提供不同的可视化和诊断。查看算法预测的是非。
*   **尝试直觉**。 _你的直觉告诉你什么？_ 如果您将参数调整得足够长并且反馈周期很短，您可以直观地了解如何针对问题配置算法。试试这个，看看你是否可以提出新的参数配置来尝试更大的测试工具。
*   **从文献中窃取**。 _文献中使用了哪些参数或参数范围？_ 评估标准参数的表现是开始任何调整活动的好地方。
*   **随机搜索**。 _哪些参数可以使用随机搜索？_ 也许您可以使用算法超参数的随机搜索来公开您从未想过要尝试的配置。
*   **网格搜索**。 _什么参数可以使用网格搜索？_ 也许有标准超参数值的网格可以枚举以找到好的配置，然后用更精细和更精细的网格重复该过程。
*   **优化**。 _您可以优化哪些参数？_ 也许有结构或学习率等参数可以使用直接搜索程序（如模式搜索）或随机优化（如遗传算法）进行调整。
*   **替代实现**。 _该算法的其他实现是什么？_ 也许该方法的替代实现可以在相同数据上获得更好的结果。每种算法都有许多必须由算法实现者做出的微决策。其中一些决定可能会影响您的问题的技能。
*   **算法扩展**。 _算法的常见扩展是什么？_ 也许您可以通过评估方法的常用或标准扩展来提升表现。这可能需要实现工作。
*   **算法定制**。 _针对您的特定情况，可以对算法进行哪些自定义？_ 也许您可以对数据算法进行修改，从损失函数，内部优化方法到算法特定决策。
*   **联系专家**。 _算法专家在您的案例中推荐什么？_ 写一封简短的电子邮件，总结您的预测问题以及您尝试过的一位或多位专家学者对该算法的看法。这可能会揭示以前不为您所知的前沿工作或学术工作的新想法或新想法。

**结果**：您现在应该有一个关于机器学习问题的高度调整算法的简短列表，甚至可能只有一个。

**下一步**：此时可以完成一个或多个模型，用于预测或投入生产。通过组合来自多个模型的预测，可以获得表现的进一步提升。

## 4.用合奏提高表现

您可以组合多个模型的预测。在算法调整之后，这是下一个需要改进的重要领域。实际上，通过组合多个“足够好”模型的预测而不是多个高度调整（和脆弱）模型，您通常可以获得良好的表现。

**策略**：结合多个表现良好的模型的预测。

### 合奏策略

*   **混合模型预测**。 _你能直接结合多个模型的预测吗？_ 也许您可以使用相同或不同的算法来制作多个模型。从多个表现良好的模型的预测中获取均值或模式。
*   **混合数据表示**。 _您可以结合使用不同数据表示训练模型的预测吗？_ 您可能有许多不同的问题预测，可用于训练表现良好的算法，然后可以将其预测结合起来。
*   **混合数据样本**。 _您可以结合使用不同数据视图训练的模型吗？_ 也许你可以创建训练数据的多个子样本并训练一个表现良好的算法，然后结合预测。这称为bootstrap聚合或装袋，当每个模型的预测都是熟练的但以不同的方式（不相关）时，效果最佳。
*   **正确预测**。 _你能纠正表现良好的模特的预测吗？_ 也许您可以明确地纠正预测或使用像提升这样的方法来学习如何纠正预测错误。
*   **学会结合**。 _您是否可以使用新模型来学习如何最好地结合多个表现良好的模型的预测？_ 这称为堆叠泛化或堆叠，并且当子模型熟练但以不同方式并且聚合器模型是预测的简单线性加权时，通常可以很好地工作。这个过程可以重复多层深度。

**结果**：您应该拥有一个或多个表现优异的模型，其表现优于任何单一模型。

**下一步**：此时可以完成一个或多个集合，用于预测或投入生产。

## 最后的话

这个备忘单充满了想法，试图提高你的问题的表现。

### 如何开始

你不需要做任何事情。你需要一个好主意来提升表现。

以下是如何处理压倒性的问题：

1.  选一组
    1.  数据。
    2.  算法。
    3.  调整。
    4.  合奏。
2.  从组中选择一种方法。
3.  选择一个尝试所选方法的东西。
4.  比较结果，如果有改进，请保留。
5.  重复。

### 分享您的结果

你觉得这篇文章有用吗？
你有没有一个有所作为的想法或方法？

让我知道，发表评论！我很乐意听到它。