随机森林算法介绍

翻译维基百科

引言

随机森林或随机决策树是一种用于分类,回归和其他任务的集成学习方法,通过在训练时间内构建多个决策树并输出作为类的标签(分类)或个体树预测的平均值(回归)。随机森林可以修正决策树的归纳偏好而产生的过拟合。
随机森林的第一个算法是由Tin Kam Ho使用随机子空间法提出的,在Ho的方法中,这是一个实现Eugene Kleinberg提出的“stochastic discrimination”分类方法。
Leo Breiman和Adele Cutler扩展了该算法,“随机森林”就是是他们的商标。该扩展结合了Breiman的“bagging”思想和随机特征的选择,由Ho首先引入,后来Amit和Geman也独立提出该思想,用来构建具有可控方差的决策树的集合。

历史

1995年HO首先建立了基于超平面分割的随机森林一般方法,他认为,如果限制随机性只对特征的选择维度敏感,则可以获得高精度而不会过拟合。之后也有类似研究得出结论,对于其他分割方法只要它们被随机地限制对某些特征维度不敏感,也有类似的行为。 请注意,对于更复杂的分类器(较大的森林),模型精度的变化几乎是单调递增的,与普遍认为分类器的复杂性只有在过拟合之前才能一定程度的提高准确性的观点背道而驰。 随机森林方法防止过度拟合的解释可以在Eugene Kleinberg提出的“stochastic discrimination”中找到。
Breiman早期发展的随机森林概念受到Amit和Geman工作的影响,Amit和Geman在生成单棵树的背景下,引入了在分割节点时随机搜索决策子集(译注:特征子集?)的想法。 Ho的随机子空间选择思想对于随机森林的设计也是有影响的。在这种方法中,森林中树生成时,在每棵树和节点拟合之前,将训练数据投影到随机选择的子空间中,用以增加树的多样性。最后,Dietterich首先介绍了随机化优化的思想,也就是说每个节点的决策是通过随机过程选择的,而不是确定性优化。

Leo Breiman的一篇论文中首先引入了随机森林,这篇论文介绍了使用CART类程式构建不相关树森林的方法,并结合了随机节点优化和bagging。另外,文章结合了几个关键点,一些以前已知的和一些新鲜论点,它们构成了随机森林现代实践的基础,尤其是:

  1. 使用包外误差(out-of-bag error)作为泛化误差的估计。
    1. 通过排列来衡量变量的重要性。

该报告还提供了随机森林的第一个理论结果,其形式是对广义误差的约束,这取决于森林中树的强度及其相关性。

算法

初步:决策树学习

决策树是各种机器学习任务的流行方法。 Hastie等人认为,树型学习最符合数据挖掘对现成程序(译注:不加修改就能使用)的要求,因为它在样本特征数值(feature values)的规模(scaling)和各种其他变换下是不变的,对于 包含不相关的特征的鲁棒性很好,并且可以生成可检查模型。 但是,决策书的精度常常较低。

特别是,深度很大的树倾向于学习高度不规则的模式:它们对数据集过拟合,即具有低偏差,但是非常高的方差。 随机森林是平均多个深层决策树的一种方法,在同一训练集的不同部分进行训练,目的是减少方差。这是以偏差小幅增加为代价的, 以及一些可解释性的损失,但通常会大大提升最终模型的性能。

树的bagging

随机森林训练算法将自助采样法(bootstrap sampling)或bagging技术应用于树学习器种。给定训练集X = x1,…,xn,y = y1,…,yn,重复装袋(B次)选择随机样本(译注:有放回随机抽样,抽样有可能重复,其中约36.8%的样本不会被抽中),替换训练集并将树拟合到这些样本中:
对于b = 1,…,B:
样本,替换,B训练样本从X,Y; 称这些Xb,Yb。
在Xb,Yb上训练一个决策回归树fb。

训练后,可以通过对所有回归树的预测进行平均来进行对未知样本x的预测。

f̂ =1Bb=1Bfb(x)

