森林顾名思义就是有很多树,这里的树当然就是决策树。实际上随机森林就是将 fully-grown C&RT decision tree 作为 bagging 基模型(base model)。

R软件随机森林模型代码 r随机森林分类_映射函数

bagging 会减小方差(variance),而一颗完全长成树的方差会很大,两种相互补足。所以随机森林有以下优点:

  • highly parallel/efficient to learn(效率高,可并行处理)
  • inherit pros of C&RT(继承 C&RT 的优点)
  • eliminate cons of fully-grown tree(弥补 完全长成树的缺点)

随机特征空间(Feature Expansion/Projection)

在 bagging 中使用 bootstrap 获取随机数据,实现多样化。那么还有什么方法呢,那便是从特征出发,类似于非线性转换函数,挖掘出不一样的特征空间。随机森林中提出两种方法特征映射和特征扩展。

特征映射(Projection)

特征映射实际上是从原来的特征 R软件随机森林模型代码 r随机森林分类_R软件随机森林模型代码_02 中随机选择选取 R软件随机森林模型代码 r随机森林分类_随机森林_03 个特征。该映射函数 R软件随机森林模型代码 r随机森林分类_R软件随机森林模型代码_04

R软件随机森林模型代码 r随机森林分类_随机森林_05

同时建议 R软件随机森林模型代码 r随机森林分类_映射函数_06,这样的话对于 R软件随机森林模型代码 r随机森林分类_机器学习_07

所以随机森林的一种表现形式为:
R软件随机森林模型代码 r随机森林分类_映射函数_08

特征扩展(Expansion)

特征扩展实际上也是特征映射,只是其映射函数不同而已,这里认为映射函数则是乘上一个映射矩阵。

R软件随机森林模型代码 r随机森林分类_决策树_09

在特征映射中,则是一个 R软件随机森林模型代码 r随机森林分类_随机森林_03R软件随机森林模型代码 r随机森林分类_R软件随机森林模型代码_11 列的矩阵,且每一行每列均为单位向量(natural basis)。在特征扩展中,则该映射矩阵的维度不变,但是每一行都是一个随机生成的向量(不再是单位向量),映射后的每一个特征则是多个特征的线性组合(combination),即R软件随机森林模型代码 r随机森林分类_映射函数_12,,但是建议该向量是一个稀疏向量只有 R软件随机森林模型代码 r随机森林分类_映射函数_13

所以随机森林的另一种表现形式为:
R软件随机森林模型代码 r随机森林分类_映射函数_14

OOB 估计(Out-Of-Bag Estimate)

由于在 bagging 中使用了 bootstrap 获取随机样本,那么便会导致有很多数据未被采样到,这些样本并未被用于获取 R软件随机森林模型代码 r随机森林分类_决策树_15,所以这些样本叫做 R软件随机森林模型代码 r随机森林分类_决策树_15

那么对于一个样本量为 R软件随机森林模型代码 r随机森林分类_R软件随机森林模型代码_11 的数据集,一个样本在 bootstraping 中未被采样的概率是 R软件随机森林模型代码 r随机森林分类_机器学习_18

R软件随机森林模型代码 r随机森林分类_R软件随机森林模型代码_11 相当大时:
R软件随机森林模型代码 r随机森林分类_决策树_20

也就是说 OOB 的样本数量大概为:R软件随机森林模型代码 r随机森林分类_映射函数_21

虽然说 R软件随机森林模型代码 r随机森林分类_决策树_15 的 OOB 可以用于验证 OOB,但是并不常用,这是因为 bagging 这种算法针对的是全部的 R软件随机森林模型代码 r随机森林分类_决策树_15 的融合后的性能,那么这里提出 R软件随机森林模型代码 r随机森林分类_映射函数_24,其数学表达如下:

R软件随机森林模型代码 r随机森林分类_随机森林_25

其中 R软件随机森林模型代码 r随机森林分类_随机森林_26 代表了样本的索引,R软件随机森林模型代码 r随机森林分类_映射函数_27 代表未使用第 R软件随机森林模型代码 r随机森林分类_随机森林_26 个样本的 R软件随机森林模型代码 r随机森林分类_决策树_15 个数, R软件随机森林模型代码 r随机森林分类_R软件随机森林模型代码_30 表示的是这R软件随机森林模型代码 r随机森林分类_随机森林_26

那么OOB误差为:

R软件随机森林模型代码 r随机森林分类_随机森林_32

所以 R软件随机森林模型代码 r随机森林分类_映射函数_33

那么 bagging/RF 的验证流程可以写出:

R软件随机森林模型代码 r随机森林分类_决策树_34

即不需要将数据集 R软件随机森林模型代码 r随机森林分类_决策树_35 分为 R软件随机森林模型代码 r随机森林分类_R软件随机森林模型代码_36R软件随机森林模型代码 r随机森林分类_随机森林_37。不需要在验证后再次训练了。那么该验证方法便可以用于选择特征扩展中的 R软件随机森林模型代码 r随机森林分类_映射函数_13

特征选择

特征选择实际上就是删除冗余特征(redundant features,比如年龄与生日)和不相关特征(irrelevant features,比如保险类型用于预测癌症)。

经过特征选择之后:
R软件随机森林模型代码 r随机森林分类_随机森林_39

这样做的优点:

  • 效率:更简单假设函数和更短预测时间
  • 泛化:消除了特征噪声
  • 可解释性:因为重要才对这些特征进行研究

这样做事物缺点:

  • 计算消耗:特征选择需要很高的时间消耗
  • 过拟合:可能会选择到可能很好,实际上不一定
  • 不可解释:只能解释关联性,但不能解释因果关系

决策树(decision tree)则是一种在构建过程中,同时筛选了特征的过程。

由于特征选择可能存在爆炸性组合,那么通过重要性选择(Feature Selection by Importance)可能可以一定程度上代替特征组合穷举。重要性选择指的是将每个特征进行打分,通过分数的高低选择特征。

也就是说计算

R软件随机森林模型代码 r随机森林分类_映射函数_40

然后根据分数选择 top-R软件随机森林模型代码 r随机森林分类_随机森林_41

线性模型(Linear Model)

因为在线性模型中,输出的分数(不是特征的重要性)是由 R软件随机森林模型代码 r随机森林分类_机器学习_07 维特征线性组合得到的。当特征值 R软件随机森林模型代码 r随机森林分类_随机森林_43

R软件随机森林模型代码 r随机森林分类_机器学习_44

之后使用权重的绝对值作为该特征的评判分数:

R软件随机森林模型代码 r随机森林分类_随机森林_45

但是如果使用非线性模型(数据非线性可分)的情况下,该方法不太适用。

排列测试(Permutation Test)

随机测试指的是如果某个特征很重要,那么如果向特征加入随机噪声,那么一定会降低算法的性能。但是在机器学习的可行性分析中,可以得知,机器学习算法是基于独立同分布这个前提的,也就是说如果在特征 R软件随机森林模型代码 r随机森林分类_R软件随机森林模型代码_46 中加入随机噪声,那么该特征的分布 R软件随机森林模型代码 r随机森林分类_机器学习_47。那么这样操作的话,同时加入了分布的影响,所以比较合理的方法是间原来的第 R软件随机森林模型代码 r随机森林分类_R软件随机森林模型代码_46

那么根据这个思路写出重要性(分数)计算公式如下:

R软件随机森林模型代码 r随机森林分类_R软件随机森林模型代码_49

对于任意的非线性模型,排列测试(Permutation Test)都是一个常用的统计学工具。

由于需要使用验证进行性能测试,所以在随机森林中,则使用 permuted OOB 和 OOB 在验证的同时计算特征的重要性分数。

R软件随机森林模型代码 r随机森林分类_映射函数_50

随机森林通过 permutation + OOB 实现特征选择,这一操作常常是有效且实用的,所以在实践过程中如果遇到 non-linear 的特征选择问题,常常选择随机森林进行初步的特征选择。

举例说明

A Simple Data Set

R软件随机森林模型代码 r随机森林分类_随机森林_51


左侧是第900颗决策树,实用 bootstrap 获取的,其中 R软件随机森林模型代码 r随机森林分类_映射函数_52。右侧是使用900颗决策树的随机森林,可以看出决策树越多,边界越趋于平滑且类似(趋)于大间隔(边界位于正负样本之间)。

A Complicated Data Set

R软件随机森林模型代码 r随机森林分类_映射函数_53


可以看出随着决策树个数增加,更容易处理非线性问题。

A Complicated and Noisy Data Set

R软件随机森林模型代码 r随机森林分类_机器学习_54


可以看出随着树的增加,噪声随着投票可能会得到纠正(noise corrected by voting)。

可以看出理论上来说对于随机森林,决策树越多越好(the more, the ‘better’)。那么需要多少呢,因为不可能无穷多,并且需要考虑时间消耗和模型复杂度导致的过拟合。

因为随机森林很随机,所以如果整个过程都很随机,那么最好多次检测是否树的个数足够多,以保证算法稳定性。(if the whole random process too unstable should double-check stability of G to ensure enough trees)