Python Stacking 模型原理(两种方法)

1、原理

包括初级学习器和次级学习器

  • 初级学习器:个体学习器(用于数据集的初步训练)
  • 次级学习器:将初级学习器结合的学习器(将初级学习器得到的训练集进行训练)

2、第一种方法(将全部数据用于训练)

大致如下图:
在这里插入图片描述

  • 1 将X和Y分别输入到三个模型中去(三个模型可以不相同|比如RF、Lightgbm、GDBT)
  • 2 对于每一个模型而言:都输出一个预测结果
  • 3 将【三个预测结果+真实数据】按照列拼接生成中间训练集
  • 4 将中间训练集引入次级学习器(次级学习器不宜太复杂)
  • 5 得到最终预测结果
    PS:这种方法也可以将数据集分为训练集和测试集,只不过这里没有分
    将所有数据作为训练集,最终带入模型
    上述这种操作会导致模型过拟合,为了避免过拟合,我们引入KFold

3、第二种方法(引入K折交叉-避免过拟合)

在这里插入图片描述

  • 1 将数据分类训练集和测试集
  • 2 初级学习器的训练
    这里我们也假设5个初级学习器|将训练集分为5份(每次选择4份训练,最后一份用来验证)
    这里,我们用model1举例:
    利用KFlod进行分割,图中的四个蓝块用于学习,黄块用于测试;
    5个模型每次测试的数据集不同
    将这5个模型的测试数据集拼接得到第一个结果数据集
    model2-modl5也是类似的
    总之:这样就得到了五个结果数据集(这5个结果数据集的大小相同)
  • 3 将五个结果数据集真实标签合并生成中间训练集
  • 4 次级学习器的训练:将中间训练集引入次级学习器
  • 5 对于test_data:
    引入5个初级学习器-得到五个结果数据集-生成中间训练集(将五个结果数据集和数据标签合并)-将中间训练集引入次级学习器-得到结果

注意:

对于这5个模型:KFold的顺序必须要保持一致
并且,五个结果数据集的数据顺序必须和真实标签的数据顺序完全相同

4、总结

第一种方法和第二种方法区别主要在于KFold是否使用

学习链接:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Stacking是一种模型融合的方法,它将多个基础模型的输出作为特征输入到一个元模型中,从而提高模型预测性能。 在Python中,可以使用scikit-learn库中的StackingRegressor或StackingClassifier类来实现Stacking模型融合。 在PyTorch中,可以使用torchmeta库中的MetaLearner类来实现Stacking模型融合。MetaLearner类可以接受多个基础模型作为输入,在元学习阶段训练一个元模型,然后在测试阶段使用元模型进行预测。 以下是一个使用PyTorch和torchmeta库实现Stacking模型融合的例子: ``` python import torch from torchmeta.datasets import Sinusoid from torchmeta.utils.data import BatchMetaDataLoader from torchmeta.modules import (MetaModule, MetaSequential, MetaLinear) class StackedModel(MetaModule): def __init__(self, models): super(StackedModel, self).__init__() self.models = MetaSequential(*models) self.meta_model = MetaLinear(2, 1) def forward(self, inputs, params=None): outputs = [model(inputs) for model in self.models] stacked = torch.cat(outputs, dim=1) return self.meta_model(stacked, params=params) models = [MetaSequential(MetaLinear(1, 8), torch.nn.ReLU(), MetaLinear(8, 1)) for i in range(5)] stacked_model = StackedModel(models) dataset = Sinusoid(num_samples_per_task=10, num_tasks=1000) dataloader = BatchMetaDataLoader(dataset, batch_size=16, num_workers=4) optimizer = torch.optim.Adam(stacked_model.parameters(), lr=0.001) for batch in dataloader: x, y = batch["train"] x = x.view(x.size(0), -1) y = y.view(y.size(0), -1) loss = stacked_model.loss(x, y) optimizer.zero_grad() loss.backward() optimizer.step() ``` 在这个例子中,我们使用了五个基础模型,每个基础模型都是一个具有两个隐藏层的前馈神经网络。在元学习阶段,我们使用这些基础模型的输出作为特征输入到一个线性回归模型中,来预测新任务的输出。在训练阶段,我们使用Sinusoid数据集来训练这些基础模型和元模型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值