模型堆叠 - 性能不佳

机器算法验证 机器学习 分类 神经网络 堆叠
2022-04-08 19:58:58

我正在kaggle 比赛中尝试模型堆叠。然而,竞争对手试图做什么是无关紧要的。

我认为我做模型堆叠的方法是不正确的。

我有 4 种不同的型号:

  1. 具有密集特征的 xgboost 模型(数字,可以订购)。

  2. 具有稀疏特征的 adaboost 模型(非数字特征,先进行标签编码,然后进行热编码)。

  3. 具有密集特征的 xghoost 模型(使用 nltk 对文本的 vader 进行情感分析)。

这些模型生成多类问题的概率,并输入最终的神经网络模型,结合它们的结果,然后生成另一组多类问题的概率。

然而,我尝试加入的模型越多,模型就越糟糕。例如,如果我只使用第一个模型,我会得到 73% 的准确率,但随着每个模型的添加,准确率会下降到 70% 以下,kaggle 的分数从 0.6X 增加到 1.0 以上。

这种方法不正确吗?

3个回答

听起来您可能没有正确生成“概率”(又名“一级”数据)。这些预测值应该是来自基础学习器的交叉验证预测值(或者有时人们使用单独的保留集来生成这些预测值)。我的猜测是您使用的是专门从训练集中生成的预测,这会导致过度拟合。

以下是一些参考资料,它们更详细地解释了一级数据集的构建:

很快,我们将发布支持 XGBoost 的 H2O ,因此您应该能够在 H2O 中使用Stacked Ensemble方法更轻松地集成 XGBoost 模型。或者您可以暂时使用 H2O 模型并跳过手动构建集成。

如果在集成模型的正确预测中存在大量重叠,则相对于基本模型而言,堆叠可能会带来较差的性能。此外,与使用较少数量的集成模型相比,使用大量输入模型的堆叠往往做得更好。

在处理大量模型混合时,很容易弄乱第一阶段模型或看不到信息的泄漏。正如@Erin LeDell 所说,您应该确保从第一阶段的交叉验证预测中学习第二阶段。如果您有兴趣,我写了以下有关混合的教程:

Python中的混合介绍(面向方法和实现)

为什么混合有效?(关于这种方法成功的理论论证)