# 最好的机器学习算法

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

什么是最好的机器学习算法？我经常收到这个问题。也许甚至每天。

有时这是一个普遍的问题。我认为人们希望确保他们正在学习一种真正的机器学习算法而不是浪费他们的时间。

大多数情况下，它是针对特定问题的。

我认为这是一个非常好的问题，一个非常有说服力的问题。它立刻告诉我，没有发生必要的思维转变。

我可以整天从屋顶上喊：“_没有最好的算法_”，但这没有用。

在这篇文章中，我想为您提供一些工具，帮助您开始思考一个最佳解决方案。

[![fear of loss](img/36739776f1fb0575394ae414fb703d11.jpg)](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2014/06/fear-of-loss.jpg)

害怕失去。
摄影： [Jimee，Jackie，Tom＆amp; Asha](https://www.flickr.com/photos/wilderdom/266650346/sizes/o/) ，保留一些权利

## 最佳解决方案

您可能是程序员或工程师。当您遇到特定问题时，您可以使用一种算法来解决它。

例如，您需要一个有序的项目列表，您使用标准库中内置的排序算法。没有含糊之处。你需要一个排序列表，你使用算法，现在你有一个排序列表。

为什么机器学习不能那样？

排序示例中存在歧义，它只是对您隐藏。

您正在使用的那种排序算法是众多算法中的一种，并且基于对诸如语言特征，空间和时间复杂性以及可能的易于实现和其他偏差等约束的权衡而被选择用于库中。它可能不是针对您的特定问题的最佳排序算法（在一些关注的维度上），但它已经足够好了。您的列表已排序。

## 获取免费算法思维导图

![Machine Learning Algorithms Mind Map](img/2ce1275c2a1cac30a9f4eea6edd42d61.jpg)

方便的机器学习算法思维导图的样本。

我已经创建了一个由类型组织的60多种算法的方便思维导图。

下载，打印并使用它。

另一个例子。

您必须在软件产品中实现中等复杂的功能。实现该功能的最佳方法是什么？

有许多方法可以设计软件并在界面中显示功能。我们使用指南来帮助我们做出这些决定（样式指南，设计指南，设计模式，语言功能等），但没有一种真正的方法可以完成工作。选择合适的权衡平衡是一个决策问题。

最好的解决方案的想法是一个谬论，但我相信你已经知道了。

## 没有免费午餐

它也比你想象的还糟糕。

可以证明没有最好的算法。

[没有免费午餐定理](http://en.wikipedia.org/wiki/No_free_lunch_in_search_and_optimization)告诉我们在所有问题和所有算法的矩阵中，所有算法的平均表现都是等价的。

现在，这是一个理论结果，并假设没有关于我们的问题或算法的先验知识。但是，对于我们必须做出的思考过渡来说，这是一个有用的框架。

[![no free lunch](img/fc1c9315f8aa41ceba64015541385cba.jpg)](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2014/06/no-free-lunch.jpg)

天下没有免费的午餐。
照 [..匹配..](https://www.flickr.com/photos/47294014@N00/210574919/sizes/o/) ，保留一些权利

## 害怕失去

真正发生的是害怕失去。

*   如果您使用错误的算法怎么办？
*   如果您可以使用其他算法获得更好的结果怎么办？
*   如果你花时间学习错误的算法怎么办？

这是非常糟糕的，你甚至可能不会选择算法。您甚至可能不会尝试解决您的问题或开始学习机器学习。

如果你问我：“_什么是问题的最佳机器学习算法？_ “，我看到[的所有损失厌恶](http://en.wikipedia.org/wiki/Loss_aversion)。

您需要这些工具来解决此问题。

## 这是一个搜索问题

您需要从正在解决的元问题的高效框架开始。

这个问题是搜索。您正在寻找最佳判断的算法或算法配置（真正的区别是什么？）。

您选择为模型提供的数据仅包含大量结构化信息，以便利用算法。与上面的排序示例一样，有一个理想化的解决方案（底层结构化数据的模型）和许多可用于实现理想化解决方案实例的算法。

什么是最好的搜索算法？我不知道。 [现场检查一些算法](http://machinelearningmastery.com/why-you-should-be-spot-checking-algorithms-on-your-machine-learning-problems/ "Why you should be Spot-Checking Algorithms on your Machine Learning Problems")，然后选择表现更好并进一步改进其结果。

现在这可能听起来很陈旧，但如果你刚刚开始学习机器，这是我能给出的最佳建议。

实践应用机器学习的[过程将为你在不同情况下算法行为的直觉建立起来。您收集的这些轶事可以告知您尝试的算法选择。](http://machinelearningmastery.com/process-for-working-through-machine-learning-problems/)

阅读算法工作原理的理论是更难的，但也是您想要用来告知您尝试的算法选择的有价值的信息。

[![machine learning as search](img/488720e9099731014b8c3992e464e4f7.jpg)](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2014/06/machine-learning-as-search.jpg)

机器学习作为一个搜索问题。
照 [taylar](https://www.flickr.com/photos/taylar/3460980819) ，保留一些权利。

## 实证研究

使用机器学习解决问题是一种经验性的科学探究。

如果你有一个完美的问题模型，你会使用它。但是你没有，你有数据，而你正在使用它来模拟问题。

将元问题构建为搜索意味着您需要非常强烈地了解如何客观地评估结果（模型）。这就是为什么预先定义问题绝对非常重要的原因。

你需要有条不紊和系统化。

您尝试的算法并非无关紧要，但它们可能是您[定义问题](http://machinelearningmastery.com/how-to-define-your-machine-learning-problem/ "How to Define Your Machine Learning Problem")和[您使用的测试工具](http://machinelearningmastery.com/how-to-choose-the-right-test-options-when-evaluating-machine-learning-algorithms/ "How To Choose The Right Test Options When Evaluating Machine Learning Algorithms")至[评估您准备的模型](http://machinelearningmastery.com/why-you-should-be-spot-checking-algorithms-on-your-machine-learning-problems/ "Why you should be Spot-Checking Algorithms on your Machine Learning Problems")的次要方法。

这是一个艰难的教训，可能需要一些时间才能沉入其中。十年之后，它仍然渗透到我的骨髓里。