Bagging的思想如上图所示,对于给定的m个样本训练集,通过随机采样得到T个样本集,对每个样本集进行训练,得到T个学习器,通过选择结合策略得到最后的结果。
Bagging算法的伪代码如上图所示,输入一个包含m个样本的训练集、一个基学习算法以及需要训练的轮数T,训练T次,输出为最终的强分类器。
给定包含m 个样 本的数据集 D , 我们对它进行采样产生数据集 D’:
每次随机从 D 中挑选一个 样本, 将其拷贝放入 D‘, 然后再将该样本放回初始数据集 D 中,使得该样本在 下次采样时仍有可能被采到;这个过程重复执行m 次后,我们就得到了包含 m 个样本的数据集 D’。
每次采样中,样本不被采样到的概率为 1 − 1 m 1-\frac{1}{m} 1−m1,经过m次采样后,数据集中不被采样到的概率为 ( 1 − 1 m ) m (1-\frac{1}{m})^m (1−m1)m,当 m → ∞ m \to \infty m→∞时,有如下式子:
通过重要极限的性质我们可以得到结果为 1 e \frac{1}{e} e1,即约等于0.368,所以数据集中不被采样到的概率为0.632
任务 | 结合策略 |
---|---|
分类任务 | 简单投票法 |
回归任务 | 简单平均法 |
由于每个基学习器只使用了初始训练集中约 63.2%的样本,剩下约 36.8% 的样本可用作验证集来对泛化性能进行"包外估计"。
使用 D t D_t Dt表示 h t h_t ht实际使用的训练样本集
令 H o o b ( x ) H^{oob}(x) Hoob(x) 表示对样本x的包外预测
则可以得到 H o o b ( x ) H^{oob}(x) Hoob(x)如下式
则Bagging 泛化误差的包外估计为
包外样本还有许多其他用途.
当基学习器是决策树时,可使用包外样本来辅助剪枝或用于估计决策树中各结点的后验概率以辅助对零训练样本结点的处理;
当基学习器是神经网络时,可使用包外样本来辅助早期停止 以减小过拟合的风险.
Bagging对样本重采样,对每一重采样得到的子样本集训练一个模型,最后取平均。由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的bias和variance(事实上,各模型的分布也近似相同,但不独立)。由于 E [ ∑ X i n ] = E [ X i ] E[\frac{\sum X_i}{n}]=E[X_i] E[n∑Xi]=E[Xi],所以bagging后的bias和单个子模型的接近,一般来说不能显著降低bias。另一方面,若各子模型独立,则有 V a r ( ∑ X i n ) = V a r ( X i ) n Var(\frac{\sum X_i}{n})=\frac{Var(X_i)}{n} Var(n∑Xi)=nVar(Xi),此时可以显著降低variance。若各子模型完全相同,则 V a r ( ∑ X i n ) = V a r ( X i ) Var(\frac{\sum X_i}{n})=Var(X_i) Var(n∑Xi)=Var(Xi),此时不会降低variance。bagging方法得到的各子模型是有一定相关性的,属于上面两个极端状况的中间态,因此可以一定程度降低variance。为了进一步降低variance,Random forest通过随机选取变量子集做拟合的方式de-correlated了各子模型(树),使得variance进一步降低。
RF是在以决策树为基学习器构建 Bagging 集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。
具体来说,传统决策树在选择划分属性时是在当前结点的属性集合(假定有 d 个属性)中选择一个最优属性;而在 RF 中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含 k个属性的子集,然后再从这个子集中选择一个最优属性用于划分. 这里的参数 k 控制了随机性的引入程度;若令 k = d, 则基决策树的构建与传统决策树相同; 若令 k = 1 , 则是随机选择一个属性用于划分; 一般情况下,推荐值 k = l o g 2 d log_2 d log2d
在整个随机森林算法的过程中,有两个随机过程:a. 输入数据—>随机从整体训练数据集中选取一部分作为一颗决策树的构建,而且是有放回的选取。 b. 特征选取—>每棵决策树所需的特征是从整体的特征集中随机选取的。
具体实现:
随机森林的起始性能往往相对较差, 特别是在集成中只包含一个基学习器时,因为通过引入属性扰动,随机森林中个体学习器的性能往往有所降低然而,随着个体学习器数目 的增加,随机森林通常会收敛到更低的泛化误差。
优点:
1在当前所有算法中,具有极好的准确率
2)能够有效地运行在大数据集上
3)能够处理具有高维特征的输入样本,而且不需要降维
4)能够评估各个特征在分类问题上的重要性
5)在生成过程中,能够获取到内部生成误差的一种无偏估计
6)对于缺省值问题也能够获得很好得结果
缺点:
1)当随机森林的决策树个数较多时,训练时会消耗大量的时间和空间
2)在某些噪声较大的分类和回归问题上会过拟合
3)对于有不同级别的属性的数据,级别划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产生的属性权值是不可信的
为了保证样本数据的多样性,从而提高模型的泛化能力,stacking提倡每个基模型采用KFold交叉验证的方式产生预测值。如上图,Model1经过k轮训练后,每次在验证集上的预测结果汇集成了原始X_train上的预测结果y_pred_1;在k轮训练的同时,Model1也在原始测试集X_test上生成了k个预测结果,这些结果通过均值操作融合成一个测试集上的输出y_test_1。