原文:
www.kdnuggets.com/2019/10/choosing-machine-learning-model.html
评论
作者 Lavanya Shukla,Weights and Biases。
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织进行 IT 工作
众多闪亮的模型可能让人不知所措,这意味着很多时候,人们会回到几个他们最信任的模型,并在所有新问题上使用这些模型。这可能导致次优结果。
今天我们将学习如何快速高效地缩小可用模型的范围,以找到最有可能在你的问题类型上表现最佳的模型。我们还将了解如何使用 Weights and Biases 跟踪我们的模型表现并进行比较。
你可以在这里找到配套代码。
我们将涵盖的内容
-
竞争数据科学与现实世界中的模型选择
-
模型的皇家大战
-
比较模型
让我们开始吧!
与《魔戒》不同,在机器学习中,没有一个模型能够统治所有其他模型。不同类别的模型擅长于建模不同类型数据集的底层模式。例如,决策树在数据具有复杂形状的情况下表现良好。
线性模型在数据集线性可分的情况下效果最佳:
在我们开始之前,让我们更深入地探讨现实世界中的模型选择与竞争数据科学中的模型选择之间的差异。
正如 William Vorhies 在他的博客文章中所说,“Kaggle 竞赛就像数据科学的方程式赛车。获胜者在第四位小数点上超越对手,就像方程式 1 赛车一样,我们中的大多数人不会把它们误认为是日常驾驶的汽车。投入的时间和有时极端的技术在数据科学生产环境中并不合适。”
Kaggle 模型确实像赛车一样,因为它们并不是为日常使用而构建的。现实世界的生产模型更像是雷克萨斯——可靠但不炫目。
Kaggle 竞赛和现实世界优化的内容截然不同,其中一些关键区别包括:
问题定义
现实世界允许你定义问题并选择一个能够 encapsulate 成功的度量标准。这使你能够优化一个比单一指标更复杂的效用函数,而 Kaggle 竞赛则提供一个预定义的单一指标,并且不允许你高效地定义问题。
指标
在现实世界中,我们关注推断和训练速度、资源和部署限制以及其他性能指标,而在 Kaggle 竞赛中,我们只关心一个评估指标。假设我们有一个准确率为 0.98 的模型,它非常消耗资源和时间,而另一个准确率为 0.95 的模型则更快且计算量更小。在现实世界中,对于许多领域,我们可能更倾向于选择 0.95 准确率的模型,因为我们可能更关注推断时间。在 Kaggle 竞赛中,训练模型所需的时间或所需的 GPU 数量并不重要,更高的准确率总是更好。
可解释性
同样,在现实世界中,我们更喜欢那些易于向利益相关者解释的简单模型,而在 Kaggle 中我们对模型复杂性毫不在意。模型可解释性很重要,因为它使我们能够采取具体行动来解决潜在问题。例如,在现实世界中,查看我们的模型并能够看到一个特征(例如,街道上的坑洼)与问题(例如,街道上的汽车事故发生概率)之间的关联,比将预测准确度提高 0.005% 更有帮助。
数据质量
最后,在 Kaggle 竞赛中,我们的数据集是由他人收集和整理的。任何做过数据科学的人都知道,现实生活中几乎不会这样。但能够收集和构建我们的数据也让我们对数据科学过程有了更多控制权。
激励
这些因素促使我们花费大量时间来调整超参数,以从模型中提取最后一滴性能,有时还需要复杂的特征工程方法。虽然 Kaggle 竞赛是学习数据科学和特征工程的绝佳途径,但它们并没有涉及诸如模型可解释性、问题定义或部署限制等现实世界的问题。
现在是时候开始选择模型了!
在选择我们要测试的初始模型时,我们需要考虑几个方面:
选择一组多样的初始模型
不同类别的模型擅长建模数据中不同类型的潜在模式。因此,一个好的第一步是快速测试几种不同类别的模型,以了解哪些模型最有效地捕捉了数据集的潜在结构!在我们的问题类型(回归、分类、聚类)的范围内,我们希望尝试混合树模型、实例模型和核模型。从每个类别中选择一个模型进行测试。我们将在下面的“待试模型”部分详细讨论不同的模型类型。
为每个模型尝试几种不同的参数
虽然我们不希望花太多时间找到最佳的超参数组合,但我们确实希望尝试几种不同的超参数组合,以使每个模型类别都有机会表现良好。
挑选最强的竞争者
我们可以利用这一阶段表现最佳的模型来帮助我们直观了解我们想深入研究的模型类别。你的 Weights and Biases 仪表板将指导你找到最适合你问题的模型类别。
深入研究表现最佳的模型类别中的模型。
接下来,我们选择更多属于上述表现最佳的模型类别的模型!例如,如果线性回归似乎效果最好,那么尝试 lasso 或 ridge 回归也是一个好主意。
更详细地探索超参数空间。
在这个阶段,我建议你花时间调整候选模型的超参数。(本系列的下一篇文章将深入探讨选择最佳超参数的直觉。)在这一阶段结束时,你应该拥有所有最强模型的最佳版本。
从多样化的模型中挑选最终提交。 理想情况下,我们希望从多个类别的模型中选择最佳模型。这是因为如果你只从一个类别的模型中做选择,并且这个类别恰好是错误的,那么你的所有提交都会表现不佳。Kaggle 比赛通常允许你为最终提交选择多个条目。我建议选择来自不同类别的最强模型的预测,以在提交中增加一些冗余。
排行榜不是你的朋友,但交叉验证分数是。 最重要的是要记住,公共排行榜不是你的朋友。仅仅根据公共排行榜分数来选择模型会导致过拟合训练数据集。当比赛结束后,私有排行榜揭晓时,有时你可能会看到排名大幅下跌。通过在训练模型时使用交叉验证,你可以避免这个小陷阱。然后选择交叉验证分数最佳的模型,而不是排行榜分数最佳的模型。这样,你可以通过对比模型在多个验证集上的表现来抵消过拟合,而不是仅仅依赖于公共排行榜使用的那一部分测试数据。
资源限制。 不同的模型会消耗不同类型的资源,了解你是否将模型部署在具有小硬盘和处理器的 IoT/移动设备上,还是在云中,对选择合适的模型至关重要。
训练时间 vs. 预测时间 vs. 准确率。 了解你优化的指标是选择正确模型的关键。例如,自动驾驶汽车需要极快的预测时间,而欺诈检测系统需要快速更新模型,以应对最新的钓鱼攻击。对于像医疗诊断这样的情况,我们更关心准确率(或 ROC 曲线下面积),而不是训练时间。
复杂性 vs. 可解释性的权衡。 更复杂的模型可以使用数量级更多的特征进行训练和预测,但如果训练得当,可以捕捉数据集中非常有趣的模式。然而,这也使得模型变得复杂,更难以解释。了解向利益相关者清晰解释模型的重要性与捕捉一些有趣趋势而放弃可解释性之间的平衡是选择模型的关键。
可扩展性。 了解你的模型需要多快、多大地扩展可以帮助你适当地缩小选择范围。
训练数据的大小。 对于非常大的数据集或具有许多特征的数据集,神经网络或提升树可能是一个很好的选择,而较小的数据集可能更适合使用逻辑回归、朴素贝叶斯或 KNN。
参数数量。 拥有大量参数的模型可以提供很大的灵活性,从而获得非常好的性能。然而,可能有些情况下你没有时间从头开始训练神经网络的参数。在这种情况下,一个开箱即用的模型会是更好的选择!
Weights and Biases 让你只需一行代码就能跟踪和比较模型的性能。
一旦你选择了想尝试的模型,训练它们,并简单地添加*wandb.log({‘score’: cv_score})*来记录你的模型状态。训练完成后,你可以在一个简单的仪表板中比较你的模型性能!
你可以在这里找到高效完成此任务的代码。我鼓励你分叉这个 kernel并尝试代码!
就是这样,现在你拥有了选择适合你问题的模型所需的所有工具!
模型选择可能非常复杂,但我希望本指南能为你提供一些启示,并为选择模型提供一个良好的框架。
原始。已获许可转载。
简介: Lavanya 是 Weights and Biases 的机器学习工程师。她在 10 年前创立了普渡大学的 ACM SIGAI,并开始从事人工智能工作。在过去的生活中,她在 10 岁时自学编程,并在 14 岁时创建了她的第一个创业公司。她驱动于通过使用机器学习更好地理解我们周围的宇宙。
相关: