集成学习(Ensemble Learning)综述

集成学习简单理解就是指采用多个分类器对数据集进行预测,从而提高整体分类器的泛化能力。
集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合

1. Bagging

Bagging算法(Bootstrap aggregating,引导聚集算法),又称装袋算法,是机器学习领域的一种集成学习算法。

算法思想:
  1. For t = 1, 2, …, T Do
  2. 从数据集S中取样(放回选样)
  3. 训练得到模型 H t
  4. 对未知样本 X 分类时,每个模型 H t 都得出一个分类,得票最高的即为未知样本 X 的分类;
    对于数值类的回归预测问题,通常使用的结合策略是平均法,也就是说,对于若干和弱学习器的输出进行平均得到最终的预测输出。

1.1随机森林

随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法

算法思想:
  1. N 来表示训练用例(样本)的个数, M 表示特征数目。
  2. 输入特征数目 m ,用于确定决策树上一个节点的决策结果;其中 m 应远小于 M
  3. N 个训练用例(样本)中以有放回抽样的方式,取样 N 次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。
  4. 对于每一个节点,随机选择 m 个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这 m 个特征,计算其最佳的分裂方式。
  5. 每棵树都会完整成长而不会剪枝(Pruning,这有可能在建完一棵正常树状分类器后会被采用)

2.Boosting

2.1 Adaboost

AdaBoost,是英文”Adaptive Boosting”(自适应增强)的缩写。AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。AdaBoost方法对于噪声数据和异常数据很敏感。但在一些问题中,AdaBoost方法相对于大多数其它学习算法而言,不会很容易出现过拟合现象。AdaBoost方法中使用的分类器可能很弱(比如出现很大错误率),但只要它的分类效果比随机好一点(比如两类问题分类错误率略小于0.5),就能够改善最终得到的模型。而错误率高于随机分类器的弱分类器也是有用的,因为在最终得到的多个分类器的线性组合中,可以给它们赋予负系数,同样也能提升分类效果。
AdaBoost方法是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。每一个训练样本都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。通过这样的方式,AdaBoost方法能“聚焦于”那些较难分(更富信息)的样本上

步骤:

假设有 n 个样本, D : { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } , x 是特征向量, y { 1 , 1 } 是标签
1. 初始化样本 D : { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } , x k m a x (最大循环次数),样本分布 W k ( i ) = 1 / n i = 1 , . . . , n
2. k = 0
3. d o k k + 1
4. 训练使用按照 W k ( i ) 采样的 D 的弱分类器 C k
5. E k ←计算弱分类器 C k 的训练误差, 如果 E k > 0.5 , 则continue
6. α k 1 2 ln 1 E k E k , 这里 α k 就是该分类器的权重
7. 改变样本的分布,提高错分样本的概率,降低正确分类样本的概率 W k + 1 ( i ) W k ( i ) Z k × { e α k , if  h k ( x i ) = y i e α k , if  h k ( x i ) y i
8. u n t i l k = k m a x
9. r e t u r n C k α k k = 1 . . . k m a x (带权值分类器的总体)
10. e n d

2.2 Gradient Boosting

2.2.1 Boosting Tree

首先,提升树模型其实就是决策树的加法模型,表现为


f M ( x ) = m = 1 M T ( x ; θ m )
其中, T ( x ; θ m ) 表示决策树, θ m 为树的参数, M

回归提升树的分布算法如下

f 0 ( x ) = 0
f m ( x ) = f m 1 ( x ) + T ( x ; θ m ) , m = 1 , 2 , 3 , . . . , M
f M ( x ) = m = 1 M T ( x ; θ m )

给定当前模型 f m 1 ( x ) ,需要求解第 m 颗树的参数:


θ ^ m = a r g m i n θ m i = 1 N L ( y i , f m 1 ( x i ) + T ( x i ; θ m ) )

N 代表总共有 N 个样本。 通过上式,从而得到 θ ^ m , 即第 m 颗树的参数
如果使用平方误差损失函数 L ( y , f ( x ) ) = ( y f ( x ) ) 2 ,其损失变为


L ( y i , f m 1 ( x i ) + T ( x i ; θ m ) )
= ( y i f m 1 ( x i ) T ( x i ; θ m ) ) 2
= ( r T ( x i , θ m ) ) 2

其中, r = y f m 1 ( x ) , 即残差,可以理解为是当前模型 f m 1 ( x )
所以,对于回归问题的Boosting Tree来说,每一步只需要拟合当前模型的残差即可。

2.2.2 GBDT(Gradient Boosting Decision Tree)

boosting Tree 提升树利用加法模型实现优化过程时,当损失函数是平方损失函数时,每一步的优化很简单。但对于一般损失函数而言,往往每一步的优化没那么简单,所以引入了梯度提升(Gradient Boosting)算法。

GBDT的目标函数

对于普通的机器学习模型而言,其目标函数可以定义为如下:


o b j : i = 1 n l ( y i , y ^ i ) + k = 1 K Ω ( f k )

其中 n 代表有 n 个样本。前面一项是loss函数, 后面一项是正则项。
综合上述加法模型的计算过程,在第 t 步,其目标函数是:


o b j ( t ) : i = 1 n l ( y i , y ^ i t ) + i = 1 t Ω ( f i )
= i = 1 n l ( y i , y ^ i t 1 + f t ( x i ) ) + Ω ( f t ) + c o n s t a n t

此时,优化该目标函数,就能得到 f t ( x i )

负梯度的理论支撑

前面第提到Gradient Boosting时,提及Gradient Boosting以负梯度代替残差来求解基函数,实际上,负梯度的理论支撑则是泰勒公式的一阶展开。即


f ( x + Δ x ) = f ( x ) + f ( x ) Δ x

对于在第 t 步的目标函数,对 l ( y i , y ^ i t 1 + f t ( x i ) ) 做一阶泰勒展开,其中\hat{y}_i^{t-1}相当于泰勒上述公式的 x , 而 f t ( x i ) 相当于是 Δ x ,我们展开得到:


l ( y i , y ^ i t 1 + f t ( x i ) ) = l ( y i , y ^ i t 1 ) + g i f t ( x i )

其中, g i l ( y i , y ^ i t 1 ) 关于 y ^ i t 1 的一阶导数
此时,目标函数(不考虑正则项)变成:


o b j ( t ) : i = 1 n l ( y i , y ^ i t ) = i = 1 n l ( y i , y ^ i t 1 ) + g i f t ( x i )
o b j ( t 1 ) : i = 1 n l ( y i , y ^ i t 1 )

我们肯定希望目标函数每步的loss都减小的,即 O b j ( t ) < O b j ( t 1 ) ,那么关键就在于 g i f t ( x i ) 这一项了。因为我们不知道到底是正还是负,那么只需让 f t ( x i ) = α i g i α 是我们任取的一个正系数)就能 g i f t ( x i ) 让一直恒为负了。

3. Stacking

这里写图片描述

参考文献

  1. https://zh.wikipedia.org/zh-cn/AdaBoost
  2. https://en.wikipedia.org/wiki/Gradient_boosting
  3. https://zh.wikipedia.org/wiki/%E9%9A%8F%E6%9C%BA%E6%A3%AE%E6%9E%97
  4. https://www.zybuluo.com/Dounm/note/1031900#33-gradientboosting%E6%A2%AF%E5%BA%A6%E6%8F%90%E5%8D%87

猜你喜欢

转载自blog.csdn.net/john_xyz/article/details/79602365