您如何为您的数据集选择最佳算法?
机器学习是一个归纳问题,其中从领域中特定观察到的数据中学习一般规则。
在事先不知道具体问题的情况下,试图找出最适合学习该数据的表示或算法是不可行的(不可能?),除非您对该问题非常了解,以至于您可能根本不需要机器学习。
那么,对于一个给定的问题,您应该使用什么算法?这是一个试错的过程,或者是在搜索最佳表示、学习算法和算法参数。
在这篇文章中,您将发现一些业内顶尖的预测模型师提出的,用于找到解决您问题的最佳算法的简单三步法。

找到最佳机器学习算法的步骤
照片由 David Goehring 拍摄,保留部分权利。
三步法
Max Kuhn 是 R 中预测建模工具集 caret 包的创建者和所有者。它可能是最好的 R 包,也是 R 成为严肃竞争性和应用机器学习首选原因。
在他们精彩的书《应用预测建模》中,Kuhn 和 Johnson 概述了一个为给定问题选择最佳模型的流程。
我将他们的建议方法概括为:
- 从可解释性最差、最灵活的模型开始。
- 研究更简单、更不透明的模型。
- 考虑使用能够合理地近似更复杂模型性能的最简单模型。
他们评论道:
使用这种方法,建模者可以在确定模型之前发现数据集的“性能上限”。在许多情况下,一系列模型在性能上是等效的,因此从业者可以权衡不同方法的优点……
例如,以下是这种方法的一般性解释,您可以在下一个一次性建模项目中尝试:
- 研究一系列复杂模型并建立性能上限,例如:
- 支持向量机
- 梯度提升机
- 随机森林
- 装袋决策树
- 神经网络
- 研究一系列更简单、更具可解释性的模型,例如:
- 广义线性模型
- LASSO 和 Elastic-Net 正则化的广义线性模型
- 多变量自适应回归样条
- k-近邻
- 朴素贝叶斯
- 从(2)中选择最能近似(1)的准确性的模型。
快速一次性模型
我认为这是一种非常好的方法,适用于需要快速获得良好结果的一次性项目,例如在几分钟或几小时内。
- 您对模型在某个问题上的准确性分布有了一个很好的了解。
- 您有了一个更容易理解和向他人解释的模型。
- 您以非常快的速度获得了一个质量相当高的模型(可能达到了该问题可实现性能的前 10%-25%,如果您花费了几天或几周时间)。
我不认为这是解决所有问题最佳的方法。该方法可能存在一些缺点:
- 更复杂的方法运行速度较慢,返回结果也较慢。
- 有时您希望选择复杂模型而不是简单模型(例如,在准确性比可解释性更重要的领域)。
- 性能上限是首先追求的,而不是最后,那时可能存在时间和压力以及动力来最大程度地利用最佳方法。
有关此策略的更多信息,请查看《应用预测建模》第 78 页的第 4.8 节“在模型之间进行选择”。对于任何使用 R 的严肃机器学习从业者来说,这本书都是必备之物。
您是否有找到最佳机器学习算法的方法?请留言分享您的经验。
您是否使用过这种方法?它对您有效吗?
有任何问题吗?请留言。
可以在 http://www.data-blogger.com 找到一些机器学习的应用和教程。
John,您能否提供两个例子来详细说明这一点?
是否有适用于 1. 和 2. 的模板?
在与您学习了几周后,杰森,我现在看到了隧道尽头的光明了:)
从您的 R 教程中学到了很多。
https://machinelearning.org.cn/evaluate-machine-learning-algorithms-with-r/
https://machinelearning.org.cn/compare-models-and-select-the-best-using-the-caret-r-package/
这确实是一个全新的宇宙!
在 caret 网站上,有 233 个可用模型。
https://topepo.github.io/caret/available-models.html
是否有办法只收集那些适用于时间序列预测的模型?
很高兴听到这个消息。
对于时间序列,您可以将其视为回归或分类。因此,您可以根据您如何构建问题来收集所有分类和回归问题。
实际上,许多算法并不值得,或者需要特殊的数据准备。
A)
在 R 和 Caret 中,我们甚至可以预测未见过的数据。
与 Python ML 堆栈相比,R 代码似乎更加简洁。
为什么或在什么情况下,我们应该选择整个“Python Enchilada”而不是 R 和 Caret?
B) 是否有时间序列预测算法的排行榜?
或者目前有哪些热门(新发明)的算法?
我喜欢 R,但 Python 有需求,所以我在专注于它。
https://machinelearning.org.cn/python-growing-platform-applied-machine-learning/
我推荐 R 进行深度一次性项目和研发。我推荐 Python 堆栈用于需要开发以保证可靠性/可维护性的代码(例如,用于生产环境的经典软件工程)。
机器学习是新的创新学习和交流方式。组织对此的看法非常进步,并且描述的步骤对于算法程序员来说也非常有用。
谢谢。
哪种机器学习算法最适合预测分析,也就是说,识别非法活动?
这是我在这里回答的一个常见问题
https://machinelearning.org.cn/faq/single-faq/what-algorithm-config-should-i-use
非常感谢您的见解。我花了几个月的时间寻找适合我博士研究的最佳方法。这非常有教育意义。
谢谢,我很高兴这能有所帮助。