1. 集成算法 (Ensemble methods)
集成类算法是一个较大的概念,其主要原理在于组合一系列较弱的分类算法形成一个新的算法。根据PAC理论框架,新算法的效果一定会得到提升。比如对一个分类问题,我们首先采用不同的简单算法进行分类,比如之前介绍的逻辑回归和决策树等算法。然后所有简单的算法的分类结果再进行投票,从而决定最终的分类结果。
集成算法常用的策略有两类:Bagging和Boosting。
Bagging的运用过程描述如下:
  • 假设原始数据有n个数据点,我们首先从原始训练数据抽取多个训练集,每个训练集的样本大小同样为n。每一次从原始数据集中使用Bootstrapping(即有放回的抽样)得到n个数据点。一共进行k轮抽取,从而得到k个不完全相同的测试样本集。需要注意的是正是因为使用了有放回的抽样,每一个bootstrap 训练集里面有可能有数据点相同,但同时每一个bootstrap 训练集里,平均而言,会有36.8%的原始数据缺失。正是这个特点保证了每一个得到bootstrap训练集,虽然样本大小和原始数据相同,但他们和原始样本平均而言有36.8%的不同,并且彼此之间也不会完全相同。36.8%的得出是基于一个简单的概率计算。对于原始数据中的任意一个数据点,每一次不被抽中的概率为1-1/n
       连续n次抽取,同一个数据点都被抽中的概率则为:
      当n足够大,这个概率趋向于0.368。
  • 选定一个基本的算法,针对每一个bootstrap训练集得到一个模型结果。k个训练集会得出k个模型结果。如果是分类模型,模型结果为预测的类别;如果是回归模型,模型结果为预测的连续数值。
  • 对k个模型结果采用投票的方式,得票最多的结果为最终的结果。对于回归模型则计算所有模型的平均结果作为最终结果。
与Bagging方法的并行化思想不同,Boosting是序列化的方法。每一个新的模型试图去纠正之前模型的预测误差。Boosting方法的运用过程如下:
  • 选定一个训练数据集,所有相关模型都使用相同的数据集;数据集中每一个数据点给与相同的权重;选定一个基础模型算法。
  • 用基础模型第一次预测训练数据。
  • 根据第一次的预测误差,数据集中的每一个数据点被给予不同的权重。数据点误差越大权重越高。
  • 以此类推,模型不断训练调整过权重的数据集,每一次的新模型都对之前模型误判的数据给予更多的重视。
  • 最终的模型结果是所有模型的加权结果,因此效果更加理想。
Bagging方法里面具有代表意义的是随机森林算法,而Boosting方法里面具有代表意义的是梯度增强机(Gradient Boosting Machine)。下面两节我们主要介绍这两种算法。
2. 随机森林
随机森林是一种Bagging算法,其中应用的基础模型是决策树。单独使用决策树算法容易造成过拟合,因而随机森林可以有效的解决这个问题,从而极大的提高模型效果。结合上节的Bagging过程,随机森林模型中的每一棵树的建立有下面几步组成:
  • 从训练数据中bootstrap一份随机样本,随机样本大小和训练数据大小一致。
  • 如果数据有M个输入变量,在建立决策树的每一个节点,随机挑选m个变量(m<<M),从这m个变量中去选取最佳的变量作为该节点判断依据。其中m的具体大小可以由验证数据来决定最佳值,最佳的范围也比较广。通常情况下,对于分类问题,m取M的平方根;对于回归问题,m取M的1/3。
随机森林模型效果的提升主要依赖于下面两点:
  • 随机森林中树与树之间的相关性。相关性越小,总的效果越好。Bootstrapping方法和m个变量的选取都是在减小相关性。
  • 随机森林中每一个树各自的预测能力。单个决策树的预测能力越好,模型总的效果越好。
当然上面两点是互相依赖的,比如减小m的大小有助于降低树之间相关性,但是会降低单棵树的预测能力。增加单棵树的深度会增加预测能力,但又会增加树与树之间相关性。因此实践中如何选取最佳的超参数,需要用交叉验证等技术来确定。另一方面,随机森林不容易过拟合,因此在确定树的具体数量时候可以尽可能的大。
随机森林算法的交叉验证其实可以用自身的out-of-bag(oob) 误差估计来代替。因为在每一棵树的训练过程中,有大概36.8%的数据不会被挑选到,因此对于任何一个数据点而言,在大概36.8%的决策树中不会用于训练。或者说,对于任意一个数据点我们可以没有偏差的获得该数据在36.8%的数据中的预测结果。最终,这些无偏差的预测结果可以同样根据每一棵树的结果,采用投票方式来获得最终的预测结果。
3. 梯度增强机
Boosting方法最早的实现其实是Adaptive Boosting 或者AdaBoost,梯度增强机是AdaBoost在统计框架下的一个延申。AdBoost和梯度增强机使用的基础模型都是决策树。并且梯度增强机中的决策树只需要是回归树,即对连续数值的预测。这和问题是否是分类问题还是回归问题没有关系,这是由梯度增强机的性质决定的。
通常我们讨论的梯度下降通常是指在参数空间寻找最佳参数从而使得模型的损失函数降低。在梯度增强机的运用中,梯度下降则是在损失方程空间中寻找最佳方向,比如对于回归问题,优化过程会使得当前所有迭代模型的预测结果和目标变量的残差尽量变得最小。
在梯度增强机实现过程中,假设经过m次迭代以后的预测函数为Fm(x), 而相应的损失函数为L(y,Fm(x))。为了达到使损失函数减小最快的目的,那么应该沿着损失函数的梯度下降的方向构造第m+1次迭代子模型函数。此时的梯度下降方向为:
如果损失函数采用 ,即平方差的形式
那么
我们用决策树构建第 m+1次迭代,-gm(x)作为待预测的目标变量(在L2损失函数的情况下,新的目标变量即为最近一次预测函数和原始目标变量的残差)。获得新的决策树模型以后的所有数据的预测值假设为h(x)。那么经过第m+1迭代后,总的预测函数应为:
这里βm+1为每一次迭代的步长,可以通过最小二乘法找到每一次迭代的最佳步长,即下式的最优解:
为了防止过拟合,可以让步长乘以一个学习速率λ,取值在0到1之间,从而起到降低收敛速率,防止过拟合的现象:
上节中的随机森林算法Bagging过程是一个降低方差的过程,但是梯度增强机算法则是对减小模型的方差和偏差均有帮助,因此效果通常更加明显。但是另一方面,和随机森林不会过拟合的特性相比,梯度增强则容易造成过拟合。因此实践中一定要通过交叉验证等手段加以检查和预防。
继续阅读
阅读原文