或者在决策分类树的情况下通过多数投票决定分类。
这种自助取样使模型有更好的性能,因为它减少了模型的方差,而不增加偏差。虽然单棵树的预测对训练集中的噪声非常敏感,但只要树木不相关,许多树的平均值就不会如此敏感。简单地训练单个训练集上的许多树将产生强相关树(如果训练算法是确定性的,甚至产生很多相同的树)。自助采样法则通过使用不同的训练集减小树之间的相关性。

B= 是一个自由参数。通常,根据训练集的大小和性质,使用数百到数千棵树。可以使用交叉验证或通过观察包外误差来找到最佳树数B:每个训练样本 xi 的平均预测误差,仅使用其自助采样中不包括 xi 的树。训练和测试误差在拟合一定数量的决策树后,趋向于稳定。

从bagging到随机森林

上述过程描述了原始的树bagging算法。 随机森林在这种一般方法中只有一点不同:随机森林使用修改后的树学习算法,在学习过程中,每个候选分裂处,选择特征的一个随机子集作为特征集。 这个过程有时被称为“特征bagging”。 这样做的原因是普通自助采样样本中的树的相关性:如果一个或几个特征对于响应变量(目标输出)是非常强的预测因子,则这些特征将在许多树中被选择为重要特征,导致树之间相关性很强。HO给出了bagging和随机子空间投影如何有助于在不同条件下的精度增益的分析。

通常,对于 p 个特征的分类问题,在每个分割中使用 p (向下舍入)个特征。对于回归问题,算法发明人建议 p3 (向下舍入)且最小大小为5的作为默认值。

特性

变量重要性

随机森林可用于以自然的方式对变量在回归或分类问题中的重要性进行排序。在Breiman的原始文献中描述了该技术,并在R 的package randomForest中实现。
计算数据集中的变量重要性的第一步是拟合数据集 n={(Xi,Yi)}ni=1 。在拟合过程中,记录每个数据点包外误差在森林中的平均值(如果在训练期间不使用bagging,则使用独立测试集上的误差代替包外误差)。
为了计算训练后 j 特征的重要性,训练后置换训练集中第 j 个特征的值,然后再次计算这个扰动后数据集的包外误差。通过平均所有树上置换前后的包外误差的差异来计算 j 特征的重要性分数。评分通过标准偏差进行归一化。
产生较大分数值的特征比较小的特征更重要。
这种确定变量重要性的方法有一些缺点。对于取值数目不同的分类特征,随机森林偏向于具有更多取值数目的特征(译注:类似ID3决策树使用信息增益作为划分准则)。部分排列和增长无偏见树(growing biasing tree)可以用来解决该问题。如果数据包含输出类似的相关特征组,模型偏好较小的特征组。

与最近邻算法的关系

Lin和Jeon在2002年指出了随机森林与k近邻算法(k-NN)之间的关系。他们证明,两者都可以被解释为所谓的邻近加权策略(weighted neighborhoods schemes)。 这些模型通过观测训练集 {(xi,yi)}ni=1 中,待预测点的”邻居”点给出预测 ŷ  ,由权重函数W给出形式化表达:

ŷ =i=1nW(xi,x)yi

其中, W(xi,xi) 是一个非负权值,代表 xi x 的相关性。对任意 x ,权重 W 的和为1,权重的定义如下:
1. k-NN算法中,如果 xi x 的k近邻,则 W(xi,xi)=1k ,否则为0;
2. 应用在树时,如果 xi x 在同一叶节点中,且节点包含 k 个样本数据,则 W(xi,xi)=1k ,否则为0。
由于森林m棵树的权重系数各不相同,因此预测结果可以表示为:
ŷ =1mj=1mi=1nWj(xi,x)yi=i=1n1mj=1mWj(xi,x)yi

这表明整个森林是一个邻近加权策略,其权重为各个树权重的平均。 这个解释中 x 的邻居是在森林的至少一棵树中与 x 在相同叶节点的 xi 。 以这种方式, x 的邻居复杂地依赖于树的结构,从而依赖于训练集的结构。 Lin和Jeon表明随机森林所使用的领域形状适应每个特征的局部重要性。

变种

有人提出使用线性模型替代决策树作为随机森林中的基本预测器,特别是多项Logistic回归和朴素贝叶斯分类器。

猜你喜欢

转载自blog.csdn.net/wutao1530663/article/details/71250636
今日推荐