集成学习(ensemble learning)

本文主要基于西瓜书第8章的内容,以及自己对相关领域的理解整理而成

集成学习是通过构建并结合多个个体学习器来完成学习任务的。个体学习器要有一定的"准确性"和"多样性",即学习器不能太坏,且学习器间具有差异。事实上,个体学习器的"准确性"和"多样性"间存在冲突。

根据个体学习器的生成方式,集成学习分为『个体学习器间存在强依赖、必须串行生成的序列化方法』和『个体学习器间不存在强依赖、可同时生成的并行化方法』。前者的代表是boosting,后者的代表是bagging和随机森林。

从偏差-方差分解的角度看,Boosting主要关注降低偏差bias,因此Boosting可以基于泛化性能相当弱(这里可以理解为复杂度较低,学习能力较弱)的学习器构建出很强的集成,基学习器要求variance较低。Bagging主要关注降低方差variance,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显,基学习器要求bias较低,学习能力较强。

1. Boosting

Boosting是一族可将弱学习器提升为强学习器的算法:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器。如此重复训练T个基学习器后,将这T个学习器进行加权结合。

Boosting的算法描述如下表示:


image.png

1.1 AdaBoosting

1.1.1 指数损失函数

指数损失函数是分类任务0/1损失函数的consistent替代函数,由于该函数可微,具有更好的数学性质,因此我们用它替代0/1损失函数作为优化目标。

\ell_{\mathrm{exp}}(H | \mathcal{D})=\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H(\boldsymbol{x})}\right]

\mathcal{D}为概率分布,可简单理解为在数据集D中进行一次随机抽样,每个样本被取到的概率;\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}[\cdot]表示在概率分布\mathcal{D}上的期望,可简单理解为对数据集D以概率\mathcal{D}进行加权后的期望,进一步指数损失函数可写为

\begin{aligned} \ell_{\exp }(H | \mathcal{D}) &=\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H(\boldsymbol{x})}\right] \\ &=\sum_{\boldsymbol{x} \in D} \mathcal{D}(\boldsymbol{x}) e^{-f(\boldsymbol{x}) H(\boldsymbol{x})} \end{aligned}
其中\mathcal{D}_x是在数据分布\mathcal{D}上取得样本x的概率。

1.1.2AdaBoost的加性模型

AdaBoost算法可基于加性模型推导,即

H(\boldsymbol{x})=\sum_{t=1}^{T} \alpha_{t} h_{t}(\boldsymbol{x})

在该算法中,第一个基分类器h_1是通过将基学习算法用于初始数据分布而得;此后迭代生成h_t\alpha_t,当基分类器h_t基于分布\mathcal{D}_t产生后,该基分类器的权重\alpha_t应使得\alpha_th_t最小化指数损失函数。

\begin{aligned} \ell_{\exp }\left(\alpha_{t} h_{t} | \mathcal{D}_{t}\right) &=\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}_{t}}\left[e^{-f(\boldsymbol{x}) \alpha_{t} h_{t}(\boldsymbol{x})}\right] \\ &=\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}_{t}}\left[e^{-\alpha_{t}} \mathbb{I}\left(f(\boldsymbol{x})=h_{t}(\boldsymbol{x})\right)+e^{\alpha_{t}} \mathbb{I}\left(f(\boldsymbol{x}) \neq h_{t}(\boldsymbol{x})\right)\right] \\ &=e^{-\alpha_{t}} P_{\boldsymbol{x} \sim \mathcal{D}_{t}}\left(f(\boldsymbol{x})=h_{t}(\boldsymbol{x})\right)+e^{\alpha_{t}} P_{\boldsymbol{x} \sim \mathcal{D}_{t}}\left(f(\boldsymbol{x}) \neq h_{t}(\boldsymbol{x})\right) \\ &=e^{-\alpha_{t}}\left(1-\epsilon_{t}\right)+e^{\alpha_{t}} \epsilon_{t} \end{aligned}

其中\epsilon_t = P\left(h_{t}(\boldsymbol{x}) \neq f(\boldsymbol{x})\right)表示基分类器h_t与真实函数对样本x分类不一致的概率,即基分类器的分类正确率。
\ell_{\exp }\left(\alpha_{t} h_{t} | \mathcal{D}_{t}\right)\alpha_t求导后等于0,解得

\alpha_{t}=\frac{1}{2} \ln \left(\frac{1-\epsilon_{t}}{\epsilon_{t}}\right)

这就是AdaBoost算法的分类器权重更新公式,分类器h_t的权重\alpha_t仅与h_t的分类错误率\epsilon_{t}有关。

对于样本分布的更新策略,AdaBoost在获得H_{t-1} = \sum^i{h_i}后需要调整样本分布,使得下一轮基学习器h_t能够纠正H_{t-1}的一些错误,确切来说是对h_{t-1}分类错误的那些样本产生更大的关注,以降低整体的分类损失。从表达式上,h_t应最小化

\begin{aligned} \ell_{\exp }\left(H_{t-1}+h_{t} | \mathcal{D}\right) &=\mathbb{E}_{x \sim \mathcal{D}}\left[e^{-f(x)\left(H_{t-1}(x)+h_{t}(x)\right)}\right] \\ &=\mathbb{E}_{x \sim \mathcal{D}}\left[e^{-f(x) H_{t-1}(x)} e^{-f(x) h_{t}(x)}\right] \end{aligned}

根据西瓜书上的推导,上式等价于h_t应满足
h_{t}(\boldsymbol{x})=\underset{h}{\arg \min } \mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}_{t}}[\mathbb{I}(f(\boldsymbol{x}) \neq h(\boldsymbol{x}))]

其中\mathcal{D}_{t}是在原分布\mathcal{D}上的一个新分布,理想的h_t应在分布\mathcal{D}_{t}下最小化分类误差。\mathcal{D}_t的更新规则为:
\begin{aligned} \mathcal{D}_{t+1}(\boldsymbol{x}) &=\frac{\mathcal{D}(\boldsymbol{x}) e^{-f(\boldsymbol{x}) H_{t}(\boldsymbol{x})}}{\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t}(\boldsymbol{x})}\right]} \\ &=\frac{\mathcal{D}(\boldsymbol{x}) e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})} e^{-f(\boldsymbol{x}) \alpha_{t} h_{t}(\boldsymbol{x})}}{\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t}(\boldsymbol{x})}\right]} \\ &=\mathcal{D}_{t}(\boldsymbol{x}) \cdot e^{-f(\boldsymbol{x}) \alpha_{t} h_{t}(\boldsymbol{x})} \frac{\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t-1}(\boldsymbol{x})}\right]}{\mathbb{E}_{\boldsymbol{x} \sim \mathcal{D}}\left[e^{-f(\boldsymbol{x}) H_{t}(\boldsymbol{x})}\right]} \\ &=\mathcal{D}_{t}(\boldsymbol{x}) \cdot e^{-f(\boldsymbol{x}) \alpha_{t} h_{t}(\boldsymbol{x})} \cdot {Z_t}\end{aligned}

其中Z_t是一个常数。

至此,从基于加性模型迭代式优化指数损失函数的角度推导出了AdaBoost算法。

1.2 GBDT

待补充...

1.3 Boosting算法的相关特性

Boosting算法要求基学习器能够在特定的数据分布下学习,因为在Boosting算法训练每一个基学习器的时候应用的都是一个新分布下的数据。在实际应用中可以通过“重赋权法”(re-weighting)实施,可接受带权样本的基学习算法如决策树便于利用重赋权法调整分布。“重采样法”(re-sampling)也可使用,即根据样本分布对训练集重新进行采样。一般来说,这两种做法没有明显优劣。

需要注意的是,在Boosting算法每一轮训练出基学习器后,需检查当前生成的基学习器是否满足基本条件(即准确性,不能比随机猜测差),一旦不满足则当前基学习器被抛弃且学习过程应停止。

2. Bagging

Bagging是并行式集成学习方法的代表。Bagging的基础思想与自助采样法(bootstrap sampling)有关,对原训练集使用Bootstrap采样,然后基于采样集训练一个基学习器,重复这个过程T次即可得到T个基学习器,将这T个基学习器进行结合就完成了Bagging的基本流程。在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法。

Bagging的算法描述如下表示:


image.png

2.1 Bootstrap sampling

给定包含m个样本的数据集D,对其m次有进行放回的随机抽样,可得到含有m个样本的数据集D'。这样做有一部分数据会在D中出现多次,而另一部分数据在D中不出现。根据
\lim_{m \to \infty}(1-\frac{1}{m})^m = \frac{1}{e} \approx 0.368
可知约有36.8%的样本未出现在采样集D'中。

Bootstrap原本是一种用在模型评估中划分训练集/测试集的方法,在Bagging算法中用来改变原数据集的分布,来保证集成学习基学习器的“多样性”。

2.2 随机森林 Random Forest

随机森林(Random Forest, RF)是Bagging的一个变体。随机森林的基学习器选用的是决策树,并在这一集出上进一步在决策树训练过程中引入了随机属性选择:在对当前结点的属性集合(大小为d)选择最优属性时,先随机选择出一个k个属性的子集,再在子集上选择划分用的最优属性。一般情况下,推荐值k=\log_2d

Random Forest在Bagging对样本分布扰动的基础上,进一步对属性选择进行了扰动,这使得最终集成的泛化性能可通过个体学习器之间的差异增加而进一步提升。

3. 结合策略

完成基学习器的训练后,接下来需要选择合适的结合策略,将基学习器的输出结合起来形成最终的输出。
(1)
对于数值型输出h_i(\boldsymbol{x}) \in \mathbb{R},结合策略主要是“平均法”,又分为简单平均法和加权平均法。加权平均法的权重一般是从训练数据(以及基学习器在训练数据上的表现)学习而得。一般而言,在个体学习器性能相差较大时宜用加权平均法,而在个体学习器性能相近时宜使用简单平均法。
(2)
对分类任务来说,最常见的结合策略是“投票法”,又分为绝对多数投票法、相对多数投票法和加权投票法。对于可输出分类置信度的学习器来说,分类置信度可转化为类概率使用,也可使用类概率进行结合。
(3)
“学习法”是在训练数据很多时使用的一种强大的结合策略,即使用另一个学习器来结合。此时我们将基学习器称为初级学习器,用于结合的学习器称为次级学习器。
次级学习器的输入特征是各初级学习器的输出,样例标记仍是初级学习器样本的标记。一般来说,训练次级学习器时使用的训练集要与初级学习器训练时使用的训练集不同,以免过大的过拟合风险。可以使用交叉验证法产生次级学习器的训练样本。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容