高效调整XGBoost参数你好 @russ_wolfinger ,
我一直在使用XGBoost构建模型,并将它们与其他树模型和非树模型(例如NN等)进行比较。我对Nate采取了类似的方法,保留了原始数据集的一部分(位于完全不同的数据表中),然后使用模型比较平台查看这些模型与测试数据集之间的比较情况。
我发现XGBoost在测试数据集上的表现不如预期。我发现引导林目前做得更好。我已经比较了默认值和优化表XGBoost的最佳输出。可能是因为我没有很好地调整拟合度,所以我想知道是否有一种更有效的方法来调整拟合度,因为有很多不同的参数可以修改。
我仔细阅读了这些示例,并阅读了PDF帮助中引用的在线文档,但是在调整模型时没有太多实用帮助的描述。需要注意的是,我使用的是单一保留验证,而不是k折交叉验证。最好先构建一个可能会稍微过拟合的非常复杂的模型,然后再将其与其他参数一起修剪以使其更加保守?
DS
回复:有效调整XGBoost参数你好 @russ_wolfinger ,
感谢您提供更新的信息。在将XGBoost调整到我可能接近的其他平台之后,我确实尽我所能测试了优化的增强树和自举森林对XGBoost的输出,并且输出之间具有很好的相关性。不精确,但非常接近!
按照我之前发布的链接中的步骤进行操作,确实有助于更好地调整模型。
在其他一些反馈方面:
1。我最近了解了“比较”下的“删除显示的模型”的作用,正如所说的那样,但是我不清楚如果未选中某个框,它将保留它。这是通过验证R ^ 2对数据表进行排序后消除可能的拟合的一种有用方法。
2。我已经注意到,在运行优化设计时,重要的是要确保第一列具有与“最小值/最大值”列相同的固定值,或者在第一列与第二列之间(如果有所不同)以使其正常工作。有几次我正在调整另一个值,例如min_child_weight,并为迭代输入了固定值(例如Min / Max 150),但是第一列的值保留为100。在这种情况下,它将迭代次数保持为100,而不是150。我认为,如果将最小值/最大值设置为相同的值,则第一列应拉出该值,并像使用非固定参数的调整表一样重新填充它。在下面的示例中,我正在调整max_depth和min_child_weight,但是有几个实例,即使将min / max设置为387,我也将迭代次数保留为100。我必须手动返回并更改为387才能正确计算。

谢谢!,
DS
回复:有效调整XGBoost参数你好 @DS ,
感谢您继续追求这一目标。 我最近才发现并解决了公式元数据中的两个问题,这些问题目前可能会在模型比较平台中对XGBoost结果产生不利影响。 这些和其他一些更新将在几个月后的JMP Pro 16 Early Adopter中提供。 同时,您可以直接在JMP表中尝试与Boosted Tree平台进行一些基本比较。
以下参数直接在Boosted Tree和XGBoost之间映射:
- 层数<->迭代
- 每棵树的分割<-> max_depth
- 学习率<-> learning_rate
- 最小大小分割<-> min_child_weight
- 行采样率<->二次采样
- 列采样率<-> colsample_bytree
将XGBoost高级参数grow_policy更改为“ lossguide”可能会有所帮助。 如您所指示,尝试拟合并保存来自两个相似模型的预测,然后将预测相互绘制。 它们应该高度相关。
您猜到了“高级选项”下的“调整设计表”。 您需要设置一个单独的JMP表,其列名与XGBoost参数名称完全匹配,然后在参数框中手动键入该JMP表的名称。 您可以从头开始手动创建表,也可以右键单击“模型比较表”>“另存为数据表”开始使用。 这样就可以跨所有参数指定任意设计,但是此时仅经过了轻度的测试,因此请确保仔细检查结果。
回复:有效调整XGBoost参数你好 @russ_wolfinger ,
感谢您的信息。我发现这篇文章非常有帮助,至少在通过直接示例和迭代逐步方法来优化XGBoost方面很有帮助。
https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
我的特殊情况大约有3500个训练行和1000个测试行。如前所述,我的测试行位于一个单独的数据表中,我将该数据表连接到第一个数据表,然后比较模型-这是为了找出哪个模型实际上对未使用的数据集预测最佳。另外,我将3500个训练行划分为80/20训练/验证行,并按我正在建模的Y输出进行分层。
我将通过一些不同的调整方案来研究最有效的方法。但是,我想做的一件事是验证XGBoost是否可以给我“相同”的输出,例如引导森林。是否可以从引导林或增强树中获取参数并将其转换为XGBoost中的适当设置?原则上,XGBoost应该给出几乎相同的结果,但是要快得多。我已经尝试阅读一些有关如何执行此操作的文章,但我仍在努力将其他平台的设置转换为XGBoost。
比较模型平台对XGBoost模型的评估是否可能不同?
一些更明确的问题:
有没有一种方法可以从XGBoost平台确定树的数量?这是“迭代”字段吗?
我们可以为平台提供自己的调整设计表吗?在“高级选项”下,有一个带有该名称的字段,但是为空。如果我们有自己的调整表,是否可以在其中输入其名称?
谢谢,
DS
回复:有效调整XGBoost参数你好 @DS ,非常感谢您的反馈。 有一些不错的手动方法可以进行调整。 我只是尝试使用谷歌搜索“ tuning xgboost”,前几个链接看起来很合理。 这些可能被认为是一门艺术,而不是科学,但是它们有助于阐明每个参数的作用,并就XGBoost的工作原理建立一个整体的直觉。
如果您有机会分享或发布设置,我很想知道您的设置。 在许多比较中,以及在像Kaggle这样的竞争环境中,我发现XGBoost的性能更好。 随着数据集大小的增加,性能提升趋于变得更强。
听起来您正在进行经典的训练验证测试拆分。 可能有必要使用不同的拆分多次运行此过程,以确定性能估计的稳定性。
k折的一个优点是,您会获得针对k个模型拟合的“袋装”预测变量,并且它几乎总是比在一部分数据上训练的单个模型更好。 另一种方法是使用您喜欢的任何验证方法进行调整,然后在最后使用整个训练+验证数据进行一次最终拟合。