当前位置: 代码迷 >> 综合 >> 机器学习笔记(12)——Stacking(Stacked generalization)
  详细解决方案

机器学习笔记(12)——Stacking(Stacked generalization)

热度:12   发布时间:2023-11-14 00:08:28.0

Stacking (Stacked generalization)

1.概念

指训练一个模型用于组合(combine)其他各个模型。即首先我们先训练多个不同的模型,然后再以之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。

理论上,Stacking可以表示上面提到的各种Ensemble方法。然而,实际中,我们通常使用单层logistic回归作为组合模型。

先在整个训练数据集上通过bootstrapped抽样得到各个训练集合,得到一系列分类模型,称之为Tier 1分类器, 然后将输出用于训练Tier 2 分类器

潜在的一个思想是希望训练数据都得被正确的学习到了

比如某个分类器错误的学习到了特征空间里某个特定区域,因此错误分类就会来自这个区域,但是Tier 2分类器可能根据其他的分类器学习到正确的分类。交叉验证也通常用于训练Tier 1分类器:把这个训练集合分成T个块,Tier 1中的每个分类器根据各自余下的T-1块进行训练,并在T块(该块数据并未用于训练)上测试。之后将这些分类器的输出作为输入,在整个训练集合上训练Tier 2分类器。(这里未提及测试集,测试集是指不在任何训练过程中出现的数据)。

这里写图片描述

Stacking 方法比任何单一模型的效果都要好,而且不仅成功应用在了监督式学习中,也成功应用在了非监督式(概率密度估计)学习中。甚至应用于估计bagging模型的错误率

2.kaggle,Titanic中的Stacking应用:

数据的行数:train.csv有890行,也就是890个人,test.csv有418行(418个人)。

而数据的列数就看你保留了多少个feature了。

这里写图片描述

STEP1:

Train Data有890行。(请对应图中的上层部分)每1次的fold,都会生成 713行 小train, 178行 小test。我们用Model 1来训练 713行的小train,然后预测 178行 小test。预测的结果是长度为 178 的预测值。这样的动作走5次! 长度为178 的预测值 X 5 = 890 预测值,刚好和Train data长度吻合。这个890预测值是Model 1产生的,我们先存着,因为,一会让它将是第二层模型的训练来源。

这一步产生的预测值我们可以转成 890 X 1 (890 行,1列),记作 P1 (大写P)

STEP2:

接着说 Test Data 有 418 行。(请对应图中的下层部分,对对对,绿绿的那些框框)每1次的fold,713行 小train训练出来的Model 1要去预测我们全部的Test Data(全部!因为Test Data没有加入5-fold,所以每次都是全部!)。此时,Model 1的预测结果是长度为418的预测值。这样的动作走5次!我们可以得到一个 5 X 418 的预测值矩阵。然后我们根据行来就平均值,最后得到一个 1 X 418 的平均预测值。

这一步产生的预测值我们可以转成 418 X 1 (418行,1列),记作 p1 (小写p)

这是第一层的model1,假设你第一层有3个模型,这样你就会得到:来自5-fold的预测值矩阵 890 X 3,(P1,P2, P3) 和 来自Test Data预测值矩阵 418 X 3, (p1, p2, p3)。

STEP3:

第二层:来自5-fold的预测值矩阵 890 X 3 作为你的Train Data,训练第二层的模型

来自Test Data预测值矩阵 418 X 3 就是你的Test Data,用训练好的模型来预测他们吧

代码:

这里写图片描述

  相关解决方案