第10章-基于树的方法(3)-树的改进-集成方法

参考:
https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf
rob.schapire.net/papers/explaining-adaboost.pdf
*https://statweb.stanford.edu/~jhf/ftp/trebst.pdf
http://www.saedsayad.com/docs/gbm2.pdf
http://www.52caml.com/head_first_ml/ml-chapter6-boosting-family/


10.8.4 随机森林

Leo Breiman 研究了基于决策树的扩展算法,称作随机森林。有很多软件可以实施该算法,可以先阅读wiki上的简介: http://en.wikipedia.org/wiki/Random_forest

详细介绍,将在后面讲解。我们先来说一下其它决策树的改进方向。

  • 候选问题 vs 节点划分方法

决策树的后续问题是关于变量大于还是小于给定的值的问题。
另一些改进,是把候选问题扩展为更复杂的问题,或更复杂的分裂方法。

举例,在每个节点上,用线性判别分析等。然而,原始的决策树方法仍然是最流行的,而且没有很强的证据显示这种扩展方式会带来更好的结果。

10.10 装袋法与随机森林概述

之前,我们都是聚焦在产生单一结果集的统计学习过程上,举例来说:

  • 在一组系数(或平滑后的系数)下产生的回归方程;
  • 在一组叶节点下产生的分类树;

我们总要抉择从候选模型中选出最优的一个。

集成方法:

接下来,我们将要讨论基于集成多个输出集合的统计学习方法。集成的过程中,需要多次使用数据集。

每一轮使用数据集时, 输入X与输出Y如之前一样被建立关系。然而,有趣的是现在我们要将每一轮产生的结果收集起来。集成结果有几个重要的优势:

  • 将收集起来的拟合结果平均化,会避免过拟合。集成方法趋于把由特定模型产生的异常特征去除掉,因此结果更稳定;
  • 尝试更多的拟合,可以产生更多样的拟合函数;
  • 结合平均化的结果以及多样化的拟合函数,有打破 bias-variance tradeoff 的潜力
    (备注:均方误差可以分解成:
    Error = Bias + Variance + Noise
    bias-variance tradeoff 表示偏差与方差是此消彼长的关系);

回顾过拟合:

扫描二维码关注公众号,回复: 4694512 查看本文章

任何从数据集上拟合出来的模式,都会面临过拟合的风险。所有拟合方法都是让模型更符合我们手边已有的数据,即使是对同一总体,新的样本的拟合质量也很可能会下降。因此,泛化的使用该模型是有风险的。

以决策树为例:

过拟合风险往往与下面因素有关:

  • 1) 分裂次数
  • 2) 预测的类别数
  • 3) 树的层数(同时代表着叶节点数)

当分类树出现过拟合问题时,分类的错误率就被低估了。模型将不会有很好的泛化能力。

理想情况下,我们有来自总体的两份随机样本:一个作为训练集,另一个作为测试集。通过测试集得到的拟合优度的测量,是对分类器准确率的一个很好的估计。然而通常,我们只有一个数据集。此时,我们可以把数据集随机分为不重叠的、相等数量的若干份。以分10份为例,循环选取每一份为测试集,其他9份合起来作为训练集。下面的例子中,用到了2-折交叉验证,来估计模型A和模型B的分类错误率。模型的选择是选取具有最小交叉验证下的预测误差率的模型。

.

10.11 装袋法 (bagging)

使用从数据中得到的子样本,以及通过自助法对子样本进行平均化处理的这种思想是非常强大的。

装袋法利用了这种思想,以更基本的方法处理过拟合问题。
Leo Breiman, 发明了这种方法,被称为”bootstrap aggregating” or simply “bagging” 。
(see the reference: “Bagging predictors,” Machine Learning, 24:123-140, 1996, cited by 7466).

在分类树中,对于由训练集自助法得到的每个样本建立起的分类器,装袋法采用了多数投票的原则。

算法:对N个观察样本数和一个二分响应变量组成的数据集的拟合算法,考虑步骤如下,

  • 从数据集中有放回随机抽样,样本量为N
  • 构建未剪枝的分类树
  • 确定给每个叶(终)节点的分类,存储每个样本的原始类以及预测分类
  • 大量地重复1-3步多次
  • 对数据集中的每个样本,统计在所有决策树中划分为某一类的次数
  • 根据划分为某一类的最大频数来确定最终分类。因此,如果以至少50%以上的频率被划分分类“1”,最终就确定为这个分类。

    尽管还有很多关键变量和细节需要考虑,但是装袋法的主要步骤就如上所述。平均化处理基于大量自助法样本产生的结果的这种思想,除了分类树,还可以运用到更广泛的其他分类方法中去。

Margins:
装袋法产生了一个新的概念, “margins.”
“margins” = 一个样本被正确分类的比率 - 一个样本被错误分类的比率
举例,如果对于所有的树,一个样本被正确分类的比率为75%,那么它的margins=0.75-0.25=0.50

大的 margins 意味着一个更稳定的分类。理想情况下,对于所有样本都要保持一个较高的 margins. 这将预示着,分类器对新数据具有很好的泛化能力。

Out-Of-Bag 样本:

对于每个树,没有被自助法样本包含的数据,称为 “out-of-bag” 样本. 这部分样本可以被当作测试集。

为了得到更好的模型估计,估计错误率仅使用”out-of-bag” 样本.换句话说,这种错误率的估计,是根据这些没有使用过”out-of-bag” 样本生成的树所计算得到的。

例子:家庭暴力研究

为什么装袋法奏效呢 ? 其核心思想是对于由自助法得到的结果进行平均化处理。作为估计,平均化帮助我们消除随机波动的影响。当然远不止这些,细节的讨论将放在后面。

用来预测住户中家庭暴力情况的数据已经被收集到了。以警长的手下被派到处理家庭暴力事件的住户为样本。警官收集一些用来预测未来家庭暴力的信息,比如说,过去这段时间,是否有警官被这些住户呼叫过。

下图是三个分类树,都是基于同一个数据集构建的,但每次都是基于自助法生成的不同的样本。

这里写图片描述

这里写图片描述

这里写图片描述

很明显三个图非常不同。不稳定的结果可能是由于几种常见问题导致的:
样本量很小,预测变量有相关性;或者叶节点的不纯性。当分类树出现这些问题时,使用一颗树的结果是非常有风险的。然而,把分类树整体作为一个分类工具,单看类的预测结果则可能是相对稳定的,即使树本身的结构有差异。

传统回归中,当预测变量存在高度相关时,也会出现这种现象。回归系数的估计可能非常不稳定,但是不代表拟合出的结果也是不稳定的。

虽然没法清楚知道三颗树之间的偏倚是多少,但是树之间的方差应该是比较大的。装袋法有助于减小方差。装袋法的优势是集成了自助法产生的多个拟合结果。理想情况下,自助法的每个拟合结果都是低偏差、高方差的,也许平均化的手段可以有效地减少 bias-variance tradeoff. 装袋法集成拟合结果的这种思想是许多其他统计学习发展的基础。

装袋法对于数值型的因变量同样奏效:

  • 对每棵树,叶节点的每个样本被赋予了这个叶节点下的样本均值
  • 对于每个样本都进行上一步走
  • 每个样本的均值即为装袋法的拟合值

装袋法的R包:
ipred 包的 bagging() 可以被用在分类、回归以及生存树上
nbagg 包 …
我们也可以用”randomForest” 包,因为装袋法是随机森林的一个特例。

10.12 从装袋法到随机森林

装袋法基于自助法产生的样本生成了大量的树,但是现在要在生成每个树的同时,且节点进行分裂之前,对特征变量也进行随机抽样。举例来说,如果有20个特征变量,随机选5个来进行分裂生成最好的树。在每个节点重复这个过程,直到树足够大。然后与装袋法一样,此处不进行剪枝。

