如何在模型筛选平台中修改超参数嗨,JMP专家,
我觉得 Model Screening 平台很好用,我已经通过 Tuning Design Table 搞清楚了超参数,想知道有没有办法在 Model Screening 平台中修改超参数,比如 JSL。
如果平台不能修改超参数,我可以使用文章中的默认参数吗?
期待你的答复
高级统计建模回复:如何在模型筛选平台中修改超参数嗨,维克多_G,
谢谢你的回复,这对我很有启发。我也可以尝试这种方法,首先使用模型筛选平台,然后使用适当的算法。
为了避免过度拟合,对于小数据,K折交叉验证是一种很好的方法。但是有些算法平台(不是 Model Screening)不支持 K-fold 交叉验证,比如 Bootstrap Forest、Boosted Tree、Baive Bayes。当然,分层公式(K 折)验证列不适合。因此,在模型筛选平台中选取最有前景的算法,并进行超参数优化后,您能否分享一些如何在小数据上更好地训练模型的经验?
最后,点击“运行所选”按钮后,我发现模型筛选平台中每个带有 K 折交叉验证的算法都可以自动生成验证折叠。那么,我可以在同一个算法中使用这个验证折叠和最佳超参数来避免过度拟合吗?
期待您的回音。
回复:如何在模型筛选平台中修改超参数你好@Wang123 ,
很高兴听到我的回答有帮助。
要成功使用机器学习,您需要在开始任何分析之前为机器学习项目设置策略和框架。大多数情况下,机器学习项目可能会失败,因为起点(数据收集注意事项)或结束阶段(测试条件和监控)没有得到很好的考虑和定义:
- 起点:思考您是如何收集数据的:您的数据集对于您要执行的任务有多大的代表性?数据是在什么背景下收集的:在观察性研究中,还是在 DoE 等受控实验中?数据采样和特征/变量分布是否与模型环境中发生的情况相似(例如变量范围/级别、类别或值之间的不平衡或平衡、响应分布、类似的测量设备性能、测量中的不确定性……)?
这些问题只是在使用数据进行机器学习时需要考虑和定义的一些示例,可以帮助您管理期望。
- 结束阶段:您需要知道如何测试最终模型。您是否已经拆分数据集并保留一小部分用于测试目的,或者您是否计划获取新数据来测试和监控模型的性能?
以下是与您的问题相关的一些其他建议和指导,以及其他评论:
- 为了避免任何误解,了解每组之间的用途和需求非常重要:
- 训练集:用于模型的实际训练,
- 验证集:用于模型优化(例如超参数微调、特征/阈值选择等)和模型选择,
- 测试集:用于对所选模型在新/未见数据上的泛化和预测性能评估。在此阶段,您不应该有多个模型相互竞争。
- 对于小数据集的情况,有几种方法可以实现模型的验证(模型比较和选择):
- 如果您处理的是小型数据集,请选择简单的算法。通常,模型中的(超)参数数量越多,您的训练数据集就需要越大,因为您需要更多数据来精确估计模型中的每个(超)参数。处理小型数据集时,我宁愿选择稳健的算法,例如随机森林、支持向量机和广义回归/分类。
我创建了一些 LinkedIn 文章来提供更多解释:- 随机森林
- 支持向量机
这两种算法要么只需要调整几个超参数,要么对超参数调整具有很强的鲁棒性(参见:上面提到的https://arxiv.org/abs/1802.09596 ),要么具有帮助它们避免过度拟合和减少预测方差的训练特性(例如随机森林中的引导样本部分)。
我不会使用增强树或增强算法,因为它们的重点是通过连续纠正先前的错误来尽可能减少偏差(系统性错误)。这使它们成为非常有效的预测算法,但它们高度敏感并受训练集的影响,可能具有较差的泛化性能和较高的方差。
更一般地,处理 ML 算法有两种方法:
- 您的数据集大小、约束和许多其他选择标准都会减少模型和可能性的数量,您只需尝试几个模型来选择最有希望的模型。这是我今年做的一个演示的录音,其中有一个空间填充混合 DoE 和机器学习的使用: 实验设计与机器学习之间的协同作用,用于增强领域 E... - JMP 用户社区如果您观看模型选择,您可能会对自己项目的选择标准有一些想法。
- 您不知道哪种模型可能表现更好,并且希望在算法之间进行第一次探索性建模测试/竞赛。在这种情况下,您可以尝试使用数据子集(60-80%)来训练模型并进行比较,或者如果您的数据集非常小,则将其与交叉验证一起用于完成第一部分探索。一旦您确定了有前途的算法,请尝试使用具有明确验证策略的单个模型平台(例如,使用固定种子进行分层 K 折交叉验证以实现可重复性)。
关于交叉验证和结果显示方式的最后一点,可能会有几个警告:
- 将显示每个折叠的结果。不要运行在特定折叠上训练和验证的模型,这将被视为“作弊”,因为您正在选择最佳数据拆分来提高模型性能,这会影响您期望在新数据/测试集上获得的整体性能。
- K 折交叉验证的名称具有误导性,因为它实际上不是一种验证方法,而是一种“稳健性测试”,用于查看模型在不同数据分区下的表现。请参阅: MFML 065 - 了解 k 折交叉验证 (youtube.com)
因此,此步骤中的重要信息不是模型在每次折叠上的单独表现,而是表现的规律性和相似性(所有折叠上的平均表现和标准偏差表现)。如果您在结果中看到差异/高方差,则可能表明该模型可能不适合您的任务和/或您的数据具有奇异的个别点(需要检查),这会混淆模型并阻止其概括/找到模式。
- 最后,交叉验证完成后,对于如何处理结果并没有共识。有些人会在整个数据集上重新训练所选模型,有些人会集成在每个折叠上训练的各个模型,或者堆叠预测……以下是有关此部署阶段的链接如何从评估到最终模型(substack.com)
选择对您来说更有意义的选项。
您还可以在此帖子中找到补充讨论和答案: 交叉验证 - 验证列方法
抱歉写得太长了,我希望这个长答案能对你有所帮助!:)
回复:如何在模型筛选平台中修改超参数嗨,维克多_G,
谢谢你的帮助。无论是带超参数调整功能的 Model Screening 平台,还是带 K-fold 功能的单个模型平台,都可以轻松解决我的问题。可惜这两个平台都缺少一些功能。
经过一番思考,我还想问一下以下步骤是否合适:
(1)分层抽样,80%用于训练,20%用于测试集。
(2)在训练集(80%)中,我使用 K 折交叉验证训练了多个机器学习算法在Model Screening平台,当然这一步用的是默认的超参数,经过对比发现部分算法是最优的,比如Bootstrap Forest。
(3)然后,我通过调优设计表明确了Bootstrap Forest的最优超参数。
(4)在训练集(80%)中,我用最优的超参数重新拟合了 Bootstrap Forest 算法。当然,我也可以拟合其他算法。
(5)在测试集(20%)中,进一步评估了Bootstrap Forest和其他算法的模型性能。
上述步骤在JMP中合适吗?
在步骤 2 中,我可以在文章中只报告使用默认超参数的模型比较结果(K 折交叉验证的结果)吗?当然,我们知道许多文章都是从步骤 3 开始,然后是步骤 2,因此它们报告与最优超参数的模型比较的结果。
在步骤 4 中,我没有设置任何交叉验证方法,这是正确的吗?或者还有其他方法吗?
期待您的回音。
回复:如何在模型筛选平台中修改超参数嗨,维克多_G,
你的回复很有意义。我知道如何制作 K-Folds 验证列。据我所知,有些算法平台不支持 K-fold 交叉验证,例如 Bootstrap Forest、Boosted Tree 和 Baive Bayes。这在 JMP 帮助中可用,网址为https://www.jmp.com/support/help/en/18.0/index.shtml#page/jmp/kfold-and-holdback-validation.shtml 。在这种情况下,我必须将我们的小数据分成训练、验证和测试集。有没有办法在这些算法平台(Bootstrap Forest、Boosted Tree 和 Baive Bayes)中使用 K-fold 交叉验证?
正如你所说“结果将显示在每个折叠上。不要运行在特定折叠上训练和验证的模型,这将被视为作弊...”,另一个人说“最后,一旦完成交叉验证,就没有对如何处理结果达成共识。有些人在整个数据集上重新训练选定的模型,有些人正在集成在每个折叠上训练的单个模型”。我不知道哪种方式更合适,在特定折叠中训练还是整个训练集?
期待您的回音。
回复:如何在模型筛选平台中修改超参数你好@Wang123 ,
抱歉,您说得对,在某些建模平台中,K 折交叉验证列的使用受到限制。
一种可能的解决方法是创建一个通用验证列公式(分层抽样,80% 为训练,20% 为验证),在模型平台中使用它,并使用“模拟”函数生成许多交叉验证样本和结果以评估稳健性。我在另一篇文章中描述了该方法: 已解决:回复:如何自动将许多重复验证汇总到一个输出选项卡中... - JMP 用户社区
关于你的第二个问题,我个人的观点是将各个模型的预测叠加起来,这样每个模型对最终预测的贡献都是一样的。这似乎是最中立的方法,可以减少偏差和(大部分)方差(“群体智慧”方法),并防止过度拟合。由于各个模型的贡献,这也可能是一个很好的机会来估计不确定性预测区间。
对于小数据集来说,集成过于复杂,因为各个模型的组合需要额外的验证,以确保最终的集成模型不会过度拟合并且能够概括。
根据您对 ML 算法的深入了解,您还可以选择使用整个数据集并在其上训练最终模型,并将交叉验证模型的结果与“未验证”模型进行比较,以发现任何过度拟合的迹象。
再次,使用简单模型和正则化/限制技术有助于防止过度拟合。
希望这个答案能帮助你,
回复:如何在模型筛选平台中修改超参数你好@Wang123 ,
我发现步骤 1)和 2)合适。
可以将步骤 3) 和 4) 结合起来,找到多个模型的最佳超参数,对其进行评估和比较,然后选择最终模型。您还需要为此步骤制定验证策略,因为在没有任何验证的情况下优化超参数会导致过度拟合。根据 (K 倍?) 验证集上超参数优化的结果,您可以选择一种看起来最合适的算法。
根据您的验证策略,您可以保持算法按原样训练(如果您已经使用验证集来比较和选择模型),或者如果您使用了 K 折交叉验证(从各个模型中获取平均预测),则可以进行模型堆叠。
在第 5 步中,您将评估最终模型在新数据和未见过的数据上的性能。此阶段应该只有 1 个算法/模型。验证用于比较和选择模型,而不是测试阶段。
关于您的问题:
“在步骤 2 中,我可以在文章中只报告使用默认超参数的模型比较结果(K 倍交叉验证的结果)吗?”:这取决于您想要展示/演示的内容。如果您想解释为什么选择某些特定模型,则可以使用步骤 2 的结果。如果您想强调超参数调整的重要性和好处(这对于某些稳健模型(如随机森林)来说并不总是很重要),那么比较所选算法的步骤 2 和步骤 3 的结果更有意义。
“在第 4 步中,我没有设置任何交叉验证方法,这是正确的吗?还是还有其他方法?”除非您使用稳健算法并有指标来确保您不会过度拟合,否则我不建议对整个训练集进行重新拟合。随机森林通常是稳健算法的良好示例,并通过袋外样本进行内部验证(用于连续响应): https://www.jmp.com/support/help/en/17.2/#page/jmp/overview-of-the-bootstrap-forest-platform.shtml#
比较袋内和袋外样本的指标可以帮助您评估随机森林是否过度拟合。
如果您使用不同的算法和/或不确定它的稳健性,只需保留上一步中优化的(和验证的!)模型(或者如果您使用 K 折交叉验证,则保留堆叠模型)。
希望这最后一个答案能帮助你,
附言:如果答案对您有帮助,请不要忘记将其“接受为解决方案”,这是其他 JMP 用户无需阅读所有内容即可快速找到解决方案的好方法。
回复:如何在模型筛选平台中修改超参数你好 Victor_G,
谢谢你的宝贵观点!这些对我很有帮助。