A4b90fe78e3f1e0baaf995239db2a93c
集成学习

集成学习一句话版本

集成学习的思想是将若干个学习器(分类器 & 回归器)组合之后产生新的学习器。

在学习这一章节中,老师提到了这个说法,我觉得非常言简意赅就直接引用了过来。集成学习算法的成功在于保证若分类器(错误率略小于 0.5,即勉强比瞎猜好一点)的多样性,且集成不稳定的算法也能得到一种比较明显的提升。

注:深度学习其实也可以看作是一种集成学习

集成学习的作用

采用集成学习的原因有以下四点:

  1. 分类器间存在一定的差异性,这会导致分类的边界不同,也就是说分类器是一个比较专精的专家,它有它自己一定的适用范围和特长。那么通过一定的策略将多个弱分类器合并后,就可以拓展模型的适用范围,减少整体的错误率,实现更好的效果。

    注:不严谨的类比的话,就像弹性网络模型就可以看作是由 LASSO 回归和 Ridge 回归组成的集成学习。

  2. 对于数据集过大或者过小,过大会导致训练一个模型太慢,过小则会导致训练不充分,在这种情况下可以分别对数据集进行划分和有放回的操作产生不同的数据子集,然后使用数据子集训练不同的分类器,最终再将不同的分类器合并成为一个大的分类器。

    注:这种方案的优势就在于,提高了准确度和训练速度,使得之前很难利用的数据得到了充分的利用

  3. 如果数据的划分边界过于复杂,使用线性模型很难描述情况,那么可以训练多个模型,然后再进行模型的融合。

    注:这种特性就好比当初素描老师教我们画圆一样,画一个正方形,再用一堆小直线一点一点切成圆形。

  4. 对于多个异构的特征集的时候,很难进行融合,那么可以考虑每个数据集构建一个分类模型,然后将多个模型融合。

    注:简单的来说就是公司有两个人都很厉害,但是偏偏不凑巧两个人打架,就不能把他们放一个部门里,得放不同部门一样。

集成学习的三种思想

01 Bagging

Bagging 算法思想

Bagging,这个名字就是从袋子里取的意思,本身便很形象的说明了这个算法的核心思想,即在原始数据集上通过有放回的抽样的方式,重新选择出 S 个新数据集来分别训练 S 个分类器,随后在预测的时候采用多数投票或者求均值的方式来判断预测结果。

Bagging 适用弱学习器的范围

基本的弱学习器都能用,如 Linear、Ridge、Lasso、 Logistic、Softmax、ID3、C4.5、CART、SVM、KNN。

02Boosting

Boosting 算法思想

提升学习(Boosting),这个名字也很形象,在赛车游戏中氮气加速有时候界面就描述是 boost,也就是越加越快,每次都比上一次更快,也就是说同 Bagging 是不一样的,Boosting 是会根据其他的弱分类器的结果来更改数据集再喂给下一个弱分类器。准确的描述为,Boosting 算法每一步产生弱预测模型(如决策树),并加权累加到总模型中。

它的意义在于如果一个问题存在弱预测模型,那么可以通过提升技术的办法得到一个强预测模型。

注 1: 如果每一步的弱预测模型的生成都是依据损失函数的梯度方式的,那么就称为梯度提升 (Gradient boosting)
注 2:Boosting 这个集成学习的思想就有点深度网络的意思了。

Boosting 适用范围

提升学习适用于回归分类的问题。

03 Stacking

之前提到了 Bagging 是把训练集拆成不同的子集训练多个学习器投票,而 Boosting 是根据学习器学习的结果来改动数据集,经过多层改动后试图获得一个更好的预测效果。Bagging 和 Boosting 这两个集成学习其实并没有通过训练结果来改变弱分类器的参数。相对比而言,Stacking 就激进许多,当然也复杂和困难许多,它首先训练出多个不同的模型,然后再以之前训练的各个模型的输出作为输入来新训练一个新的模型,换句话说,Stacking 算法根据模型的输出是允许改其他分类器的参数甚至结构的,也正是因为这点sklearn中很少有 stacking 的内置的算法。

1、Bagging 算法

随机森林 (Random Forest)

随机森林的思路很简单, 如下:

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

注:RF 算法在实际应用中具有比较好的特性,应用也比较广泛,主要应用在分类、 回归、特征转换、异常点检测等。

RF 算法分析
RF 的主要优点:

  1. 训练可以并行化,对于大规模样本的训练具有速度的优势。
    1. 由于进行随机选择决策树划分特征列表,这样在样本维度比较高的时候,仍然具有比较高的训练性能。
  2. 给以给出各个特征的重要性列表。
  3. 由于存在随机抽样,训练出来的模型方差小,泛化能力强;。
  4. RF 实现简单。
  5. 对于部分特征的缺失不敏感。

RF 的主要缺点:

  1. 在某些噪音比较大的特征上,RF 模型容易陷入过拟合。
  2. 取值比较多的划分特征对 RF 的决策会产生更大的影响,从而有可能影响模型的效果。

RF 的变种

01 Extra Tree

Extra Tree 是 RF 的一个相当激进的变种,原理基本和 RF 一样,区别如下:

  1. RF 会随机采样来作为子决策树的训练集,而 Extra Tree 每个子决策树采用原始数据集训练;
    1. RF 在选择划分特征点的时候会和传统决策树一样,会基于信息增益、信息增益率、 基尼系数、均方差等原则来选择最优特征值。而 Extra Tree 会随机的选择一个特征值来划分决策树。
      Extra Tree 因为是随机选择特征值的划分点,这样会导致决策树的规模一般大于 RF 所生成的决策树。也就是说 Extra Tree 模型的方差相对于 RF 进一步减少。在某些情况下,Extra Tree 的泛化能力比 RF 的强。

02 Totally Random Trees Embedding

TRTE 算法主要进行了两部分操作,第一部分是对数据进行操作,第二部分是对生成的决策树的位置信息转换成向量信息以供之后构建特征编码使用。抛开数据集上的操作,TRTE 算法对 RF 的变种在于如何参考最终生成的多个决策树来给出预测结果。
RF 是采用投票的方式,而 TRTE 算法中,每个决策树会生成一个编码来对应叶子结点的位置信息,那么把所有的决策树对应相同的分类的编码合并起来,就可以用这一合并后的编码来代表它的特征了,预测时待预测样本经过这些决策树的预测也会得到这样一个合并后的编码,通过同训练好的类别的编码之间的差距的大小来预测这个样本应该属于哪一个类别。

详细的说明说下:

  1. TRTE 是一种非监督的数据转化方式。将低维的数据集映射到高维,从而让映射 到高维的数据更好的应用于分类回归模型。
  2. TRTE 算法的转换过程类似 RF 算法的方法,建立 T 个决策树来拟合数据。当决策树构建完成后,数据集里的每个数据在 T 个决策树中叶子节点的位置就定下来了, 将位置信息转换为向量就完成了特征转换操作,这个转换过程有点像霍夫曼编码的过程。

03 Isolation Forest

这个算法是用来异常点检测的,正如 isolation 这个名字,是找出非正常的点,而这些非正常的点显然是特征比较明确的,故不需要太多的数据,也不需要太大规模的决策树。
它和 RF 算法有以下几个差别:

  1. 在随机采样的过程中,一般只需要少量数据即可。
  2. 在进行决策树构建过程中,IForest 算法会随机选择一个划分特征,并对划分特征随机选择一个划分阈值。
  3. IForest 算法构建的决策树一般深度 max\_depth 是比较小的。

算法思路如下:
对于异常点的判断,则是将测试样本 x 拟合到 T 棵决策树上。计算在每棵树上该样本的叶子节点的深度 $h_t(x)$ 。从而计算出平均深度 $h(x) $ 。然后就可以使用下列公式计算样本点 x 的异常概率值,$p(x,m)$ 的取值范围为 $[0,1]$ ,越接近于 1,则是异常点的概率越大。
$$
p(x,m) = 2^{-\frac{h(x)}{c(m)}}
$$
$$
c(m) = 2\ln(m-1)+\xi - 2\frac{m-1}{m}
$$
其中 $m$ 为样本个数,$\xi$ 为欧拉常数

注:这个公式可以简单的理解为越是出现在越深的层数,这个事件越不可能发生,足够深的情况基本上就可以判断为不可能发生是异常点

2、Boosting 算法

top Created with Sketch.