机器学习技法(林轩田)学习笔记:Lecture 7 & Lecture 8

Lecture 7:Blending and Bagging

Motivation of Aggregation

现在给出T个假设函数\(g_1,\cdots,g_T\),我们希望充分利用它们,得到一个更好的假设函数\(G\),我们有几种方法:

  • 1、用交叉验证的方法从T个g里选\(E_{val}\)最小的:\(G(x)=g_{t^*}(x),t^*=\arg\min_{t}E_{val}(g_t^-)\)
  • 2、均匀混合T个假设函数的输出结果。例如在二分类问题中,G输出T个假设函数的占多数的输出结果
  • 3、将T个假设函数的输出结果加权输出
  • 4、将T个假设函数的输出结果加权输出,但每个权重是关于输入x的函数\(q_t(x)\)

其中,第一种方法需要保证\(\min_{t}E_{val}(g_t^-)\)很小,才能保证很好的学习结果。但集成学习并不需要这个保证,它可以从很多个弱的假设函数g结合出更强的假设函数G

例如上图这个例子,假设现在已有三个弱假设函数(图中平行于坐标轴的三条灰线),通过集成学习可以得到更强的G(图中黑线),实现二分类。

Uniform Blending

Uniform Blending中,每个假设函数的权重都是1,例如在二分类中:

\[G(x)=\mathrm{sign}(\sum_{t=1}^T 1\cdot g_t(x))\]

在多分类问题中,就是

\[G(x)=\arg\max_{1\leq k\leq K}\sum_{t=1}^T 1\{ g_t(x)=k\}\]

在回归问题中,就是

\[G(x)=\frac 1 T \sum_{t=1}^T g_t(x)\]

当T个g完全相同时,G就等同于单个g了,G的效果没有提升;但当T个g的差异很大时,通过uniform blending得到的G的效果会显著提升

在回归问题中,

对于给定的单个输入x,

所以

(其中\(\varepsilon(g_t-G)^2\)表示\((g_t-G)^2\)在输入$x\sim \(某种概率分布\)P$的期望)

这个不等式解释了G的泛化误差比较小的原因

再考虑一个特殊的情况:T个线性回归的假设函数\(g_1,\cdots,g_T\)都是通过根据同一个概率分布,独立地随机采集N个样本得到训练集\(\mathcal D_t\),然后用相同的学习算法\(\mathcal A\)训练得到的,即\(g_t=\mathcal A(\mathcal D_t)\)

根据之前推出的不等式,可得:

等式右边第一项\(avg(\varepsilon(\cdots))\)被称为方差,表示不同训练集\(\mathcal D_t\)训练出的\(g_t\)之间的差距有多少;

第二项\(E_{oug}(\bar g)\)被称为偏差

Linear Blending

linear blending就是把所有的g的输出结果加权,例如在线性回归问题中,

\[G(x)=\sum_{t=1}^T \alpha_tg_t(x)\]

为了求出参数\(\alpha\),我们需要最优化:

注意参数\(\alpha_t\)不需要限制条件\(\alpha_t\geq 0\),因为\(\alpha_t<0\)时,让\(g_t(x)\)取反就相当于\(\alpha_t> 0\)

类似模型选择,这里我们也要把\(\mathcal D\)分成训练集\(\mathcal D_{train}\)、验证集\(\mathcal D_{val}\),用\(\mathcal D_{train}\)训练得到\(g_t^-,\alpha_t\),然后再用整个\(\mathcal D\)对每个\(g_t\)进行训练,最终得到的\(\mathcal D_{train}\)是系数为\(\alpha_t\),对\(g_t\)而非\(g_t^-\)的线性组合

除了linear blending外,G还可以是关于\(g_t\)的更高阶形式的非线性函数,这种被称为any blending(stacking),其优点是模型复杂度提高,缺点是更容易带来过拟合

Bagging(Bootstrap Aggregation)

之前的uniform blending和linear blending都是根据已有的T个假设函数\(g_t\),结合成新的G,但是我们该如何产生不同的\(g_t\)呢?

首先回顾之前的偏置、方差公式:

这里我们做两个近似:

  • 1、T不再是正无穷大,而是有限值
  • 2、每个\(g_t\)的训练集\(\mathcal D_t\)中的每个样本,都服从相同的概率分布P(且是独立同分布),而现在我们用已有的\(\mathcal D\)构造近似的\(\mathcal D_t\)

为了实现第二点,我们采用bootstraping,假设当前有N个训练样本\(\mathcal D\),我们从中随机抽一个样本,再放回去,如此重复N'次(N'不一定要等于N),这样就能构造大小为N'的\(\mathcal D_t\)

用bootstraping构造T个训练集\(\mathcal D_t\),训练出T个假设函数\(g_t\),然后aggregate的方法叫bagging。

需要注意的是,只有当学习算法对数据的样本分布很敏感时,bagging才有较好的表现

猜你喜欢

转载自www.cnblogs.com/qpswwww/p/9382439.html