logo

Random Forest

wangzf / 2022-08-09


目录

随机森林介绍

模型介绍

随机森林是一种有监督学习算法,随机森林非常简单,易于实现,计算开销也很小, 但是它在分类和回归上表现出惊人的性能,因此,随机森林被誉为"代表集成学习技术水平的方法”

随机森林(Random Forest, RF)是一种以决策树为基学习器的集成(ensemble)学习器, 它利用 Bootstrap 抽样方法从原始样本中抽取多个样本进行决策树(decision tree)建模,然后将这些决策树组合在一起, 通过对所有决策树结果的平均(Mean)或投票(Vote)得出最终预测的回归(Regression)或分类(Classification)的结果

大量的理论和实证研究都证明了随机森林:

随机森林的基学习器

随机森林的基学习器就是没有剪枝的决策树

随机森林的随机性

随机森林的随机性体现在数据集样本的随机抽样选择和待选特征的随机抽样选择

数据集样本的随机抽样选择:

待选特征的随机抽样选择:

随机森林的优缺点

优点:

  1. 由于采用了集成算法,本身精度比大多数单个算法要好,所以准确性高
  2. 在测试集上的表现良好,由于两个随机性(样本随机、特征随机)的引入,使得随机森林不容易陷入过拟合
  3. 在工业上,由于两个随机性的引入,使得随机森林具有一定的抗噪声能力,对比其他算法具有一定的优势
  4. 由于使用决策树的组合,使得随机森林可以处理非线性数据,本身属于非线性分类(拟合)模型
  5. 能够处理高维度的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据无需规范化
  6. 训练速度快可以运用在大规模数据集上
  7. 可以处理含有缺失值的特征(单独作为一类),不用额外处理
  8. 由于有袋外数据(OOB),可以在模型生成过程中取得真实误差的无偏估计,且不损失训练数据量
  9. 由于每棵树可以独立、同时生成,容易做成并行化方法
  10. 由于实现简单、精度高、抗过拟合能力强,当面对非线性数据时,适于作为基准模型

缺点:

  1. 当随机森林中的决策树个数很多时,训练时需要的空间和时间会比较大
  2. 随机森林中还有很多不好解释的地方,有点算是黑盒模型
  3. 在某些噪音较大的样本集上,随机森林容易陷入过拟合
  4. 不能很好地处理非平衡数据
    • 由于随机森林在构建过程中,训练集是随机选取的,使用 Bootstrap 随机抽样时,由于原训练集中的少数类本身就比较少, 因此被选中的概率就很低,这使得 M 个随机选取的训练集中含有的少数类数量比原有的数据集更好或没有, 这反而加剧了数据集的不平衡性,使得基于此数据集训练出来的决策树的规则就没有代表性
    • 由于数据集本身少数类占有的比例就低,使得训练出来的决策树不能很好地体现占有数量少的少数类的特点, 只有将少数类的数量加大,使数据集中的数据达到一定的程度平衡,才能使得算法稳定
  5. 需要对连续性变量进行离散化
  6. 随机森林的分类精度需要进一步提升
    • 数据集的维度和样本的平衡性
    • 算法本身的决策树分裂规则、随机抽样

随机森林的构建过程

随机森林的产生,是为了克服决策树在回归和分类预测方面有诸多缺点, 结合单个树学习器组合成多个学习器的思想生成多棵决策树,这些决策树不需要都有很高的精度, 并让所有的决策树通过投票的形式进行决策

参数符号使用声明:

  1. $n\_tree$:构建的决策树数量
  2. $M$:所有样本数量
  3. $m$:Bootstrap 抽样的样本数量
  4. $P$:所有特征数量
  5. $p$: 随机抽取的特征数量

随机森林构建大致过程:

  1. 从原始训练数据集中使用 Bootstrap 方法随机有放回采样取出 $m$ 个样本, 共进行 $n\_tree$ 次采样,生成 $n\_tree$ 个训练集
  2. 从原始训练数据集中使用不放回抽样随机抽取出 $p$ 个特征
  3. $n\_tree$ 个训练集,分别训练 $n\_tree$ 个决策树模型
    • 对于单个决策树模型,每次分裂时根据 “信息增益/信息增益率/基尼指数” 从 $p$ 个特征中选择最好的特征进行分裂
    • 每棵树都一直这样分裂下去,直到该节点的所有训练样本都属于同一类。在决策树的分裂过程中不需要剪枝
  4. 将生成的多棵决策树组成随机森林
    • 对于分类问题,按照多棵树分类器投票决定最终分类结果
    • 对于回归问题,由多棵树预测值的均值决定最终预测结果

注意:OOB(out-of-bag):每棵决策树的生成都需要自助采样, 这时就有 $\frac{1}{3}$ 的数据未被选中,这部分数据就称为袋外数据

决策树样本抽样

Bootstrap 抽样产生训练集

每棵决策树都对应一个训练集数据,要构建 $n\_tree$ 棵决策树, 就需要产生对应数量($n\_tree$)的训练集, 从原始训练集中产生 $n\_tree$ 个训练子集要用到统计抽样技术

