Warm tip: This article is reproduced from serverfault.com, please click

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

(machine learning - How to stack neural network and xgboost model?)

发布于 2020-11-28 15:36:22

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

Questioner
Gaurav Pant
Viewed
0
jottbe 2020-11-29 21:03:11

这个问题不能明确回答。我建议同时检查两种可能性,然后选择效果最好的一种。

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

我想,你知道将NN的输出用作XGBoost的输入所要做的事情。你应该花一些时间,了解如何处理测试和训练数据(请参见下文)。使用“概率”而不是二进制标签。当然,你也可以反之亦然,以便NN获得XGBoost模型的输出作为附加输入。

使用投票分类器

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

区别

最大的区别在于,第一种可能性是XGBoost模型可以学习,NN在哪些区域是弱的,在哪个区域是强的,而VotingClassifier两种模型的输出对所有样本均被加权,并且它依赖于假设如果他们对特定输入记录的资格不太确定,则模型输出的“概率”不太接近0/1。但是这个假设可能并不总是正确的。

火车/测试数据的处理

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