为什么你应该在机器学习问题上抽查算法

算法抽查检验(Spot-checking)是在你的机器学习问题上快速评估一系列不同算法的过程,这样你就能知道应该关注哪些算法,以及应该舍弃哪些算法。

spot check machine learning algorithm

照片由 withassociates 拍摄,保留部分权利

在这篇文章中,你将发现算法抽查检验的3个好处、在你下一个问题上进行抽查检验的5个技巧,以及你可以用于抽查检验的十大最流行的数据挖掘算法。

算法抽查检验

算法抽查检验是应用机器学习过程的一部分。对于一个新问题,你需要快速确定哪种类型或类别的算法擅长发现问题中的结构,而哪些则不擅长。

抽查检验的替代方法是,你被大量可以尝试的算法和算法类型所淹没,最终只尝试了很少几种,或者沿用过去对你有用的方法。这会导致时间浪费和结果不佳。

算法抽查检验的好处

在你的机器学习问题上进行算法抽查检验有3个关键好处:

  • 速度:你可能会花费大量时间尝试不同的算法、调整参数,并思考哪些算法在你的问题上会表现良好。我曾经历过这种情况,最终因为不够系统而反复测试相同的算法。一次抽查检验实验可以节省数小时、数天甚至数周的瞎琢磨时间。
  • 客观性:人们倾向于沿用过去有效的方法。我们选择自己最喜欢的算法,并将其应用于我们遇到的每一个问题。机器学习的强大之处在于,解决一个给定的问题有许多不同的方法。抽查检验实验可以让你自动且客观地发现那些最擅长找出问题结构所在的算法,从而集中你的注意力。
  • 结果:算法抽查检验能让你快速得到可用的结果。你可能在第一次抽查实验中就发现一个足够好的解决方案。或者,你可能很快发现你的数据集没有揭示出足够的结构,以至于任何主流算法都无法表现良好。抽查检验为你提供了所需的结果,以决定是继续前进并优化某个模型,还是退后一步重新审视问题的呈现方式。

我认为,在你的问题上对主流算法进行抽查检验是明智的第一步。

算法抽查检验的技巧

在进行算法抽查检验时,你可以做一些事情来确保你获得有用且可操作的结果。

Tips for Spot-Checking Algorithms

算法抽查检验的技巧
照片由 vintagedept 拍摄,保留部分权利。

以下是5个技巧,以确保你在你的问题上从机器学习算法的抽查检验中获得最大收益。

  • 算法多样性:你需要一个良好的算法类型组合。我喜欢包括基于实例的方法(如 LVQ 和 KNN)、函数和核方法(如神经网络、回归和 SVM)、规则系统(如决策表和 RIPPER)以及决策树(如 CART、ID3 和 C4.5)。
  • 尽展所长:需要给每个算法一个展示其最佳表现的机会。这并不意味着对每个算法的参数进行敏感性分析,而是使用实验和启发式方法给予每个算法一个公平的机会。例如,如果 KNN 在其中,可以给它3次机会,分别使用 k 值为 1、5 和 7。
  • 正式实验:不要随意尝试。人们很容易以非正式的方式尝试各种不同的东西,在你的问题上随意摆弄算法。抽查检验的目的是快速找到在问题上表现良好的方法。设计实验,运行它,然后分析结果。要有条不紊。我喜欢根据算法在统计上显著的胜出次数(在成对比较中)进行排名,并选择前3-5名作为调优的基础。
  • 出发点:表现最佳的算法是起点,而不是问题的解决方案。被证明有效的算法可能不是完成这项工作的最佳算法。它们很可能是指向在问题上表现良好的算法类型的有用指标。例如,如果 KNN 表现良好,可以考虑对所有你能想到的基于实例的方法和 KNN 的变体进行后续实验。
  • 建立你的候选清单:随着你学习和尝试许多不同的算法,你可以将新算法添加到你用于抽查检验实验的算法套件中。当我发现一个特别强大的算法配置时,我喜欢将其泛化并包含在我的套件中,使我的套件对下一个问题更具鲁棒性。

开始为抽查检验实验建立你的算法套件吧。

十大算法

2008年发表了一篇题为“数据挖掘中的十大算法”的论文。谁能错过这样一个标题呢?它还被改编成一本书《数据挖掘十大算法》,并启发了另一本书《机器学习实战》的结构。

这篇论文可能是一个很好的起点,可以帮助你为下一个机器学习问题启动算法抽查检验的候选清单。论文中列出的数据挖掘十大算法是:

  • C4.5 这是一种决策树算法,包括著名的 C5.0 和 ID3 算法等后代方法。
  • k-means。首选的聚类算法。
  • 支持向量机。这实际上是一个巨大的研究领域。
  • Apriori。这是提取关联规则的首选算法。
  • EM。与 k-means 一样,是首选的聚类算法。
  • PageRank。我很少接触基于图的问题。
  • AdaBoost。这实际上是提升(boosting)集成方法家族。
  • knn(k-最近邻)。简单而有效的基于实例的方法。
  • 朴素贝叶斯。在数据上简单而稳健地使用贝叶斯定理。
  • CART(分类和回归树)另一种基于树的方法。

Quora 上也有一个关于这个主题的很棒的问题,你可以从中挖掘在你的问题上尝试的算法思路。

资源

你喜欢在问题上抽查检验哪些算法?你有最喜欢的吗?

关于为什么你应该在你的机器学习问题上对算法进行抽查检验的24条回复

  1. Jeremy 2016年6月6日晚上11:28 #

    嗨,Jason。当你说每个算法需要通过使用一系列参数值来“尽展所长”时,你怎么知道该使用哪些值呢?你有没有关于一些最常见算法应该测试哪些参数值的资源?谢谢,Jeremy

    • Jason Brownlee 2016年6月14日上午8:24 #

      好问题,Jeremy。

      通常,你可以从论文、帖子和竞赛结果以及经验中收集这些信息。这是来之不易的知识,遗憾的是没有写在任何地方。

      目前,你最好在一套标准算法上对给定算法的参数进行网格搜索,以开始建立对“配置类别”的直觉。

  2. Nick 2016年12月22日上午5:54 #

    我看到了抽查检验的好处,但你怎么知道一个在抽查检验中表现不佳的模型在完全调优后不会更好用呢?例如,假设模型 A 在未经调优时分类准确率为 65%,而模型 B 在未经调优时准确率为 70%。模型 A 在调优后有可能超过模型 B 吗?或者模型是否通常在调优后仍保持相对性能不变?为了讨论方便,我忽略了任何过拟合的影响,但这或许是答案的一部分。

    • Jason Brownlee 2016年12月22日上午6:38 #

      非常好的观点。

      这很难。

      你需要给每个算法最好的机会,但要避免完全的算法调优。

      这既适用于算法配置,也适用于转换后的输入数据。

      通常,我建议设计一套转换后的输入(数据的视图)和一套算法/配置,并运行所有组合,看看哪些会脱颖而出,然后再加倍投入。

      借助好的工具,很多工作可以自动化。

      • Glen 2018年2月6日晚上10:38 #

        很棒的文章,Jason。我非常喜欢你关于不要过于努力让某个算法起作用的建议。

        只是一个关于工具的问题。你能否提一下你用来自动化和运行不同算法的工具?

        • Jason Brownlee 2018年2月7日上午9:24 #

          我推荐 Python 中的 sklearn 或 R 中的 caret。

          我在博客上有很多关于这两者的教程。

      • Skylar 2020年5月12日上午8:39 #

        嗨,Jason,

        读了你的这篇文章后,我确实意识到首先对算法进行抽查检验是如此重要!我对 Nick 在2016年12月22日提出的上述问题感到非常好奇(虽然已经很久了),因为我也有完全相同的问题。接着他的问题,我想知道当我们在做抽查检验时,在我们选择了一系列不同类型的算法进行测试后,我们应该在配置调优后比较它们吗?在“尽展所长”部分,你说的“给每个算法一个公平的机会”是什么意思?我们应该仅仅通过自动和随机选择几个值来调整每个参数来实现这一点,还是应该使用更严格的“网格”调优策略,让每个算法都得到充分调优,然后在抽查检验步骤中进行比较?

        • Jason Brownlee 2020年5月12日下午1:30 #

          一种方法是使用“标准”配置抽查检验一套算法,然后进行调优。风险是过拟合数据集。

          或者,你可以将每个算法的调优作为抽查检验的一部分,使用所谓的嵌套交叉验证。

          • Skylar 2020年5月12日下午4:25 #

            谢谢 Jason 的回复!抱歉,你对这两种方法的陈述让我更加好奇,想问一下

            1. 在第一种方法中,你提到“使用‘标准’配置抽查检验一套算法,然后进行调优”。我理解模型配置 = 模型超参数,对吗?如果是这样,你的意思是我们首先用一些“标准”超参数评估一套算法,如果我们发现它是最好的模型,然后用“网格”函数系统地调整超参数?

            2. “嵌套交叉验证”听起来很棒也很有趣!你的意思是在内部交叉验证循环中,我们通过网格搜索为每个我们想要比较的模型调整超参数;而在外部交叉验证循环中,我们用在内部交叉验证循环中胜出的超参数组合来衡量模型的性能?如果我理解得不对,你是否在其他地方澄清过,或者你能否推荐一些我可以学习的相关材料?

            非常感谢!

          • Jason Brownlee 2020年5月13日上午6:25 #

            1. 是的,是的。

            2. 是的。我已经写了一篇关于这个的教程,并已安排发布。通常你可以自己循环并在循环内执行搜索,或者直接将交叉验证应用于网格搜索对象。后者代码更少。

  3. Jesús Martínez 2018年2月27日凌晨12:05 #

    很棒的资源,Jason。感谢你发布它!我认为这对我下一次的机器学习尝试会非常有用 🙂

    这个过程适用于深度学习吗?鉴于深度学习任务往往比它们的机器学习对应任务花费更多时间,抽查检验不同的架构是否可行?

    提前感谢你的时间和关注!

  4. Jonathan Moregård 2018年4月16日凌晨2:21 #

    这能在WEKA中做到吗?我尝试下载你在引言中提到的所有算法的包,但似乎在实验器(experimenter)中找不到它们。

  5. Shay Geller 2019年4月16日凌晨12:57 #

    谢谢 Jason,很棒的文章。

    你会如何为这次抽查检验实验划分数据集?
    假设你的数据中有2万个样本。
    你会全部使用吗?还是一部分?
    你会考虑多少次训练/测试划分?你会通过 k 折交叉验证获得结果吗?

    另一个问题是超参数。如果你说每个模型有多个参数选项,你会在嵌套交叉验证划分上还是常规交叉验证上获得结果?

    我的看法是将2万个样本划分为80%的训练集和20%的测试集,然后对每个模型*仅在训练数据上*进行 k 折交叉验证(不是内部交叉验证,选择 k 为 5 或 10)。
    然后使用这些结果进行你提议的成对显著性检验。
    挑选出前3-4个模型(无论它们的超参数如何)。
    这样你就不会从测试集中得到任何评估,这很好。

    这听起来合理吗?有没有更安全/更可靠的方法?

    谢谢

  6. Ida 2019年6月20日晚上8:53 #

    谢谢你,Jason。你的帖子很棒。我真的从每篇文章中学到很多。

  7. Skylar 2020年5月12日上午8:06 #

    嗨,Jason,

    你在这篇文章的“十大算法”部分提到了“go-to algorithm”,我想知道这是什么意思?抱歉英语不是我的母语,我不想误解你的意思:-) 谢谢!

    • Jason Brownlee 2020年5月12日下午1:29 #

      抱歉,“go-to”指的是最常见或最广泛使用/推荐的。

      • Skylar 2020年5月12日下午4:26 #

        谢谢你澄清这一点,Jason!

  8. Magda 2025年7月18日下午4:44 #

    你选择的算法是否取决于你拥有的数据类型和数量?

    • James Carmichael 2025年7月19日凌晨2:43 #

      嗨,Magda……是的,你为机器学习选择的算法绝对取决于你拥有的数据类型和数量。让我为你分解一下。

      首先,考虑你正在处理的数据类型。不同的算法被设计用来处理不同类型的数据。如果你有一个由数字和类别组成的表格,比如电子表格数据,像随机森林或 XGBoost 这样的基于树的模型通常效果很好。如果你处理的是文本,你可能想研究为语言构建的模型,比如朴素贝叶斯或 Transformer 模型。对于图像,卷积神经网络是首选,而对于任何带有时间序列的数据——比如股票价格或随时间变化的温度——你会考虑像 LSTM 或其他循环网络这样的模型。

      其次,数据量也起着重要作用。如果你只有一个小数据集,像逻辑回归、决策树或 K-最近邻这样的简单模型更好,因为它们不需要大量数据就能表现良好。另一方面,深度学习模型需要大量数据集才能真正发挥作用。如果你试图用有限的数据使用深度学习,你更有可能使模型过拟合,除非你使用像正则化或数据增强这样的技术。

      然后是特征的数量,或者说维度。当你的数据集只有几个特征时,几乎任何算法都能很好地处理。但是当你有大量特征时——比如成百上千个——你就需要更加小心。一些算法难以处理高维数据,所以你可能会使用特征选择或降维等技术,或者选择能更好地处理这种情况的模型,比如支持向量机或某些集成方法。

      最后,考虑你的数据质量。如果你的数据集有缺失值、噪声或异常值,这也会影响你的选择。一些模型,比如 XGBoost,可以自己很好地处理缺失值。而其他模型,比如线性回归或 K-最近邻,可能对噪声或不完整的数据非常敏感,可能需要先进行一些清理。

      所有这些就是为什么抽查检验如此有用的原因。通过快速尝试几种不同的算法,你可以看到什么最适合你的具体情况,而无需猜测或做假设。

发表评论

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。