如何堆叠神经网络和xgboost模型?

How to stack neural network and xgboost model?

我已经为同一个问题训练了一个神经网络和一个 XGBoost 模型,现在我很困惑我应该如何堆叠它们。我应该只将神经网络的输出作为参数传递给 XGBoost 模型,还是应该单独对它们的结果进行加权?哪个更好?

这个问题无法明确回答。我建议检查两种可能性并选择最有效的一种。

使用一个模型的输出作为另一个模型的输入

我想,您知道,要将 NN 的输出用作 XGBoost 的输入,您必须做什么。您应该花一些时间了解如何处理测试和训练数据(见下文)。为此使用“概率”而不是二进制标签。当然,你也可以反过来试试,让神经网络得到XGBoost模型的输出作为额外的输入。

使用投票class选择器

另一种可能性是 VotingClassifier 使用软投票。您可以为此使用 VotingClassifier(voting='soft')(准确地说是 sklearn.ensemble.VotingClassifier)。你也可以在这里玩弄重量。

差异

最大的区别是,第一种可能性 XGBoost 模型可能会学习神经网络在哪些领域较弱,哪些领域较强,而 VotingClassifier 两个模型的输出是相同的对所有样本加权,它依赖于这样的假设,即如果模型对特定输入记录的预测不太自信,则模型输出的“概率”不那么接近 0 / 1。但这个假设可能并不总是正确的。

处理 Train/Testdata

在这两种情况下,您都需要考虑应该如何处理 train/test 数据。理想情况下,train/test 数据应该以相同的方式对两个模型进行拆分。否则,您可能会引入某种数据泄漏问题。 对于 VotingClassifier 这不是问题,因为它可以用作常规的 skearn 模型 class。对于第一种方法(模型 1 的输出是模型 2 的一个特征),您应该确保使用完全相同的记录进行训练-测试-拆分(或交叉验证)。如果你不这样做,你将 运行 冒着在模型 1 训练集中的记录上验证第二个模型输出的风险(当然除了附加功能),这显然可以导致数据泄漏问题,导致得分似乎比模型在看不见的生产数据上的实际表现更好。