机器学习笔记之集成学习(六)Stacking

引言

上一节介绍了基于 Gradient Boosting \text{Gradient Boosting} Gradient Boosting架构的经典模型——梯度提升树( Gradient Boosting Decision Tree,GBDT \text{Gradient Boosting Decision Tree,GBDT} Gradient Boosting Decision Tree,GBDT)。本节将介绍另一种集成学习思想—— Stacking \text{Stacking} Stacking

回顾: Bagging \text{Bagging} Bagging架构

给定数据集合 D = { ( x ( i ) , y ( i ) ) } i = 1 N \mathcal D = \{(x^{(i)},y^{(i)})\}_{i=1}^N D={(x(i),y(i))}i=1N,基于 Bagging \text{Bagging} Bagging架构的算法执行过程可表示为如下形式:

  • 使用自助采样法( Boostrapping Sampling \text{Boostrapping Sampling} Boostrapping Sampling)对原始数据集合 D \mathcal D D进行操作,每次 Boostrapping \text{Boostrapping} Boostrapping均会产生一个新的训练集 D k ∈ D \mathcal D_k \in \mathcal D DkD,重复执行 K \mathcal K K次,最终得到 K \mathcal K K个训练集:
    D 1 , D 2 , ⋯   , D K \mathcal D_1,\mathcal D_2,\cdots,\mathcal D_{\mathcal K} D1,D2,,DK
  • 针对每个训练集 D k ( k = 1 , 2 , ⋯   , K ) \mathcal D_k(k=1,2,\cdots,\mathcal K) Dk(k=1,2,,K)均安排一个模型 h k ( x ) h_k(x) hk(x)对其进行独立训练。我们称这些模型为基学习器( Base Learner \text{Base Learner} Base Learner)。相应地,最终会得到 K \mathcal K K基学习器
    h 1 ( x ) , h 2 ( x ) , ⋯   , h K ( x ) h_1(x),h_2(x),\cdots,h_{\mathcal K}(x) h1(x),h2(x),,hK(x)
  • 此时,得到训练好的模型 h k ( x ) ( k = 1 , 2 , ⋯   , K ) h_k(x)(k=1,2,\cdots,\mathcal K) hk(x)(k=1,2,,K)后,针对不同的任务类型,对 Bagging \text{Bagging} Bagging输出结果进行描述:
    • 回归任务( Regression Task \text{Regression Task} Regression Task): K \mathcal K K个基学习器预测结果取均值
    • 分类任务( Classification Task \text{Classification Task} Classification Task):对 K \mathcal K K个基学习器预测结果进行投票( Voting \text{Voting} Voting),选择投票多的结果作为最终归属分类

Stacking \text{Stacking} Stacking架构描述

