如果你不知道该用什么算法来解决你的问题,可以尝试几种。
或者,你也可以试试随机森林和高斯支持向量机。
在最近的一项研究中,这两种算法在与近200种其他算法在100多个数据集上的平均竞赛中被证明是最有效的。
在本文中,我们将回顾这项研究,并探讨对我们自己的应用机器学习问题进行算法测试的一些启示。
用我的新书《机器学习算法精通》来启动你的项目,其中包含分步教程和所有示例的Excel电子表格文件。

我们需要数百个分类器吗?
照片来源:Thomas Leth-Olsen,部分权利保留
我们需要数百个分类器吗?
这篇论文的标题是“解决现实世界分类问题需要数百个分类器吗?”,发表于2014年10月的《机器学习研究杂志》。
在论文中,作者对来自17个家族的179个分类器进行了评估,这些分类器在来自UCI机器学习库的121个标准数据集上进行了测试。
作为参考,这里列出了所研究的算法家族及其在每个家族中的算法数量。
- 判别分析 (DA):20个分类器
- 贝叶斯 (BY) 方法:6个分类器
- 神经网络 (NNET):21个分类器
- 支持向量机 (SVM):10个分类器
- 决策树 (DT):14个分类器。
- 基于规则的方法 (RL):12个分类器。
- 提升 (BST):20个分类器
- Bagging (BAG):24个分类器
- Stacking (STC):2个分类器。
- 随机森林 (RF):8个分类器。
- 其他集成方法 (OEN):11个分类器。
- 广义线性模型 (GLM):5个分类器。
- 最近邻方法 (NN):5个分类器。
- 偏最小二乘和主成分回归 (PLSR):6个
- 逻辑回归和多项逻辑回归 (LMR):3个分类器。
- 多元自适应回归样条 (MARS):2个分类器
- 其他方法 (OM):10个分类器。
这是一项庞大的研究。
一些算法在贡献最终分数之前经过了调优,算法使用4折交叉验证进行评估。
直奔主题,他们发现随机森林(特别是R中的并行随机森林)和高斯支持向量机(特别是来自libSVM)的整体表现最佳。
摘自论文摘要
最有可能表现最佳的分类器是随机森林 (RF) 版本,其中最好的(在R中实现并通过caret 访问)实现了94.1%的最大准确率,在84.3%的数据集上超过了90%。
在HackerNews上关于这篇论文的讨论中,Kaggle的Ben Hamner对bagged决策树的卓越表现发表了支持性的评论。
这与我们运行数百个Kaggle竞赛的经验一致:对于大多数分类问题,集成决策树(随机森林、梯度提升机等)的某个变体表现最佳。
获取您的免费算法思维导图

