随机森林算法

1.集成算法简介

集成算法最主要的三类为Bagging、Boosting、Stacking

1.1 bagging

  Bagging(bootsrap aggregate:有放回,不放回叫做Pasting,存在如何划分样本的问题):可用于分类和回归。分类问题中,训练多个分类器进行投票,即取众数。在回归问题中,训练多个分类器取平均: f ( x ) = 1 M ∑ m = 1 M f m ( x ) f(x)=\frac{1}{M}\sum\limits_{m=1}^{M}f_m(x) f(x)=M1m=1Mfm(x)。Bagging是一种并行学习算法(因为每次取样和建模都是独立的),即基分类器可同时训练。典型的代表有随机森林。
Bagging算法过程:

  • 从原始样本中抽取训练集。每轮从原始样本集中使用Boostsraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练样本(k个训练集之间是相互独立的)。
  • 每次使用一个训练集得到一个模型(训练模型时,特征也可能是随机的),k个训练集共得到k个模型(根据问题选择分类算法或者回归算法,如决策树,感知机等)。
  • 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)。
      在放回取样导致一部分样本很有可能没有取到,平均大约37%的样本没有取到,因此Bagging不需要划分训练集和测试集,只需要将没有取到的那部分数据当做测试集样本进行测试。
      针对特征进行随机采样:random subspaces(bootstrap_features);既针对样本,又针对特征进行随机采样:random patches
      在集成思想中,Bagging的思想是每个分类器权重相同,即hard voting。此外,集成思想中的VoteClassifier中还有soft voting,即根据每个模型的预测的probablity计算,也叫加权平均

1.2 boosting

  Boosting:用于分类,回归问题。从弱学习器开始加强,通过加权来进行训练。即一种迭代算法,通过不断使用一个弱学习器弥补前一个弱学习器的“不足”的过程,来串行地构造一个较强的学习器,这个强学习器能够使目标函数值足够小。Boosting是一种串行算法,具体代表有AdaBoost

1.3 stacking

  Stacking:聚合多个分类或回归模型,可分阶段来做。如第一阶段三个分类器对一个样本的预测结果分别为1,1, 0,则第二阶段用第一阶段预测的结果(分类问题中用的是预测为1或者0的概率)作为特征继续预测,从而得出最终结果(分类中根据预测出的概率判断是哪一个类)。
  Stacking在sklearn中没有实现的方式,属于模型融合的方法,可以参考mlxtend库,有点像神经网络,因此经常发生过拟合。
随机森林算法_第1张图片

1.4bagging 和 boosting 比较

  • 区别:
    • 样本选择上:Bagging训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
    • 样例权重:Bagging:使用均匀取样,每个样例的权重相等;Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
    • 预测函数:Bagging:所有预测函数的权重相等;Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
    • 并行计算:Bagging:各个预测函数可以并行生成;Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
    • 误差:bagging是减少variance,而boosting是减少bias

1.5 第一章小结 & 补充

  • 基分类器:上述集成思想中,无论哪一种,都会生成多个模型,以随机森林为例,随机森林基本思想:生成n棵决策树,然后这n棵决策树进行投票或者平均得出最终结果。其中,每个决策树叫做基分类器或者弱分类器。由一颗颗决策树集合成的随机森林分类器称为强学习器。
  • 综合策略:上述按照集成思想分为了bagging、bosting、stacking。另一方面,从综合策略的角度,可以分为平均法:简单平均(随机森林)、加权平均(adaboost);投票法:少数服从多数、加权投票;学习法:如stacking。

2.随机森林

2.1 随机森林简介

  上述已经提到,随机森林的基本思想为: 生成n棵决策树,然后这n棵决策树进行投票或者平均得出最终结果。而每棵树生成的方式为随机选取样本、随机地选择特征。下面为随机森林的算法:

随机森林算法_第2张图片

2.2 随机森林优缺点

  • 优点:
    • 具有极高的准确率
    • 随机性的引入,使得随机森林不容易过拟合
    • 随机性的引入,使得随机森林有很好的抗噪声能力
    • 能处理很高维度的数据,并且不用做特征选择
    • 既能处理离散型数据,也能处理连续型数据,数据集无需规范化
    • 训练速度快,可以得到变量重要性排序
    • 容易实现并行化
  • 缺点:
    • 当随机森林中的决策树个数很多时,训练时需要的空间和时间会较大
    • 随机森林模型还有许多不好解释的地方,有点算个黑盒模型

2.3 随机森林推广

  由于RF在实际应用中的良好特性,基于RF,有很多变种算法,应用也很广泛,不光可以用于分类回归,还可以用于特征转换,异常点检测等。下面对于这些RF家族的算法中有代表性的做一个总结。

  • extra trees: 原理几乎和RF一模一样,区别为:
    • 对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集。
    • 在选定了划分特征后,RF的决策树会基于信息增益,基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是extra trees比较激进,他会随机的选择一个特征值来划分决策树。
    • extra tree小结:由于随机选择了特征值的划分点位,而不是最优点位,这样会导致生成的决策树的规模一般会大于RF所生成的决策树。也就是说,模型的方差相对于RF进一步减少,但是偏倚相对于RF进一步增大。在某些时候,extra trees的泛化能力比RF更好。
  • Totally Random Trees Embedding:是一种数据转化方法。它将低维的数据集映射到高维,从而让映射到高维的数据更好的运用于分类回归模型。我们知道,在支持向量机中运用了核方法来将低维的数据集映射到高维,此处TRTE提供了另外一种方法。
    • TRTE在数据转化的过程也使用了类似于RF的方法,建立T个决策树来拟合数据。当决策树建立完毕以后,数据集里的每个数据在T个决策树中叶子节点的位置也定下来了。比如我们有3颗决策树,每个决策树有5个叶子节点,某个数据特征划分到第一个决策树的第2个叶子节点,第二个决策树的第3个叶子节点,第三个决策树的第5个叶子节点。则x映射后的特征编码为(0,1,0,0,0, 0,0,1,0,0, 0,0,0,0,1), 有15维的高维特征。这里特征维度之间加上空格是为了强调三颗决策树各自的子编码。映射到高维特征后,可以继续使用监督学习的各种分类回归算法了
  • Isolation Forest:是一种异常点检测的方法。它也使用了类似于RF的方法来检测异常点。
    • 对于在T个决策树的样本集,IForest也会对训练集进行随机采样,一般来说,采样个数远远小于训练集个数。因为我们的目的是异常点检测,只需要部分的样本就可以将异常点区别出来了。
    • 对于每一个决策树的建立, IForest随机选择一个划分特征,对划分特征随机选择一个划分阈值
    • IForest一般会选择一个比较小max_depth(决策树最大深度),原因同样本采集。
    • 对于异常点的判断,则是将测试样本点拟合到T颗决策树。计算在每颗决策树上该样本的叶子节点的深度 h t ( x ) h_t(x) ht(x)。,从而可以计算出平均深度h(x)。平均深度越小,就证明这个点很快就分到异常的叶子节点上,说明这个点越可能是异常点,但不能只考虑平均深度,还要考虑数据的规模,所以把h(x)放到下面的公式中进行判断: p ( x , m ) = 2 − h ( x ) c ( m ) p(x,m) = 2^{-\frac{h(x)}{c(m)}} p(x,m)=2c(m)h(x)
      c ( m ) = l n ( m − 1 ) + ξ − 2 m − 1 m c(m) = ln(m-1) + \xi - 2\frac{m-1}{m} c(m)=ln(m1)+ξ2mm1其中,m是样本个数, ξ \xi ξ是欧拉常数

3.sklearn中随机森林参数简介

随机森林算法_第3张图片

4. 随机森林应用场景

  数据维度相对低(几十维),同时对准确性有较高要求时。因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。

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