随机森林算法:

与装袋法的算法很像,令N为样本个数,且假定自变量是二元响应变量。

  1. 从数据中随机有放回地抽取样本量为N的样本(自助法)。
  2. 随机有放回的选取特征变量(x)。
  3. 根据第二步中选择的特征变量(x)进行分裂。
  4. 对于每个分裂都重复2-3步直到树生成的足够大。不用剪枝。每个树都是从一个随机样本中产生的,每个节点的分裂也是根据随机特征变量的选取。
  5. 把out-of-bag的数据运用到生成的树中。存下每个样本的原始分类和预测分类。
  6. 大量重复1-5步(比如说500步)。
  7. 对于数据集中国年的每个样本点,统计对于一个样本点预测为某一类的次数(即,预测为此类的树的个树)。
  8. 每个样本被预测为最多次数的那个类就是最重分类。因此如果51%的树都预测某个样本为类别”1”,那么此样本就是被预测为这个分类。

为什么随机森林奏效

方差的缩减:每个树都是独立的,因为自助法的抽样和特征变量的抽样。
- 很显然,随机森林树bagging的一种形式,对于树的平均化能够充分地减少结果的不稳定性。而且,因为每个分裂的节点都是基于特征变量的随机选取,由此得到的拟合值也会有更好的独立性。因此,对大量的树进行平均化处理产生的收效非常惊人。

偏差的缩减:随机选取了大量的特征变量,每个变量对于树的构成都至关重要。
- 随机森林由大量随机抽取的特征变量产生,因此有更多的信息被用于减少拟合值的偏差。
- 对于决策树,常常是由少数特征变量控制着整个分裂过程,因为从平均化的意义上看,这些变量会比其他特征更好一点。结果就会导致在局部可能会非常有用的特征并没有被选上的机会。而随机森林这种由大量随机样本产生的树,并且在每个节点都随机挑选特征变量的特质将会有一些机会减少上树问题。因此,局部特征有机会去定义一个分裂。

事实上,随机森林到目前为止仍是最优秀的分类器之一(Breiman, 2001a).

随机森林涉及对三个参数对调整:

  • 节点的规模:与决策树不同,每个树的叶节点的样本量可能很小。目的就是生成树的同时尽量减少产生偏差的可能性。
  • 树的规模:实践中,500颗树通常是个不错的选择。
  • 特征变量的选择:每个分裂节点上对特征变量的选择上至关重要的,将会影响到随机森林的效果。每次选取2-5个特征是合适的。

    例子(略)

    综上,如果用准确率来作为一个结果的衡量时,装袋法比决策树法要好。因为它是对数据集上通过自助法产生的随机样本构建了许多颗树。而且随机森林法要比装袋法好。因为它在装袋法的基础上又在每个节点上对特征进行了随机选取。

R包:
在R中,我们可以用”randomForest”包实现随机森林.

In R, the random forest procedure can be implemented by the “randomForest” package.

rf=randomForest(x=X.train,y=as.factor(Y.train),importance=T,do.trace=50, ntree=200,classwt=c(5,1))
print(rf)

.

10.13 提升法

提升法,与装袋法类似,是对统计学习结果改进的一种通用方法。提升法也适用于分类树。

回想,装袋法是将原始数据集通过自助法产生多个样本,并基于每个样本产生独立的决策树,再将多个树的预测结果以投票的方式进行合并。而提升法是序列地产生树的,即后一个树是在前一个树的基础上生成的。

这里写图片描述

从AdaBoost到Gradient Boosting,参考知乎专栏

(当然bagging和Adaboost、boosting是集成弱分类器的策略,所以除了CART算法以外,是可以结合其他分类器的.如xgboost包就可以使集成线性分类器,gbm包也可以集成其他分类器)

猜你喜欢

转载自blog.csdn.net/tongweiganglp/article/details/51519672