用于集成的 Gridsearch XGBoost。我是否在训练集中包含基础学习者的第一级预测矩阵?

数据挖掘 Python scikit-学习 xgboost 合奏
2021-10-03 00:09:12

在将 xgboost 用作集成学习中的元学习器之前,我不太确定应该如何调整它。

我应该包含预测矩阵(即 df 包含来自各种基础学习器的预测结果列)还是应该只包含原始特征?

我已经尝试了这两种方法,仅使用 F1 分数调整的“n_estimators”作为交叉验证的指标。(学习率=0.1)

方法一:用pred矩阵+原始特征:

n_estimators = 1 (this means only one tree is included in the model, is this abnormal? )
F1 Score (Train): 0.907975 (suggest overfitting)

方法2:仅使用原始功能:

n_estimators = 1
F1 Score (Train): 0.39

对于这两种方法,我得到了相当不同的结果,这是有道理的,因为方法 1 的特征重要性图表明,第一级预测之一是最重要的。

我认为基础学习者的第一级预测应该包含在网格搜索中。有什么想法吗?

1个回答

您应该使用您希望它最终预测的任何数据来调整元估计器。这绝对应该包括基本模型预测(否则您实际上并没有集成),并且可能包括也可能不包括(某些)原始特征。

一个重要的注意事项:您不应该使用基础模型对自己的训练数据的“预测”来训练元估计器;这些更准确地称为估计而不是预测,因为基本模型已经获得了真相。一种常见的方法是从基础模型的交叉验证训练中训练元估计器进行非折叠预测。

如果基础模型非常好,那么 xgboost 模型可能只使用一棵树是合理的;它只需要调整来自基本模型的已经很好的预测。但是,考虑降低学习率或以其他方式增加正则化,看看是否更多的树可以表现得更好。