模型调整与模型拟合的特征顺序

数据挖掘 随机森林 xgboost 超参数调整
2022-03-15 06:47:47

假设相同的列(即特征)用于超参数调整和模型拟合,并且使用集成模型进行建模(例如,随机森林或 XGboost),那么在超参数调整过程中使用的列的顺序是否应该相同根据最佳超参数拟合模型时使用的列顺序?

我在我的 CV 管道中使用 sklearn 的 make_column_transformer 函数进行超参数调整。不幸的是,当将剩余参数设置为“passthrough”时,此函数会修改提供的列的顺序。我是否应该确保在拟合模型时保留相同的列顺序,或者只要我使用相同的功能,顺序就无关紧要。

1个回答

啊,我太快了,误解了你的问题!在这篇文章的底部,我将留下我的旧答案,回答为什么测试集需要具有相同的列顺序。

至于超参数选择与训练最终模型中数据的列顺序,不,我想没有真正的理由需要它们相同。在具有列子采样的树模型中,您是对的(在您的评论中)无论如何都会随机选择列,因此原始顺序无关紧要。即使您不使用列二次抽样,甚至对于其他模型:模型通常也不会使用列顺序作为信息;如果有的话,它被用作后备决胜局。(时间序列是一个明显的例外,但在这种情况下,数据可能不是以同样的方式呈现的。)

也就是说,使用相同的管道可能仍然是最佳实践,因此列顺序无论如何都是相同的。sklearn 的超参数调整器使这变得简单,refit=True默认情况下,只需根据找到的最佳超参数重新调整模型管道。


由于 sklearn 在 numpy 数组而不是 pandas 数据帧上运行(大多数 sklearn 步骤中的第一件事就是转换为数组),因此您需要确保列的到达顺序与训练数据的顺序相同。否则模型会将某些特征的值误认为是不同的特征!希望这实际上会破坏事情(例如错误的特征类型),但也许它会默默地做出非常糟糕的预测!

如果您使用管道,这应该不难。make_column_transformer和所有其他步骤)将以与训练数据相同的方式应用于测试数据,因此这些步骤之后的数组将具有正确顺序的列。(唉,如果你想深入研究结果,在管道的预处理部分之后将名称附加到列可能会很麻烦。)