集成算法原理——七个葫芦一条心!

Posted 柳小葱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集成算法原理——七个葫芦一条心!相关的知识,希望对你有一定的参考价值。

🍌俗话说三个臭皮匠,顶个诸葛亮,今天来介绍一下集成算法,集成算法是博主特别感兴趣的一个算法,因为集成算法中包含了迄今为止分类准确度最高的算法之一的XGBOOST,但是在此之前还是有其他的集成算法值得学习的。我们上次学习的内容依旧放在这里👇:

今天我们将讲解各种形式的集成算法,让我们开始吧!

1.集成算法介绍

在这里插入图片描述

集成算法顾名思义,就是将多个学习器集合起来,用来提高分类和预测的准确度,具体的实现方式即是从原数据抽取n个数据集训练n个分类器,多个弱学习器组合后就可以成为强学习器!

1.1集成算法的种类

集成算法分为三种类型:

  1. Bagging装袋
  2. Boosting提升
  3. Stacking

接下将详细介绍这几种算法!

2.Bagging装袋策略

Bagging装袋:又称自主聚集(bootstrap aggregating),是一种根据均匀概率分布从数据集中重复抽样(有放回)的技术。每个新数据集和原始数据集大小相等。

主要的特征:

  • 并行训练一堆分类器
  • 代表算法:随机森林 randomforest
  • 增强对学习器随机性的限制(每棵树都不一样)

2.1 Bagging的实现方式

  • 假设有一个数据集,通过Boostrap(自助抽样)有放回的抽样n次,那么产生了n个样本数据集,记为n个train数据集。
  • 将这n个train集进行训练,因此产生了n个基分类器(ID3、C4.5、CART等),即n个决策树。
  • 利用这n个基分类器对测试集进行预测,因此会得到n个结果。
  • 采取多数投票(majorty vote):将n个预测的结果出现频率最高的类作为总体预测。

2.1 Bagging的不足

  • 如果一个数据集有一个很强的预测变量和一些中等强度的预测变量,那么大多数的树都会将最强的预测变量用于顶部分裂点,这会造成所有的装袋法树看起来都很相似。
  • 对许多高度相关的量求平均带来的方差减小程度是无法与不相关的量求平均(随机森林)相提并论的。在这种情况下,装袋法与单棵树相比不会明显降低方差。(存在变量共线性的问题)

2.2 代表算法——随机森林

随机森林(random forest):随机森林是用随机的方式建立一片森林,森林由决策树组成,每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本需要分类,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类,然后看看哪一类被选择最多,就预测这个样本为那一类。

随机森林在bagging基础上做了修改:

  • 依旧是样本集中用Bootstrap采样选出n个样本
  • 从所有属性中随机选择k个属性,选择最佳分割属性作为节点建立CART决策树。
  • 重复以上两步m次,即建立了m棵CART决策树
  • 这m个CART形成随机森林,通过投票表决结果,决定数据属于哪一类。

随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一部分特征,之后再在随机选取的特征中选取最优的特征。这样能够使得随机森林中的决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。
随机森林:数据采样随机,特征选择随机。

2.3 影响随机森林性能的因素

  • 森林中单棵树的强度(strength):每棵树的强度越大,则随机森林的性能越好
  • 森林中树之间的相关度(correlation):树之间的相关度越大,则随机森林的性能越差

3.Boosting提升策略

在这里插入图片描述
Boosting提升策略:该算法是一个迭代的过程,用来自适应地改变训练样本的分布,使得弱学习器聚焦到那些很难分类的样本上。它的做法是给每一个训练样本赋予一个权重,在每一轮训练结束时自动地调整权重。

主要特征:

  • 根据前一次的分类效果调整数据权重,提升每次训练中样本集被错分样本的权重。
  • 代表算法有Adaboost、GBDT、XGBoost
  • 每个分类器根据自身的准确性来确定各自的权重,再进行整合。

3.1 Boosting的实现方式

  • 先从初始训练集训练一个基学习器
  • 再根据基学习器的表现对训练样本分布进行重调,使得先前基学习器做错的样本在后续受到更多的关注
  • 基于调整后的样本分布来训练下一个基学习器
  • 一直重复上述步骤,直到基学习器的个数达到train前的指定数T,然后将这T个基学习器进行加权

3.2 Boosting的不足

  • 如何调整训练集,使得在训练集上训练的弱学习器得以进行
  • 如何将训练得到的各个弱学习器联合起来形成强学习器

3.3 AdaBoost算法

Adaboost 原理:一个简单的弱分类算法提升过程,这个过程通过不断的训练,可以提高对数据的分类能力

  • 先通过对N个训练样本的学习得到第一个弱分类器
  • 将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器
  • 将1和2都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器
  • 最终经过提升的强分类器。即某个数据被分为哪一类要通过强分类器的多数表决

与Boosting算法不同的是,AdaBoost算法不需要预先知道弱学习算法学习正确率的下限即弱学习器的误差,并且最后得到的强学习器的精度依赖于所有弱学习器的精度,这样可以深入挖掘弱学习器算法的能力

  • 使用加权后选取的训练数据代替随机选取的训练样本,这样将训练的焦点集中在比较难分的训练数据样本上
  • 将弱学习器联合起来,使用加权的投票机制代替平均投票机制。让效果好的弱学习器具有较大的权重,而效果差的学习器具有较小的权重。

3.4 Adaboost 算法原理

  • AdaBoost算法中不同的训练集是通过调整每个样本对应的权重来实现的
  • 开始时,每个样本对应的权重是相同的,即1/n,其中n为样本个数,在此样本分布下训练出一弱分类器
  • 对于分类错误的样本,加大其对应的权重;而对于分类正确的样本,降低其权重,这样分错的样本就被突显出来,从而得到一个新的样本分布
  • 在新的样本分布下,再次对样本进行训练,得到弱分类器
  • 依次类推,经过T次循环,得到T个弱分类器,把这T个弱分类器按一定的权重叠加(boost)起来,得到最终想要的强分类器。

3.5 Adaboosting与Bagging比较

  • Adaboosting的训练集选取与前面各轮的学习结果相关;而Bagging训练集的选取是随机的,各轮训练集之间相互独立
  • Adaboosting的每个分量分类器有权重;而Bagging的分类器没有权重
  • Adaboosting的每个分量分类器智能循序生成;而Bagging可以并生成

3.6 Adaboosting案例

给定一个数据集:

x012345
y11-1-11-1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.7 GBDT梯度提升决策树

GBDT(Gradient Boosting Decision Tree,梯度提升决策树):是构建预测模型的最强大技术之一,主要思想是,每一次建立单个学习器是在之前建立的模型的损失函数的梯度下降方向。梯度提升树中可以有回归树也可以有分类树,两者都以CART树算法作为主流。以梯度提升回归树为例:先建立一棵树,然后逐渐迭代,每次迭代过程中都增加一棵树,逐渐形成众多树模型集成的强评估器。对于决策树而言,每个被放入模型的任意样本i最终一个都会落到一个叶子节点上。而对于回归树,每个叶子节点上的值是这个叶子节点上所有样本的均值。

3.8 GBDT的核心思想

回归树:

  • 利用平方误差来表示损失函数,其中每一棵回归树学习的是之前所有树的结论和残差,拟合得到一个当前的残差回归树。
  • 其中残差=真实值-预测值
  • 提升树即是整个迭代过程生成的回归树的累加

假设在GBDT迭代过程中,假设前一轮迭代迭代的强学习器是 f t − 1 ( x ) f_{t-1}(x) ft1(x)本轮迭代的目标是找到一个回归树模型的弱学习器 h t ( x ) h_{t}(x) ht(x)让本轮的损失 L ( y , f t ( x ) ) = L ( y , f t − 1 ( x ) + h t ( x ) ) L(y,f_{t}(x))=L(y,f_{t-1}(x)+h_{t}(x)) L(y,ft(x))=L(y,ft1(x)+ht(x))最小,即本轮找到的决策树,要让样本的损失函数尽量变得小。

分类树:

  • GBDT分类算法在思想上和回归算法没有区别,但是由于样本输出不是连续的值,而是离散的类别,导致无法直接从输出类别去拟合类别输出的误差。
  • 为解决此问题,用类似于逻辑回归的对数似然损失函数的方法,也就是说用类别的预测概率值和真实概率值来拟合损失函数
  • 对于对数似然损失函数,有二元分类和多元分类的区别。

3.9 GBDT的优缺点

  • 可以灵活处理各种类型的数据,包括连续值和离散值
  • 使用了一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数
  • 充分考虑的每个分类器的权重。
  • 由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT(随机梯度下降树)来达到部分并行。

3.10 RF与GBDT的比较

相同点

  • 都是由多棵树组成
  • 最终的结果都由多棵树共同决定

不同点

  • 组成随机森林的树可以分类树也可以是回归树,而GBDT只由回归树组成
  • 组成随机森林的树可以并行生成(Bagging);GBDT 只能串行生成(Boosting)
  • 随机森林的结果是多数表决表决的,而GBDT则是多棵树加权累加之和
  • 随机森林对异常值不敏感,而GBDT对异常值比较敏感
  • 随机森林是减少模型的方差,而GBDT是减少模型的偏差
  • 随机森林不需要进行特征归一化,而GBDT则需要进行特征归一化
  • 随机森林对训练集一视同仁权值一样,GBDT是基于权值的弱分类器的集成

4. XGBOOST算法

XGBOOST算法是在2016年陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。
在这里插入图片描述
用一组图来表示XGBoost与GBDT的关系
在这里插入图片描述

4.1 XGB与GBDT的差别

其实从大体上来看,XGB与GBDT好像没多大差别,但是他们主要的差别在于损失函数的定义:传统损失函数 + 模型复杂度

在这里插入图片描述
在这里插入图片描述

  • 树模型和树的集成模型都是学习天才,是天生过拟合的模型,大多数树模型最初都会出现在图像的右上方,必须通过剪枝来控制过拟合。
  • XGBoost的损失函数中自带限制方差变大的部分,即XGBoost会比其他的树模型更加聪明,不会轻易落到图像的右上方。
    在这里插入图片描述

4.2 XGB的目标函数求解

  • 在XGB中无法使用梯度下降:原因是XGB的损失函数没有需要求解的参数。在传统梯度下降中迭代的是参数,而在XGB中迭代的是树,树fk不是数字组成的向量,并且其结构不受到特征矩阵xi取值大小的直接影响。
  • 在求解XGB的目标函数的过程中,考虑如何能够将目标函数转化成更简单的,与树的结构直接相关的写法,以此来建立树的结构与模型的效果(包括泛化能力与运行速度)之间的直接联系。
  • XGB的目标函数又被称为“结构分数”

用一组图来表示:
在这里插入图片描述
其中:
在这里插入图片描述
泰勒展开:
在这里插入图片描述
在这里插入图片描述

  • 对于XGB来说,每个叶子节点上会有一个预测分数(prediction score),也被称为叶子权重,即所有在这个叶子节点上的样本在这一棵树上的回归取值,用 f k ( x i ) f_k(x_i) fk(xi)或者w来表示,其中 f k f_k fk表示第k棵决策树, x i x_i xi表示样本i对应的特征向量。
  • 当有多棵树的时候,集成模型的回归结果就是所有树的预测分数之和,假设这个集成模型中总共有K棵决策树,则整个模型在这个样本i上给出的预测结果为 y ^ k = ∑ k K f k ( x i ) \\widehat{y}^k=\\sum_{k}^{K}f_k(x_i) y k=kKfk(xi)

4.3 数的复杂度

设一棵树上总共包含了T个叶子节点,其中每个叶子节点的索引为 j,则这个叶子节点上的样本权重是 w j w_j wj。定义模型的复杂度Ω(f)为(注意这不是唯一可能的定义,还可以使用其他的定义,只要满足叶子越多/深度越大,复杂度越大的理论)
在这里插入图片描述

  • 这个结构中,一部分是控制树结构 ,另一部分则是正则项。叶子数量T可以代表整个树结构,因为在XGBoost中所有的树都是CART树(二叉树),可以根据叶子的数量判断出树的深度,而γ是自定的控制叶子数量的参数。
  • 后面就是求解W和T

4.4 寻找最佳分支

  • XGB作为树的集成模型,也采用贪婪算法来进行计算,即如果每片叶子都是最优,则整体生成的树结构就是最优,如此就可以避免去枚举所有可能的树结构。
    在这里插入图片描述

4.4 XGB vs GBDT 核心区别

预测 y ^ \\widehat{y} y 的方式不一样:

  • GBDT中预测值是由所有弱分类器上的预测结果的加权求和,其中每个样本上的预测结果就是样本所在的叶子节点的均值。
  • XGBT中的预测值是所有弱分类器上的叶子权重直接求和得到,计算叶子权重是一个复杂的过程。

正则项不同:

  • 在普通的梯度提升树GBDT中,不在目标函数中使用正则项的
  • XGB借用正则项来修正树模型天生容易过拟合这个缺陷,在剪枝之前让模型能够尽量不过拟合

参考资料

  • 覃老师的ppt
  • 《统计学习方法》

以上是关于集成算法原理——七个葫芦一条心!的主要内容,如果未能解决你的问题,请参考以下文章

随机森林原理与Sklearn参数详解

随机森林(RF)的原理

机器学习算法:Boosting集成原理和实现过程

机器学习集成学习原理

Bagging与随机森林算法原理小结

Bagging与随机森林算法原理小结