《机器学习》阅读心得——八、集成学习

文章目录


###8.1 个体与集成
  集成学习通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统。

![集成学习示意图](https://imgconvert.csdnimg.cn/aHR0cHM6Ly90aW1nc2EuYmFpZHUuY29tL3RpbWc)
                        图8.1 集成学习示意图   上图显示出集成学习的一般结构:先产生一组“个体学习器”,再用某种策略将它们结合起来。个体学习器通常是由一个现有的学习算法从训练数据中产生。如果集成学习中只包含同类型的个体学习器,这样的集成是“同质”的,个体学习器被称为“基学习器”,相应的学习算法被称为“基学习算法”。集成也可包含不同类型的个体学习器,这种集成是“异质”的,这时个体学习器被称为“组件学习器”或直接称为“个体学习器”。   集成学习通过多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。原理很简单,即基于投票法。要取得好的结果,个体学习器应当具有一定的准确性,同时具有一定的差异性。同时需要保证,个体学习器的误差相互独立。事实上,如何产生“好而不同”的个体学习器,是集成学习研究的核心。   根据个体学习器的不同生成方式,目前的集成学习方法大致可以分为两类:即个体学习器间存在强依赖关系、必须串行生成的序列化方法;及个体 学习器间不存在强依赖关系,可同时生成的并行化方法。前者的代表是Boosting,后者的代表是Bagging和“随机森林”. ###8.2 Boosting   Boosting是一族可以将弱学习器提升为强学习器的方法。这族方法具有相似的工作机理:先从初始训练集中训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续收到更多关注,然后基于调整后的训练样本来训练下一个基学习器;如此重复进行,直至基学习器的数目达到指定值,最终将这T个基学习器进行加权调整。   Boosting族算法要求基学习器能够对特定的数据分布进行学习,这可通过“重赋权法”进行,即在训练过程的每一轮中,根据样本分布为每个训练样本重新赋予一个权重。对无法接受带权样本的基学习法,可通过“重采样法”来处理。在每一轮学习中,根据样本分布对训练集重新进行采样,再用重采样而得的样本集对基学习器进行训练。   从偏差-方差分解的角度看,Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成。 ###8.3 Bagging与随机森林   为了使得个体学习器尽可能独立,可以对训练样本进行采样,产生出若干个不同的子集,再从每个数据子集中训练出一个基学习器。但为了基学习器的性能不能太差,子集不能包含太少的数据。因此可以考虑采用有重叠数据的子集。 ####8.3.1 Bagging   Bagging是并行式集成学习方法最著名的代表,它直接基于第二章讲过的自助采样法。给定一个初始数据集,有放回的选择数据放入采样集中。初始训练集的数据约有63.2%的数据出现在采样集中。操作结束后可根据每个采样集训练出一个基学习器,再将这些基学习器进行结合。在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法。   Bagging具有多个优点:训练一个Bagging集成与训练一个基学习器的复杂度同阶。Bagging能不经修改的用于多分类、回归等任务,而标准AdaBoost只适用于二分类任务。另外,由于采用自助采样方式,基学习器只使用了训练样本中63.2%的样本,剩下的样本可以用在验证集来对泛化性能进行“包外估计”。   从偏差-方差分解的角度看,Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显。 ####8.3.2 随机森林   随机森林(RF)是Bagging的一个变体。RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。传统决策树在选择最优划分属性时是在当前节点的属性集合中选择一个最优属性;而在RF中,对基决策树的每个节点,先从该节点的属性集合中随机选择一个子集,再在这个子集中选择一个最优属性。   随机森林简单,容易实现,计算开销小,并且在许多学习任务中具有强大的性能。同Bagging中采用改变样本的方式实现基学习器的多样性不同,随机森林不仅引入了样本的扰动,还引入了属性的扰动,使得基学习器的差异进一步增加,增加了最终集成的泛化性能。 ###8.4 结合策略   学习器的结合可以在以下三个方面带来好处:增加泛化性能,减少进入局部极小的可能性,扩大假设空间,适应更多学习任务。下面给出几种结合的方法 ####8.4.1 平均法   包括简单平均法$$H(x)=\frac{1}{T}\sum^T_{i=1}h_i(x)\tag{8.1}$$   加权平均法$$H(x)=\sum^T_{i=1}\omega_ih_i(x)\tag{8.2}$$   加权平均法可认为是集成学习的基础出发点,对给定的基学习器,不同的集成学习方法可视为通过不同的方式来确定加权平均法中的基学习器权重。 ####8.4.2 投票法   对分类任务来说,学习器$h_i$将从类别标记集合$\{c_1,c_2,...,c_N\}$中预测出一个标记,最常见的结合策略是使用投票法。为便于讨论,将$h_i$在样本x上的预测输出表示为一个N维向量$(h^1_i(x),h^2_i(x),...,h^N_i(x))$,其中$h^j_i(x)$是$h_i$在类别标记$c_j$上的输出。   1. 绝对多数投票法 $$ H(x)= \begin{equation} \begin{cases} c_j,&if\;\sum^T_{i=1}h^j_i(x)>0.5\sum^N_{k=1}\sum^T_{i=1}h^k_i(x) \\ reject &otherwise\tag{8.3} \end{cases} \end{equation} $$   2. 相对多数投票法 $$H(x)=c_{argmax\sum^T_{i=1}h^j_i(x)}\tag{8.4}$$   即预测为得票最多的标记,若同时有多个标记获得最高票,则从中随机选取一个。   3. 加权投票法 $$H(x)=c_{arg max\sum^T_{i=1}\omega_ih^j_i(x)}\tag{8.5}$$ ####8.4.3 学习法   当训练数据很多时,一种策略是“学习法”,即通过另一种学习器来结合。Stacking法是学习法的典型代表。这里将个体学习器称为初级学习器,将用于结合的学习器称为次级学习器或元学习器。   Stacking先从初始数据集中训练出初级学习器,然后生成一个新数据集,用于训练次级学习器。在这个新数据集中,初级学习器的输出被当做样例输入特征,而初始样本的标记仍被当做是样例标记。   若直接使用初级学习器的数据集来产生次级数据集,过拟合的风险较大。因此一般通过使用交叉验证或留一法这样的方式,用训练初级学习器未使用的样本来产生次级学习器的训练样本。次级学习器的输入属性表示和次级学习算法对Stacking集成的泛化性能有很大影响。 ###8.5 多样性 ####8.5.1 误差-分歧分解   在回归学习任务中,假定用个体学习器$h_1,h_2,...,h_T$通过加权平均法结合产生的集成来完成回归学习任务。定义学习器$h_i$的分歧为$$A(h_i|x)=(h_i(x)-H(x))^2\tag{8.6}$$   则集成的分歧是 $$ \begin{split} \overline{A}(h|x)&=\sum^T_{i=1}\omega_iA(h_i|x) \\ &=\sum^T_{i=1}\omega_i(h_i(x)-H(x))^2 \end{split} \tag{8.7} $$   个体学习器的“分歧”项表征了个体学习器在样本x上的不一致性,即在一定程度上反映了个体学习器的多样性。个体学习器$h_i$和集成H的平方误差分别为 $$ \begin{eqnarray*} E(h_i|x)=(f(x)-h_i(x))^2 \tag{8.8} \\ E(H|x)=(f(x)-H(x))^2 \tag{8.9} \end{eqnarray*} $$   令$\overline E(h|x)=\sum^T_{i=1}\omega_iE(h_i|x)$表示个体学习器误差的加权均值,有 $$ \begin{split} \overline A(h|x)&=\sum^T_{i=1}\omega_iE(h_i|x)-E(H|x) \\ &=\overline E(h|x)-E(H|x) \end{split} \tag{8.10} $$   将式(8.10)推广到全样本上,令$\overline E=\sum^T_{i=1}\omega_iE_i$表示个体学习器泛化误差的加权平均值,$\overline A=\sum^T_{i=1}\omega_iA_i$表示个体学习器的加权分歧值,E为集成的泛化误差,经推导可得$$E=\overline E-\overline A\tag{8.11}$$   式(8.11)表示,个体学习器准确性越高,多样性越大,则集成越好。该式被称为“误差-分歧分解”。 ####8.5.2 多样性度量   多样性度量是指用于度量集成中个体分类器的多样性,即估算个体学习器的多样化程度。典型做法是考虑个体分类器的两两相似性/不相似性。给定数据集$D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}$,对二分类任务来说,$y_i\in\{-1,+1\}$,分类器$h_i$和$h_j$的预测结果列表为 |误差列表|$h_i=+1$|$h_i=-1$| |--|--| |$h_j=+1$|a|c| |$h_j=-1$|b|d|   其中,a表示$h_i$与$h_j$均预测为正类的的样本数目。下面是一些常用的多样性度量   1. 不合度量 $$dis_{ij}=\frac{b+c}m\tag{8.12}$$   $dis_{ij}$的值域为[0,1]. 值越大则多样性越大。   2. 相关系数 $$\rho_{ij}=\frac{ad-bc}{\sqrt{(a+b)(a+c)(c+d)(b+d)}}\tag{8.13}$$   $\rho_{ij}$的值域为[-1,1]. 若$h_i$与$h_j$无关,则值为0;若$h_i$与$h_j$正相关则值为正,否则为负。   3. Q统计量 $$Q_{ij}=\frac{ad-bc}{ad+bc}\tag{8.14}$$   $Q_{ij}$与相关系数$\rho_{ij}$的符号相同,且$|Q_{ij}|\leq|\rho_{ij}|$.   4. k统计量$$\kappa=\frac{p_1-p_2}{1-p_2}\tag{8.15}$$   其中,$p_1$是两个分类器取得一致的概率;$p_2$是两个分类器都偶然达成一致的概率,它们的估算方式如下$$ \begin{split} p_1&=\frac{a+d}{m} \\ p_2 &= \frac{(a+b)(a+c) + (c+d)(b+d)}{m^2} \end{split} \tag{8.16} $$ ####8.5.3 多样性增强   在集成学习中需要有效的生成多样性大的个体学习器。增强多样性的一般方式是在学习过程中引入随机性,常见于对数据样本、输入属性、输出表示、算法参数进行扰动。   1. 数据样本扰动   数据样本扰动通常是基于采样法。比如在Bagging中使用自助采样,在AdaBoost中使用序列采样。对于一些“不稳定基学习器”,如决策树、神经网络等,训练样本稍有变动就会导致学习器有很大变动。但对于“稳定基学习器”,对数据扰动不敏感,例如线性学习器、支持向量机、朴素贝叶斯、k近邻学习器等。对这类基学习器的进行集成往往采用输入属性扰动等其他机制。   2. 输入属性扰动   训练样本通常由一组属性描述。不同的子空间(属性子集)训练出得个体学习器必然有所不同。随机子空间算法就依赖于输入属性扰动,该算法从初始属性集中抽取出若干个属性子集,再基于每个属性子集训练一个基学习器。该方法适用于具有大量冗余属性的样本。若数据包含属性很少,或者冗余属性很少,不宜使用属性扰动法。   3. 输出表示扰动   可对训练样本的标记稍作变动,如“翻转法”随机改变一些训练样本的标记;“输出调制法”,对输出表示进行转化,将分类输出改变为回归输出后构建个体学习器;“ECOC”法,将原任务拆解为多个可同时求解的子任务,利用纠错输出码将多分类任务拆解为一系列二分类任务。   4. 算法参数扰动   基学习算法一般都有参数需要设置,例如神经网络的隐层神经元数、初始连接权值等,通过随机设置不同的参数,可产生差别较大的个体学习器。例如“负相关法”显式的通过正则化项来强制个体神经网络使用不同的参数。   不同的多样性增强机制可以同时使用。例如随机森林中同时使用了数据样本扰动和输入属性扰动。

你可能感兴趣的:(机器学习)