什么是最好的机器学习算法?我经常收到这个问题。甚至可能每天都有。
有时候这是一个普遍的问题。我认为人们想确保他们正在学习唯一真正的机器学习算法,而不是浪费时间在任何次要的算法上。
大多数其他时候,它是关于一个具体的问题。
我认为这是一个非常好的问题,一个非常能说明问题的提问方式。它立刻告诉我,一种思维上的必需转变尚未发生。
我可以整天在屋顶上喊:“没有最好的算法”,但这没有帮助。
在这篇文章中,我想提供一些工具来帮助你开始转变思维,摆脱对单一最佳解决方案的执念。
我的新书《机器学习算法精通》将帮助你启动你的项目,书中包含分步教程和所有示例的Excel电子表格文件。

损失恐惧。
照片来源:Jimee, Jackie, Tom & Asha,部分权利保留
最佳解决方案
你可能是一名程序员或工程师。当你遇到一个具体的问题时,你可以找到一个算法来解决它。
例如,你需要一个排序的项目列表,你使用标准库内置的排序算法。没有歧义。你需要一个排序列表,你就使用这个算法,现在你就有了一个排序列表。
为什么机器学习不能这样呢?
排序的例子中存在歧义,只是它隐藏在你面前。
你正在使用的那个排序算法是众多算法之一,它被选入库是基于对语言特性、空间和时间复杂度,以及易于实现和其他偏见等约束条件的权衡。它可能不是你特定问题的最佳排序算法(在某些关注的维度上),但它已经足够好了。你的列表得到了排序。
获取您的免费算法思维导图

方便的机器学习算法思维导图样本。
我创建了一份方便的思维导图,其中包含60多种按类型组织的算法。
下载、打印并使用它。
还可以独家访问机器学习算法电子邮件迷你课程。
另一个例子。
你必须在软件产品中实现一个中等复杂度的功能。实现该功能的最佳方式是什么?
有无数种设计软件和在界面中呈现功能的方式。我们使用指南来帮助我们做出这些决定(风格指南、设计指南、设计模式、语言特性等),但没有一种方法是万能的。这是一个决策问题,需要选择一个适合的权衡。
最佳解决方案的想法是一种谬论,但我相信你已经知道了。
免费午餐
情况比你想象的还要糟糕。
可以证明没有最好的算法。
免费午餐定理告诉我们,在所有问题和所有算法的矩阵中,所有算法的平均性能是等效的。
现在,这是一个理论结果,并且假设我们对我们的问题或算法没有先验知识。但它为我们必须做出的思维转变提供了一个有用的框架。

没有免费的午餐。
照片来源:..matt..,部分权利保留
损失恐惧
真正发生的是损失恐惧。
- 如果你使用了错误的算法怎么办?
- 如果你能用其他算法获得更好的结果怎么办?
- 如果你花了时间学习错误的算法怎么办?
情况糟到你甚至可能不选择算法。你甚至可能不去解决问题,或者不开始学习机器学习。
如果你问我:“什么算法最适合某个机器学习问题?”,我看到的只有损失厌恶。
你需要工具来解决这个问题。
这是一个搜索问题
你需要从一个富有成效的框架开始,来解决你正在解决的元问题。
这个问题就是搜索。你正在寻找一个算法或算法配置(它们之间真正的区别是什么?),你认为哪个是最好的。
你选择提供给模型的那些数据中,只有这么多的结构化信息供算法利用。就像上面的排序示例一样,存在一个理想化的解决方案(潜在结构化数据的模型),并且有许多算法可以用来实现该理想化解决方案的实例。
什么是最好的搜索算法?我不知道。请抽样检查一些算法,然后选择表现更好的,并进一步研究改进它们的结果。
这听起来可能很简单,但如果你是机器学习新手,这是我能给出的最好建议。
大量练习应用机器学习的过程,将培养你对算法在不同情况下如何运作的直觉。你收集到的这些轶事可以为选择要尝试的算法提供信息。
阅读算法为何有效的基础理论会更难,但也非常有价值,你可以用来为选择要尝试的算法提供信息。

机器学习作为一个搜索问题。
照片来源:taylar,部分权利保留。
经验探究
使用机器学习解决问题是一种经验性的科学探究。
如果你有一个完美的问题模型,你就会使用它。但你没有,你只有数据,并且你正在使用数据来建模问题。
将元问题构建为搜索意味着你需要非常清楚地知道如何客观地评估一个发现(一个模型)。这就是为什么预先定义你的问题至关重要。
你需要有条理、系统。
你尝试的算法并非无关紧要,但它们可能次于你定义问题的方式以及你用来评估你准备的模型的测试平台。
这是一个艰难的教训,可能需要一些时间才能消化。经过十年,它仍在我的骨髓中渗透。
我认为这是你最好的文章之一。它有助于缓解“错失恐惧症”(Fear Of Missing Out syndrome)的负担!我真的认为机器学习是两部分科学和一部分艺术,因为经验性的试错阶段极其重要。正如你所说,每一个机器学习问题实际上都是一个搜索问题。当然,有策略和启发式方法来缩小搜索空间,但最终,它是一门艺术!
感谢分享您的见解!
谢谢。
你好 Jason。如果我必须设计一个概念验证来证明“无免费午餐”定理,我是不是应该拥有多样化的数据集,可能是一些分类算法,构建模型并分析结果,以确定在特定数据集上哪个算法的表现更好?无免费午餐定理就是这样被证明的吗?我理解的无免费午餐定理是,一个算法可能在一个特定数据集上给我带来好结果,但未必在另一个数据集上也能如此。请澄清。
一般来说,NFLT(无免费午餐定理)表明,在所有可能的问题上平均而言,没有一个分类器会比其他任何分类器表现更好。
它讨论的是优化,而机器学习算法执行优化来解决函数逼近问题。
它是理论上的,因为在实践中我们确实了解我们的问题,比什么都不知道要了解得多。
如果你正在准备这个演示作为家庭作业,也许可以与你的老师确认他们期望的是什么。