现有的统计抽样技术很多,按照抽样是否放回主要包括以下两种:

Bagging 和 Boosting 方法都是有放回的抽样方法,但两者间存在很大的差别:

随机森林算法在生成的过程中,主要采用 Bagging 方法,也就是 Bootstrap 抽样:

构建决策树

随机森林算法为每个 Bootstrap 抽样训练子集分别建立一棵决策树, 生成 $m$ 棵决策树从而形成 “森林”。每棵树任其生长,不需要剪枝。 其中涉及两个主要过程:

随机特征的选取

随机特征是指随机森林算法在生成的过程中,参与节点分裂的特征。 由于随机森林在节点分裂时,不是所有的特征都参与分裂指标的计算, 而是随机地选择某些特征参与比较,参与节点分裂的特征就称之为随机特征

随机特征是为了使每棵决策树之间的相关性减少,同时提升每棵决策树的分类精度, 从而提升整个随机森林的性能而引入的。其基本思想是,在进行节点分裂时, 让所有的特征按照某种概率分布随机选择其中某几个属性参与节点分裂过程。 在随机森林算法中,随机特征变量的产生方法主要有两种:

最常用的随机森林算法都是使用 Forest-RI 方法构建,在每棵子树的生长过程中, 不是将全部 $P$ 个输入变量参与节点分裂,而是随机抽取指定 $p$($p \leq P$)个随机特征变量, $p$ 的取值一般为 $log_{2}(P+1)$ ,以这 $p$ 个属性上最好的分裂方式对节点进行分裂, 从而达到节点分裂的随机性

节点分裂

随机森林常用的决策树生成方法有 C4.5、CART

随机森林的形成

通过建立大量($n\_tree$ 棵)的决策树,就形成了随机森林。算法最终的输出结果采取大多数投票法实现。 根据随机构建的 $n\_tree$ 决策子树将对某测试样本进行分类,将每棵子树的结果汇总, 所得票数最多的分类结果将作为算法最终的输出结果

随机森林的特征选择功能

用随机森林进行特征重要性评估的思想就是看每个特征在随机森林中的每棵树上做了多大的贡献, 然后取平均值(每个特征在所有决策树上的贡献平均值),最后比一比特征之间的贡献的大小;

特征在决策树上的贡献的大小度量通常使用基尼指数(Gini Index)或者袋外数据(OOB)错误率作为评估指标来衡量

特征选择的步骤

在特征重要性的基础上,特征选择的步骤如下:

  1. 计算每个特征的重要性,并按降序排列
  2. 确定要剔除的比例,依据特征重要性剔除相应比例的特征,得到一个新的特征集
  3. 用新的特征集重复上述过程,直到剩下 $p$ 个特征($p$ 为提前设定的值)
  4. 根据上述过程得到的各个特征集合对应的 OOB 误差率,选择 OOB 误差率最低的特征集

特征重要性的估计方法

特征重要性的估计通常有两种方法:

  1. 使用 uniform 或者 gaussian 抽取随机值替换特征
  2. 通过 permutation 的方式将原来的所有 $M$ 个样本的第$i$ 个特征重新打乱分布;

第二种方法更加科学,保证了特征替代值与原特征的分布是近似的。这种方法叫做 permutation test, 即在计算第 $i$ 个特征的重要性的时候,将 $P$ 个特征的第 $i$ 个特征重新洗牌, 然后比较 D 和表现的差异性,如果差异很大,则表明第 $i$ 个特征是重要的

随机森林的性质、性能、参数

性质讨论

泛化误差的收敛性

随机森林中的决策树的泛化误差都收敛于:

$$\underset{n \rightarrow \infty}{\lim}PE^{*}=P_{xy}(P_{\Theta}(k(X,\Theta)=Y)-\underset{j\neq Y}{\max}P_{\Theta}(k(X,\Theta)\neq Y) > 0)$$

随着随机森林中决策树数量($n\_tree$)的增加,随机森林泛化误差($PE^{*}$)将趋向一个上界。 随机森林对未知实例有很好的扩展性,也就是说随机森林随着决策树数量的增多不易过拟合

决策树的相关度和强度对的泛化误差的影响

随机森林泛化误差的上界为:

$$PE^{*}\leqslant \frac{\bar{\rho}(1-s^{2})}{s^{2}}$$

其中:

要使随机森林的泛化性能好,则应该尽量减小决策树之间的相关性($\rho$),增大单棵树的分类性能($s$)

性能评价指标

随机森林分类性能主要受内外两方面因素的影响:

分类效果

泛化误差

泛化误差(generalization error)是反应泛化能力(generalization ability)的一个指标。 随机森林的泛化误差理论上是可以计算出来的,然而,在实际环境中,样本的期望输出和分布情况都是不知道的, 无法直接通过计算泛化误差来评估随机森林的泛化能力。但是泛化误差可以通过以下方法进行估计:

参数设置

随机森林算法中需要设置的主要参数有: