使用广义堆叠集成进行预测的数据形式是什么?

数据挖掘 集成建模 概括 集成学习
2022-03-11 05:37:13

我对如何拆分训练数据以及在使用广义堆叠时对哪些数据级别 0 进行预测感到非常困惑。这个问题与我的类似,但答案不够清楚:

1 级模型的预测如何成为堆叠泛化中新模型的训练集。

我的理解是训练集是分裂的,基础模型在一个分裂上训练,而预测是在另一个分裂上进行的。这些预测现在成为新数据集的特征。每个模型的预测一列,以及包含这些预测的基本事实的列。

  1. 将训练数据拆分为训练/测试。
  2. 在训练拆分上训练基础模型。
  3. 对测试拆分进行预测(根据链接的答案,为此使用 k-fold CV)。
  4. 为每个模型创建一个特征,用该模型的预测填充它
  5. 为这些预测的基本事实创建一个特征。
  6. 创建一个新模型并根据这些预测和基本事实特征对其进行训练。

问题 1:这些是用于训练“元”模型的唯一特征吗?换句话说,没有包含原始数据的实际特征吗?链接的答案说包含原始数据是很常见的,但我没有在其他地方读到它。

问题2:如果上述算法是正确的,那么做预测时数据的形式是什么?似乎它还必须将预测作为自变量。如果是这样,这意味着再次通过所有基本模型运行所有新的传入数据,对吗?

问题 3:我一直看到对第一级预测的“不折叠”要求。似乎如上所述进行简单的训练/测试拆分可以实现这一点。但是,您不希望第三次拆分来测试组合模型的泛化性吗?或者这种类型的合奏是否足够防弹而不用担心它?

1个回答

Q1。 这可以通过任何一种方式完成。您可以只使用基本模型预测,或者那些和所有原始特征,或者介于两者之间的任何地方。传递原始特征可能被称为“特征加权堆叠”,其思想是元估计器可以了解到某些基本模型在原始数据的某些子集上更好(但 AIUI的原始方法是选择/设计更有用的子集特征,而不是简单地传递所有原始特征;我认为这取决于上下文)。

例如,passthroughsklearn 中的参数StackingClassifier传递原始数据集,use.featmlr 中也是如此makeStackedLearner

Q2。 当然,进行预测需要每个基本模型进行预测(这可以并行完成),然后将其传递给元估计器。

Q3。 是的,一个简单的拆分足以防止在更天真的堆叠中发生的数据泄漏,其中元估计器使用基础模型在他们自己的训练集上的“预测”进行拟合。是的,您将需要另一个测试集来评估集成的性能。通常建议对基础模型进行 k 折交叉验证,以便所有模型都可以使用更多数据进行训练。