模型融合-集成学习-boosting-bagging-随机森林

模型融合

    • 1.个体学习器
    • 2.集成学习(ensemble learning)
    • 3.boosting和bagging
      • ①boosting
      • ②bagging
    • 4.结合策略
      • ①平均法
      • ②投票法
      • ③学习法
    • 5.随机森林思想
    • 6.随机森林的推广
      • ①extra trees
      • ②Totally Random Trees Embedding(TRTE)
      • ③Isolation Forest(IForest)
    • 7.随机森林优缺点
      • 优点
      • 缺点
    • 8.随机森林 sklearn参数
    • 9.应用场景
    • 参考链接

1.个体学习器

个体学习器通常由一个现有的学习算法训练数据所产生,例如逻辑回归、决策树等。

2.集成学习(ensemble learning)

通过训练若干个个体学习器,通过一定的结合策略,最终形成一个强学习器:

  1. 概念 ,构建并结合多个学习器来完成学习任务,也被成为多分类器系统,常可获得比单一学习器显著优越的泛化的性能,可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等;
  2. 集成学习有两个主要的问题需要解决,第一是如何得到若干个个体学习器,第二是如何选择一种结合策略,将这些个体学习器集合成一个强学习器
  3. 对于得到若干个个体学习器,有两种选择 ,第一种就是所有的个体学习器都是一个种类的,或者说是同质的。比如都是决策树个体学习器,或者都是神经网络个体学习器。第二种是所有的个体学习器不全是一个种类的,或者说是异质的。比如我们有一个分类问题,对训练集采用支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来学习;

3.boosting和bagging

一般常说的集成学习的方法都是指的同质个体学习器,同质个体学习器使用最多的模型是CART决策树和神经网络。
同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类:

  • 个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成(类似电路串联),代表算法是boosting系列算法
  • 个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成(类似电路并联),代表算法是bagging系列算法(如随机森林Random Forest)

    ①boosting

模型融合-集成学习-boosting-bagging-随机森林_第1张图片
从图中可以看出,Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视,然后基于调整权重后的训练集来训练弱学习器2,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。

  • ②bagging

模型融合-集成学习-boosting-bagging-随机森林_第2张图片

  • bagging的个体学习器的训练集是通过随机采样得到的。通过T次的随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略来得到最终的强学习器。
  • 这里的随机采样是采用Bootstrap自助有放回采样:即对于m个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集m次,最终可以得到m个样本的采样集,由于是随机采样,这样每次的采样集是和原始训练集不同的,和其他采样集也是不同的,这样得到多个不同的弱学习器。
    模型融合-集成学习-boosting-bagging-随机森林_第3张图片

4.结合策略

  • ①平均法

对于数值型输出,最常见的结合策略是使用平均法。
●简单平均法
●加权平均法
加权平均法是简单平均法的特例,被广泛运用于集成学习。但加权平均算法也存在一定的缺陷,因为加权平均法的权重一般是从训练数据中学习而得,现实任务中的训练样本通常不充分或存在噪声,这将使得学出的权重不完全可靠。尤其当集成规模较大时,要学习的权重较多,就容易导致过拟合。
如何选择平均法?
一般而言,在个体学习器性能相差较大时宜使用加权平均法,而在个体学习器性能相近时宜使用简单平均法。

  • ②投票法

对于分类问题,最常见的结合策略就是投票法。
●绝对多数投票法,提供了“拒绝预测”的选项
●相对多数投票法
●加权投票法
●一票否决
●贝叶斯投票机制
需要注意的是,若基学习器不同,其类概率值不能直接进行比较,通常需要将其转化为类标记输出,然后在投票。

  • ③学习法

当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合。Stacking是学习法的典型代表。我们将个体学习器称为初级学习器,结合学习器称为次级学习器。
将初级学习器输出的类别概率输入次级学习器作为属性,用多响应线性回归(MLR)作为次级学习算法效果较好,在MLR中使用不同属性集更佳。

5.随机森林思想

随机森林是bagging的进阶版,其在bagging的样本随机采样基础上,又加上了属性的随机选择。
  在随机森林中,先从树结点的属性集合中随机选择一个包含部分属性的子集,然后再从这个子集中选择一个最优属性用于划分。
  
模型融合-集成学习-boosting-bagging-随机森林_第4张图片

6.随机森林的推广

由于随机森林在实际应用中的良好特性,基于随机森林,衍生出变种算法,其衍生算法可以用于分类回归,特征转换,异常点检测等。总结衍生算法如下:

  • ①extra trees

extra trees一般不采用随机采样,每个决策树采用原始训练集。extra trees在选择特征划分的时候随机的选择一个特征值来划分决策树,而不是选择最优特征划分。但由于其生成的决策树的规模一般会大于随机森林所生成的决策树,所以有时extra trees的泛化能力比随机森林更好。

  • ②Totally Random Trees Embedding(TRTE)

TRTE在数据转化的过程也使用了类似于RF的方法,建立T个决策树来拟合数据。当决策树建立完毕以后,数据集里的每个数据在T个决策树中叶子节点的位置也定下来了。然后用一种非监督学习的数据转化方法,将属性位于不同决策树的节点位置映射到高维,从而让映射到高维的数据更好的运用于分类回归模型。

  • ③Isolation Forest(IForest)

一种异常点检测的方法。
对于在T个决策树的样本集,IForest也会对训练集进行随机采样,但是采样个数远远小于训练集个数,因为其目的是异常点检测,只需要部分的样本一般就可以将异常点区别出来了。
对于每一个决策树的建立, IForest采用随机选择一个划分特征,对划分特征随机选择一个划分阈值。另外,IForest一般会选择一个比较小的最大决策树深度max_depth,也是因为异常点检测一般不需要这么大规模的决策树。

7.随机森林优缺点

  • 优点

1、自带out-of-bag (oob)错误评估功能。每个基学习器只使用了训练集中约63.2%的样本,剩下约36.8%的样本可用做验证集来对其泛化性能进行‘包外估计’。所以不用对其进行交叉验证或者使用一个独立的测试集获得无偏估计。
2、不需要太多的数据预处理工作,实现比较简单,且目前在很多现实任务中展现出强大的性能
3、隐含地创造了多个联合特征,并能够解决非线性问题。
4、和决策树模型,GBDT模型相比,随机森林模型不容易过拟合。
5、在创建随机森林的时候,对generlization error使用的是无偏估计,模型泛化能力强,且集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升。
6、可以并行化训练树,训练速度快
7、 对于不平衡的数据集来说,它可以通过调整class_weight参数来平衡误差。
8、可以处理高维数据集,因为其特征子集是随机选择的

  • 缺点

1、随机森林在某些噪音较大的分类或回归问题上会发生过拟合现象
2、对于取值划分较多的属性容易对随机森林的决策产生更大的影响,从而影响拟合的模型的效果。
3、不适合小样本,只适合大样本。

8.随机森林 sklearn参数

class sklearn.ensemble.RandomForestClassifier
(n_estimators=10, crite-rion=’gini’, max_depth=None, 
min_samples_split=2, min_samples_leaf=1, 
min_weight_fraction_leaf=0.0, 
max_features=’auto’, 
max_leaf_nodes=None, bootstrap=True, 
oob_score=False, n_jobs=1, ran-dom_state=None, verbose=0, 
warm_start=False, class_weight=None) 
n_estimators :是森林里树的数量,通常数量越大,效果越好,但是计算时间也会随之增加。
 此外要注意,当树的数量超过一个临界值之后,算法的效果并不会很显著地变好。

criterion: ”gini” or “entropy”(default=”gini”)是计算属性的gini
(基尼不纯度)还是entropy(信息增益),来选择最合适的节点。

max_depth: (default=None)设置树的最大深度,默认为None,这样建树时,
会使每一个叶节点只有一个类别,或是达到min_samples_split。

min_samples_split:根据属性划分节点时,每个划分最少的样本数。

min_samples_leaf:叶子节点最少的样本数。

min_weight_fraction_leaf: (default=0) 叶子节点所需要的最小权值

max_features: 是分割节点时考虑的特征的随机子集的大小。 这个值越低,
方差减小得越多,但是偏差的增大也越多。

当为整数时,即最大特征数;当为小数时,训练集特征数*小数;

if “auto”, then max_features=sqrt(n_features).

If “sqrt”, thenmax_features=sqrt(n_features).

If “log2”, thenmax_features=log2(n_features).

If None, then max_features=n_features.

 

max_leaf_nodes: (default=None)叶子树的最大样本数。

bootstrap=True:是否有放回的采样。

oob_score=False:oob(out of band,带外)数据,即:
在某次决策树训练中没有被bootstrap选中的数据。
多单个模型的参数训练,我们知道可以用cross validation(cv)来进行,
但是特别消耗时间,而且对于随机森林这种情况也没有大的必要,
所以就用这个数据对决策树模型进行验证,
算是一个简单的交叉验证。性能消耗小,但是效果不错。  

n_jobs=1:并行job个数。这个在ensemble算法中非常重要,尤其是bagging(而非boosting,
因为boosting的每次迭代之间有影响,所以很难进行并行化),
因为可以并行从而提高性能。
1=不并行;n:n个并行;-1:CPU有多少core,就启动多少job。

random_state : int, RandomState instance or None, optional (default=None) 整数,
RandomState实例,或者为None,可选(默认值为None)

verbose : int, optional (default=0) 整数,可选的(默认值为0)

warm_start=False:热启动,决定是否使用上次调用该类的结果然后增加新的。  

class_weight=None:各个label的权重。

参考Sklearn库中的随机森林参数

9.应用场景

随机森林用于分类回归,特征转换,异常点检测等,适用于数据维数相对较低(几十维),且需要达到一定准确率的场景。
随机森林在多数数据集上都有不错的表现,相对来说,出现预测效果很差的情况较少。可以作为模型的baseline作为参考。

参考链接

https://www.cnblogs.com/pinard/p/6131423.html
https://blog.csdn.net/mengdiefeixumyname/article/details/85806894

你可能感兴趣的:(机器学习)