方便的机器学习算法思维导图样本。
我创建了一份方便的思维导图,其中包含60多种按类型组织的算法。
下载、打印并使用它。
还可以独家访问机器学习算法电子邮件迷你课程。
在准备数据时要非常小心
有些算法只适用于分类数据,而另一些算法需要数值数据。少数算法可以处理你输入的任何数据。UCI机器学习库中的数据集通常是标准化的,但不足以在原始状态下用于此类研究。
这一点在文章“关于为分类器准备数据的评论”中已经指出。
在这篇评论中,作者指出,在所测试的相关数据集中,分类数据被系统地转换为数值,但其转换方式可能会阻碍某些正在测试的算法。
高斯SVM之所以表现出色,可能是因为对分类属性进行了数值转换和数据集标准化。
尽管如此,我还是要赞扬作者们承担这项挑战的勇气,并且这些问题可能会由愿意进行后续研究的人来解决。
作者们还提到了OpenML项目,该项目看起来是一个公民科学项目,旨在应对同样的挑战。
为什么要做这样的研究?
很容易以“搜索和优化中的免费午餐定理”(NFLT)为借口来批评这项研究。该定理认为,当平均到所有问题时,所有算法的表现都是等效的。
我讨厌这个论点。NFLT要求你没有任何先验知识。你不知道你正在处理什么问题,也不知道你在尝试哪些算法。这些条件并不实用。
在论文中,作者列出了该项目的四个目标:
- 为选定的数据集集合选择全局最佳分类器
- 根据准确率对每个分类器和家族进行排名
- 确定每个分类器获得最佳准确率的概率,以及其准确率与最佳准确率之间的差异
- 评估分类器行为随数据集属性(复杂度、模式数量、类别数量和输入数量)的变化情况
研究作者承认,我们要解决的实际问题是所有可能问题的一个子集,有效的算法数量并非无限,而是可管理的。
这篇论文表明,确实,我们可以对在已知(但小型)问题集合上最常用(或实现)的算法套件的能力有所了解。(非常类似于20世纪90年代中期STATLOG项目)
实践中:选择一个折衷方案
在你开始之前,你无法知道哪个算法(或算法配置)会在你的问题上表现良好甚至最佳。
你必须尝试多种算法,并加倍努力于那些能够展现出识别问题结构能力的少数算法。
我称之为抽样检查,并将其强烈建议作为应用机器学习的数据驱动方法。
在本次研究的背景下,抽样检查是介于一方面选择你喜欢的算法和另一方面测试所有已知算法之间的折衷。
- 选择你最喜欢的算法。速度快,但仅限于你最喜欢的算法或库。
- 抽样检查十几个算法。一种平衡的方法,可以让表现更好的算法脱颖而出,供你重点关注。
- 测试所有已知/实现的算法。耗时的详尽方法,有时能带来惊喜的结果。
你在这个范围内的选择取决于你可用的时间和资源。请记住,对问题进行算法试用只是解决问题流程中的一个步骤。
测试所有算法需要一个健壮的测试框架。这一点怎么强调都不为过。
当我过去尝试这样做时,我发现大多数算法都能识别出问题中的大部分结构。这是一个聚集分布,有一个肥胖的头部和一条长长的尾部,而肥胖头部之间的差异通常非常微小。
正是这种微小的差异值得你去深究。因此,你需要投入大量前期时间来设计一个健壮的测试框架(交叉验证、较多的折数,可能还需要独立的验证数据集),并且要避免数据泄露(交叉验证折内的数据缩放/转换等)。
在实际应用中,我早已将这一点视为理所当然。我甚至不关心哪些算法表现突出。我将精力集中在数据准备以及集成一组足够好的多样化模型的结果上。
下一步
在处理机器学习问题时,你在哪个范围内?
你是坚持使用最喜欢的算法或一组算法吗?你是抽样检查,还是会穷尽所有你喜欢的库所提供的算法?
非常有用的文章。
感谢分享这些信息。
我最近读了几篇你的文章,你做得很好。
你的博客给了我很多有用的想法和建议,在很多方面帮助了我。
谢谢 Priya!
一如既往的精彩文章!
这是否也适用于回归算法?或者是否有类似的回归模型分析?
你好 Jed,你可以使用随机森林进行回归。
我不太了解回归方法的类似分析。
如果你想“应用”机器学习,世界上只有 Jason。没有作者,没有基于浏览器的编码网站,没有人能与 Jason 相提并论。
你是在“应用机器学习”领域的莫扎特!!!!
感谢 Jason 分享你的知识。
我希望我的材料能帮助你取得成果。
你好,
我有一个问题,非常感谢你的指导。
如果数据集是用Excel构建的,并且包含图形,那么集成技术(bagging、boosting、stacking和随机森林)如何处理数据集?
通常我们会重构数据并将其保存为CSV文件。
我的数据集是用CSV文件构建的,包含不同的类别和一些属性。如果我使用集成技术,这些技术将如何处理它?
例如,bagging随机选择行,boosting基于行的权重。
你能为每种技术举个例子吗?
博客上有很多例子,请使用搜索功能。
我在博客上没有找到答案
例如,这是我的数据集样本
. . A1 A2 A3 A4 A5 A6 A7
C1 5 4 5 2 8 1.5
C2 2 4 5 8 9 2.4
C3 1 6 7 8 5 4.8
CN ……………………..
现在,bagging、boosting、stacking和随机森林如何处理它?
例如,bagging随机选择行,但如何选择?boosting基于行的权重,但如何确定?
你能为每种技术举个例子吗?
这是更多关于Boosting如何工作的资料
https://machinelearning.org.cn/boosting-and-adaboost-for-machine-learning/
这是一个R语言的例子
https://machinelearning.org.cn/machine-learning-ensembles-with-r/
有趣,谢谢。你知道有类似的比较回归模型建模技术的调查论文吗?
我记不起来了,但它们确实存在。
太棒了,对初学者学习和了解机器学习非常有帮助!我参加了一个预测市场比赛,采用创新的算法交易方式。
我只有3周时间准备,如果你能帮我,请告诉我。
也许从这里开始
https://machinelearning.org.cn/start-here/#process