同样给定数据集合 D = { ( x ( i ) , y ( i ) ) } i = 1 N \mathcal D = \{(x^{(i)},y^{(i)})\}_{i=1}^N D={(x(i),y(i))}i=1N,基于 Boosting \text{Boosting} Boosting架构的算法执行过程可表示为如下形式:

  • 选择 K \mathcal K K不同类别模型作为基学习器,并使用数据集 D \mathcal D D对每一个基学习器进行独立训练。最终得到 K \mathcal K K个训练好的基学习器:
    h 1 ( x ) , h 2 ( x ) , ⋯   , h K ( x ) h_1(x),h_2(x),\cdots,h_{\mathcal K}(x) h1(x),h2(x),,hK(x)
  • 假设关于某样本特征 x ( i ) x^{(i)} x(i),关于某具体任务的预测结果 y p r e d ( i ) y_{pred}^{(i)} ypred(i)可以视作:将各基学习器的预测结果 h 1 ( x ( i ) ) , h 2 ( x ( i ) ) , ⋯   , h K ( x ( i ) ) h_1(x^{(i)}),h_2(x^{(i)}),\cdots,h_{\mathcal K}(x^{(i)}) h1(x(i)),h2(x(i)),,hK(x(i))拼接 ( Concatenate ) (\text{Concatenate}) (Concatenate)起来,作为新的数据集 D ′ \mathcal D' D
    { D ′ = { ( z ( i ) , y ( i ) ) } i = 1 N z ( i ) = Concatenate [ h 1 ( x ( i ) ) , h 2 ( x ( i ) ) , ⋯   , h K ( x ( i ) ) ] i = 1 , 2 , ⋯   , N \begin{cases} \mathcal D' = \{(z^{(i)},y^{(i)})\}_{i=1}^N \\ z^{(i)} = \text{Concatenate}\left[h_1(x^{(i)}),h_2(x^{(i)}),\cdots,h_{\mathcal K}(x^{(i)})\right] \quad i=1,2,\cdots,N \end{cases} {D={(z(i),y(i))}i=1Nz(i)=Concatenate[h1(x(i)),h2(x(i)),,hK(x(i))]i=1,2,,N
    此时再次对 D ′ \mathcal D' D重新建模,最终得到关于样本特征 x ( i ) x^{(i)} x(i)预测结果 y p r e d ( i ) y_{pred}^{(i)} ypred(i)
    通常使用全连接层对 z ( i ) z^{(i)} z(i)进行学习。
    y p r e d ( i ) = DenseLayer ( z ( i ) ) \begin{aligned} y_{pred}^{(i)} & = \text{DenseLayer}(z^{(i)}) \\ \end{aligned} ypred(i)=DenseLayer(z(i))

Stacking VS Bagging \text{Stacking VS Bagging} Stacking VS Bagging

通过对 Stacking \text{Stacking} Stacking架构的描述,可以发现 Stacking \text{Stacking} Stacking架构 Bagging \text{Bagging} Bagging之间存在相似之处,它们本质上均是融合若干个基学习器的预测结果,以降低方差

但关于 Stacking \text{Stacking} Stacking核心区别在于:
再回首:
Bagging \text{Bagging} Bagging是在不同数据集合上训练同一类别模型;
Stacking \text{Stacking} Stacking是在相同数据集合上训练不同类别模型。
其核心思想是:针对不同模型对于相同数据预测结果的差异性,在各预测结果 Conbine \text{Conbine} Conbine过程中,起到降低方差的作用 -> 差异性因模型类别的差异而产生的。
相比之下, Bagging \text{Bagging} Bagging关于各预测结果的差异性很‘刻意’。依然以随机森林为例,为了保持各基学习器的差异性,我们设置参数故意让决策树有一定概率选择不到最优解,使其强行学习‘模糊/不够准确’。

  • Stacking \text{Stacking} Stacking架构的基学习器可以存在不同的模型类别;而 Bagging \text{Bagging} Bagging架构的基学习器均是同一类型的。例如随机森林( Random Forest,RF \text{Random Forest,RF} Random Forest,RF)。它的基学习器均是决策树( Decision Tree \text{Decision Tree} Decision Tree)。

    相比之下, Stacking \text{Stacking} Stacking可以使用不同的基学习器进行处理。例如随机森林、 GBDT \text{GBDT} GBDT多层感知机( Multilayer Perceptron,MLP \text{Multilayer Perceptron,MLP} Multilayer Perceptron,MLP)等等。

  • 相比于 Bagging \text{Bagging} Bagging架构对于数据集合的自助采样法,我们甚至不需要对数据集进行 Boostrap \text{Boostrap} Boostrap,直接用原始数据集 D \mathcal D D即可。因为各基学习器可能已经执行过采样操作了:
    从泛化的角度观察, Boostrap \text{Boostrap} Boostrap采样本身就是增加基学习器对于特征学习的多样性。而 Stacking \text{Stacking} Stacking已经将该多样性转移至不同类别的模型中。并且,该多样性不仅仅体现在模型结构,而且也可能体现在各模型对于特征的选择上。

  • Bagging \text{Bagging} Bagging架构针对不同任务通常使用均值、投票的方式获取结果,原因在于基学习器模型类别相同,对于数据预测的标尺( Scale \text{Scale} Scale)是相似的。

    Stacking \text{Stacking} Stacking不同类型的基学习器对于预测结果可能存在不同的标尺,那么关于各基学习器的预测结果的 Conbine \text{Conbine} Conbine问题 Stacking \text{Stacking} Stacking将每个基学习器的预测结果拼接起来,使用全连接神经网络进行重新学习,最终得到预测结果。

    • 这里关注的点在于,各预测结果 Concatenate \text{Concatenate} Concatenate的向量是可以通过神经网络学习的。当然也可以使用投票、均值的方法(均值就意味着各学习器权重相同),不绝对。
    • 从预测结果的角度观察,虽然各预测结果可能存在不同标尺,但是它们的预测方向是相似的。即:某个样本特征的预测标签结果大概率不会出现完全相反的情况。因而不一定需要非常复杂的模型去学习融合特征。
      Stacking架构描述
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静静的喝酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值