1. Bagging
Bagging是基于boostraping对训练样本进行抽样的一类算法,主要特点是对训练样本进行又放回随机抽取。有放回抽取的意义在于如下:
- 给定数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D = \{ (x_{1}, y_{1}), (x_{2}, y_{2}),..., (x_{m}, y_{m}) \} D={(x1,y1),(x2,y2),...,(xm,ym)}
- 如果其中存在 k ( k < < m − k ≤ m ) k(k << m-k\leq m) k(k<<m−k≤m)个异常数据,对于每一次有放回采样,非异常点被选中的概率 m − k m > k m \frac{m-k}{m} > \frac{k}{m} mm−k>mk,多次采样后将会降低异常点的比例,使训练集数据更加真实有效
- 每个数据样本被采集到的概率为 1 m \frac{1}{m} m1,那么经过m次采样,数据样本点不被采集到的概率为 ( 1 − 1 m ) m (1 - \frac{1}{m})^{m} (1−m1)m, l i m m → ∞ ( 1 − 1 m ) m = 1 e ≈ 0.368 \underset{m \to \infty }{lim}(1 - \frac{1}{m})^{m} =\frac{1}{e} \approx 0.368 m→∞lim(1−m1)m=e1≈0.368,换句话说,每轮采样中约有36.8%的样本不会被采集到,因此可以作为测试集来检验模型的泛化能力。
- 何种情况下可以使用Bagging
- 新加入样本对算法的稳定性和性能造成的影响较大时
- 基学习器
- 其对基学习器没有要求,常见的基学习器为决策树(CART → \to → RF)和神经网络
- 支持并行计算
2. Boosting
Boosting是基于前向分布算法(贪心策略)的一类算法,所有的基学习器训练集都是相同的,不同的是训练集中数据样本的权重,因此Boosting一簇的算法均需要解决以下四个问题:
- 每个基学习器 G k G_{k} Gk的误差率 e k e_{k} ek
- 每个基学习器的权重 α k \alpha_{k} αk
- 样本权重的更新策略 ω k i \omega_{k}^{i} ωki
- 基学习器 G k G_{k} Gk预测结果的组合策略
3. Bagging与Boosting比较
Bagging | Boosting | |
---|---|---|
样本选择 | 有放回抽取,每个数据集相对独立 | 每轮训练集不变,只是样本权重发生改变 |
样本权重 | 每个样本权重相等 | 根据错误率调整样本权重,错误率越大样本权重越高 |
基学习器权重 | 每个基学习器权重相等 | 每个基学习器权重不等,根据错误率计算 |
并行/串行 | 并行 | 串行 |
减小Variance和Bias | Variance | Bias |
为什么Bagging是减少Variance,Boosting是减少Bias?