参考:bagging和boosting算法(集成学习算法)
Bagging算法和Boosting区别和联系
机器学习笔记-集成学习之Bagging,Boosting,随机森林三者特性对比
目录
1. 集成学习
2. bagging算法
2.1 bagging算法思想
2.2 bagging算法特点
2.3 bagging算法案例
3. boosting算法
3.1 boosting算法的基本思想
3.2 代表算法
3.3 boosting算法的案例
4 Bagging和Boosting算法的区别
4.1 样本选择:
4.2 样例权重:
4.3 预测函数:
4.4 并行计算:
集成中只包含同种类型的个体学习器,这样的个体学习器称为“基学习器”,相应地学习算法为“基学习算法”,例如决策树集成中全是决策树,神经网络集成中全是神经网络。(基学习器也称为弱学习器)
集成中包含不同类型的个体学习器,这样的每个个体学习器称为“组件学习器”,此时不再有“基学习算法”,例如同时包含决策树和神经网络
(1)序列化方法:个体学习器间存在强大依赖关系、必须串行生成,代表算法:Boosting;
(2)并行化方法:个体学习器间不存在依赖关系、可同时生成,代表算法Bagging和随机森林。
集成学习是构建多个学习器并通过一定的策略结合成一个性能更佳的学习器。
bagging是bootstrap aggregating的缩写,是一种并行集成算法。该算法的思想分别构造多个基学习器(弱学习器),多个基学习器相互之间是并行的关系,通过自助采样法进行训练(每个基分类器的每个训练数据都是从初始的训练集中有放回随机抽取),最终将多个基学习器结合。对分类问题采用投票方式,对回归问题采用简单平均方法对新示例进行判别。上面的算法思想可通过下图来进行理解:
自助采样法
在含有 m 个样本的数据集中,有放回地重复随机抽取一个样本,共抽取n次。创建一个与原数据大小相同的数据集,这个新数据集就是训练集。这样有些样本可能在训练集中出现多次,有些则可能从未出现。原数据集中大概有 36.8% 的样本不会出现在新数据集中。因此,我们把这些未出现在新数据集中的样本作为验证集。
为什么原数据集中大概有 36.8% 的样本不会出现在新数据集中?假设数据集中有m个样本,那么每次每一个样本被抽取到的概率是1/m,抽样m次,某个样本始终不被抽取到的概率是(1-1/m)m。当m的取值趋近于无穷大时,样本未被抽中的概率为e的负一次方 ,结果约等于0.368。
算法的基本流程为:
输入为样本集D={(x1,y1),(x2,y2),…(xm,ym)},弱分类器迭代次数为T。 输出为最终的强分类器f(x)
(1)对于t=1,2…,T:
(a)对训练集进行随机采样,共采集m次,得到包含m个样本的采样集Dm;
(b)用采样集Dm训练第t个弱学习器Gt(x);
(2) 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。
(1)bagging算法更倾向于以偏差低、方差高的模型作为基学习器,如决策树、神经网络,通过增加样本扰动,可以增强融合后模型的泛化能力,降低方差。
(2)其性能依赖于基分类器的稳定性;若采用的是不稳定基学习器,bagging有助于降低训练数据的随机波动导致的误差,即增强了稳定性和泛化能力;若采用的是稳定基学习器,则集成分类器的误差主要由基分类器的偏差引起(见为什么更倾向于融合低偏差的模型);
(3)由于每个样本被选中的概率相同,因此bagging并不侧重于训练数据集中的任何特定实例。
1.为什么bagging可以降低方差?
方差刻画了模型对数据扰动的敏感程度,越敏感说明数据的微小变动就能导致学习出的模型产生较大差异,因而方差大。
我们将容易受到数据干扰(方差高)的模型称为不稳定模型,如决策树、神经网络,而SVM就是典型的稳定学习器(很容易理解,SVM的超平面仅由支持向量决定,增加一个扰动数据,并不会对决策面产生影响)。
我们假设有n个独立同分布的基学习器,每个基学习器的方差为σ2,对一个样本的预测值为的。那么bagging的输出就是将每个基学习器的预测值求以平均,即,根据独立随机变量的方差特性,对其求取方差有:
但是实际上Bagging的抽样是有放回抽样,这样数据集之间会有重复的样本,因而违反了上式子的独立性假设。在这种情况下设单模型之间具有相关系数 0<ρ<1,则实际的方差为:
上式中随着n增大,第一项趋于0,第二项趋于ρσ2,所以Bagging能够降低整体方差。
2.为什么更倾向于融合低偏差的模型?
设单模型的期望为μ,则Bagging的期望预测为:
说明Bagging整体模型的期望近似于单模型的期望,这意味整体模型的偏差也与单模型的偏差近似,所以Bagging通常选用偏差低的强学习器。
为了更好理解bagging的概念,提供下面一个例子。
X 表示一维属性,Y 表示类标号(1或-1)测试条件:当x<=k时,y=?;当x>k时,y=?;k为最佳分裂点
下表(绿色)为属性x对应的唯一正确的y类别。
现在进行5轮随机抽样(蓝色),结果如下:
每一轮随机抽样后,都生成一个分类器。然后再将五轮分类融合。
对比符号和实际类,我们可以发现:在该例子中,Bagging使得准确率可达90%。
boosting算法是Adaptive boosting的缩写,是一种迭代算法。每轮迭代中会在训练集上产生一个新的分类器,然后使用该分类器对所有样本进行分类,以评估每个样本的重要性(informative)。
广义的定义:
算法会为每个训练样本赋予一个权值。每次用训练完的新分类器更新训练样本的权重,若某个样本点已被分类正确,则将其权值降低,若样本点分类错误,则提高其权值,使得先前基学习器做错的训练样本在后续受到更多关注。整个迭代过程直到错误率足够小或达到一定次数T才停止,最终将这T个基学习器进行加权结合。
准确的定义:
Boosting算法是将“弱学习算法“提升为“强学习算法”的过程。Boosting算法要涉及到两个部分,加法模型和前向分步算法。加法模型就是说强分类器由一系列弱分类器线性相加而成。一般组合形式如下:
其中,就是一个个的弱分类器,是弱分类器学习到的最优参数,βm就是弱学习在强分类器中所占比重,P是所有和βm的组合。这些弱分类器线性相加组成强分类器。
前向分步就是说在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。也就是可以写成这样的形式:
由于采用的损失函数不同,Boosting算法也因此有了不同的算法,代表有adaboost。
以下图为例,来说明boosting算法的核心思想:
由图可以发现,boosting算法在迭代的过程中不断加强识别错误样本的学习比重,从而实现最终的强化学习。
(1)样本选择:
(2)样例权重:
(3)预测函数:
(4)并行计算:
()预测结果: