集成学习简单理解就是指采用多个分类器对数据集进行预测,从而提高整体分类器的泛化能力。
集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系。另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合。
1. Bagging
Bagging算法(Bootstrap aggregating,引导聚集算法),又称装袋算法,是机器学习领域的一种集成学习算法。
算法思想:
- For t = 1, 2, …, T Do
- 从数据集S中取样(放回选样)
- 训练得到模型
- 对未知样本
分类时,每个模型
都得出一个分类,得票最高的即为未知样本
的分类;
对于数值类的回归预测问题,通常使用的结合策略是平均法,也就是说,对于若干和弱学习器的输出进行平均得到最终的预测输出。
1.1随机森林
随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法
算法思想:
- 用 来表示训练用例(样本)的个数, 表示特征数目。
- 输入特征数目 ,用于确定决策树上一个节点的决策结果;其中 应远小于 。
- 从 个训练用例(样本)中以有放回抽样的方式,取样 次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。
- 对于每一个节点,随机选择 个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这 个特征,计算其最佳的分裂方式。
- 每棵树都会完整成长而不会剪枝(Pruning,这有可能在建完一棵正常树状分类器后会被采用)
2.Boosting
2.1 Adaboost
AdaBoost,是英文”Adaptive Boosting”(自适应增强)的缩写。AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。AdaBoost方法对于噪声数据和异常数据很敏感。但在一些问题中,AdaBoost方法相对于大多数其它学习算法而言,不会很容易出现过拟合现象。AdaBoost方法中使用的分类器可能很弱(比如出现很大错误率),但只要它的分类效果比随机好一点(比如两类问题分类错误率略小于0.5),就能够改善最终得到的模型。而错误率高于随机分类器的弱分类器也是有用的,因为在最终得到的多个分类器的线性组合中,可以给它们赋予负系数,同样也能提升分类效果。
AdaBoost方法是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。每一个训练样本都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。通过这样的方式,AdaBoost方法能“聚焦于”那些较难分(更富信息)的样本上
步骤:
假设有
个样本,
,
是特征向量,
是标签
1. 初始化样本
,
,
(最大循环次数),样本分布
2.
3.
4. 训练使用按照
采样的
的弱分类器
5.
←计算弱分类器
的训练误差, 如果
, 则continue
6.
, 这里
就是该分类器的权重
7. 改变样本的分布,提高错分样本的概率,降低正确分类样本的概率
8.
9.
和
,
(带权值分类器的总体)
10.
2.2 Gradient Boosting
2.2.1 Boosting Tree
首先,提升树模型其实就是决策树的加法模型,表现为
其中, 表示决策树, 为树的参数,
回归提升树的分布算法如下:
给定当前模型 ,需要求解第 颗树的参数:
代表总共有 个样本。 通过上式,从而得到 , 即第 颗树的参数
如果使用平方误差损失函数 ,其损失变为
其中,
, 即残差,可以理解为是当前模型
所以,对于回归问题的Boosting Tree来说,每一步只需要拟合当前模型的残差即可。
2.2.2 GBDT(Gradient Boosting Decision Tree)
boosting Tree 提升树利用加法模型实现优化过程时,当损失函数是平方损失函数时,每一步的优化很简单。但对于一般损失函数而言,往往每一步的优化没那么简单,所以引入了梯度提升(Gradient Boosting)算法。
GBDT的目标函数
对于普通的机器学习模型而言,其目标函数可以定义为如下:
其中
代表有
个样本。前面一项是loss函数, 后面一项是正则项。
综合上述加法模型的计算过程,在第
步,其目标函数是:
此时,优化该目标函数,就能得到
负梯度的理论支撑
前面第提到Gradient Boosting时,提及Gradient Boosting以负梯度代替残差来求解基函数,实际上,负梯度的理论支撑则是泰勒公式的一阶展开。即
对于在第
步的目标函数,对
做一阶泰勒展开,其中\hat{y}_i^{t-1}相当于泰勒上述公式的
, 而
相当于是
,我们展开得到:
其中,
是
关于
的一阶导数
此时,目标函数(不考虑正则项)变成:
我们肯定希望目标函数每步的loss都减小的,即 ,那么关键就在于 这一项了。因为我们不知道到底是正还是负,那么只需让 ( 是我们任取的一个正系数)就能 让一直恒为负了。