随机森林的介绍

2024-05-17 22:18

1. 随机森林的介绍


随机森林的介绍

2. 随机森林

摘录自别人
  
 随机森林中有一个错误发现率还有一个是树木,,更多的是体现这个工具帮你解决的问题
  
 使用这个工具干了什么,而不是别的
  
 随机森林原理
  
  1、什么是随机森林? 
  
 随机森林就是用随机的方式建立一个森林,在森林里有很多决策树组成,并且每一棵决策树之间是没有关联的。当有一个新样本的时候,我们让森林的每一棵决策树分别进行判断,看看这个样本属于哪一类,然后用投票的方式,哪一类被选择的多,作为最终的分类结果。在回归问题中,随机森林输出所有决策树输出的平均值。
  
 (1)随机森林既可以用于分类,也可以用于回归。
  
 (2)它是一种降维手段,用于处理缺失值和异常值。
  
 (3)它是集成学习的重要方法。
  
  2、两个随机抽取 
  
 (1)样本有放回随机抽取固定数目
  
 (2)构建决策树时,特征随机抽取
  
 解释:两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)
  
  3、随机森林算法是如何工作的? 
  
 在随机森林中,每一个决策树“种植”和“生长”的四个步骤:
  
 (1)假设我们设定训练集中的样本个数为N,然后通过有重置的重复多次抽样获得这N个样本,这样的抽样结果将作为我们生成决策树的训练集;
  
 (2)如果有M个输入变量,每个节点都将随机选择m(m<M)个特定的变量,然后运用这m个变量来确定最佳的分裂点。在决策树的生成过程中,m的值是保持不变的;
  
 (3)每棵决策树都最大可能地进行生长而不进行剪枝;
  
 (4)通过对所有的决策树进行加总来预测新的数据(在分类时采用多数投票,在回归时采用平均)。
  
  4、随机森林的优缺点 
  
 优点:
  
 (1)在分类和回归都表现良好
  
 (2)对高维数据的处理能力强,可以处理成千上万的输入变量,是一个非常不错的降维方法
  
 (3)能够输出特征的重要程度
  
 (4)有效的处理缺省值
  
  5、重要参数 
  
 随机森林分类效果(错误率)与两个因素有关:
  
 (1)森林中任意两棵树的相关性:相关性越大,错误率越大;
  
 (2)森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。
  
 减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数。在学习如何选择参数前首先介绍oob的概念。
  
  6、oob:袋外错误率 
  
 为了选择最优的m,这里需要利用的是袋外错误率oob(out-of-bag error)。我们知道,在构建每个决策树的时候,采用的是随机又放回的抽取,所以对于每棵树来说,都有一些样本实力没有参与树的生成,所以这些样本成为袋外样本,即oob。所以我们需要做一下oob估计:
  
 (1)对每个样本,计算它作为oob样本的树对它的分类情况
  
 (2)多数投票作为该样本的分类结果
  
 (3)用误分个数占样本总数的比率作为随机森林的oob误分率
  
 oob误分率是随机森林泛化误差的一个无偏估计,它的结果近似于需要大量计算的k折交叉验证。所以没有必要对它进行交叉验证或者用一个独立的测试集来获得误差的一个无偏估计。它可以在内部进行评估,也就是说在生成的过程中就可以对误差建立一个无偏估计。
  
 当我们知道了oob的计算方法,我们可以通过选取不同的m,计算oob error,找出oob error最小时对应的m的值。这和交叉验证的思想非常的相似。
  
  7、RF特征重要性的度量方法 
  
 (1)对于每一棵决策树,计算其oob error_0
  
 (2)选取一个特征,随机对特征加入噪声干扰,再次计算oob error_1
  
 (3)特征的重要性=∑(oob error_1-oob error_0)/随机森林中决策树的个数
  
 (4)对随机森林中的特征变量按照特征重要性降序排序。
  
 (5)然后重复以上步骤,直到选出m个特征。
  
 解释:用这个公式来度量特征重要性,原因是:给某个特征随机的加入噪声后,如果oob error增大,说明这个特征对样本分类的结果影响比较大,说明重要程度比较高。
  
  8、RF特征选择 
  
 首先特征选择的目标有两个:
  
 1:找到与分类结果高度相关的特征变量。
  
 2:选择出数目较少的特征变量并且能够充分的预测应变量的结果。
  
 特征选择的步骤:
  
 (1)对于每一棵决策树,计算其oob error
  
 (2)随机的修改OOB中的每个特征xi的值,计算oob error_2,再次计算重要性
  
 (3)按照特征的重要性排序,然后剔除后面不重要的特征
  
 (4)然后重复以上步骤,直到选出m个特征。
  
  9、几个问题 
  
 (1)为什么要随机抽取样本?
  
 答:如果不进行随机抽样,对于每个树的训练集都是相同的,训练出来的结果也是一样的,所以此时进行投票决策没有意义。
  
 (2)为什么要有放回的去抽样呢?
  
 答:如果不是有放回的抽样,那么每一棵树的训练样本是不同的,都是没有交集的,那么每棵树都是有偏的,都是片面的,树与树之间并不是完全公平的。我们需要的是,没颗决策树是公平的,然后让它们投票决策得出结果,并且这样可以防止过度拟合。
  
 (3)这里指的有放回的抽样,是每次抽一个放回,还是一次抽n个再放回?
                                          
 注意:
  
 构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。

3. 随机森林

先上重点 
  
 GBDT和随机森林虽然都是决策树的组合算法,但是两者的训练过程还是很不相同的。 
  
    GBDT训练 是每次一棵,一棵接着一棵(串行),因此与随机森林并行计算多棵树相比起来, 会需要更长的训练时间 。 
  
    在GBDT中 ,相对于随机森林而言(随机森林中的树可以不做很多的剪枝), 一般会选择更浅(depth更小)的树, 这样运算时间会减少。 
  
    随机森林更不容易过拟合 ,而且森林中包含越多的树似乎越不会出现过拟合。用统计学的语言来讲,就是说越多的树包含进来,会降低预测结果的方差(多次预测结果会更加稳定)。但是GBDT则恰好相反,包含预测的树(即迭代的次数越多),反而会更倾向于过拟合,用统计学的语言来将,就是GBDT迭代次数的增加减少的是偏差(预测结果和训练数据label之间的差异)。(偏差和方差这两个概念是不同的概念,见后面的图) 
  
    随机森林参数相对更容易调试一些 ,这是由于随着所包含的决策树的个数增加,其预测效果一般是单调的向好的方向变。 而GBDT则不同,一开始预测表现会随着树的数目增大而变好,但是到一定程度之后,反而会随着树的数目增加而变差。  
  
  
   
  
  随机森林算法 
  
 随机森林是一种有监督学习算法。 就像你所看到的它的名字一样,它创建了一个森林,并使它拥有某种方式随机性。 所构建的“森林”是决策树的集成,大部分时候都是用“bagging”方法训练的。 bagging方法,即bootstrap aggregating,采用的是随机有放回的选择训练数据然后构造分类器,最后组合学习到的模型来增加整体的效果。
  
 简而言之:随机森林建立了多个决策树,并将它们合并在一起以获得更准确和稳定的预测。随机森林的一大优势在于它既可用于分类,也可用于回归问题,这两类问题恰好构成了当前的大多数机器学习系统所需要面对的。
  
 除了少数例外,随机森林分类器使用所有的决策树分类器以及bagging 分类器的超参数来控制整体结构。 与其先构建bagging分类器,并将其传递给决策树分类器,您可以直接使用随机森林分类器类,这样对于决策树而言,更加方便和优化。要注意的是,回归问题同样有一个随机森林回归器与之相对应。
  
 随机森林算法中树的增长会给模型带来额外的随机性。与决策树不同的是,每个节点被分割成最小化误差的最佳特征,在随机森林中我们选择随机选择的特征来构建最佳分割。因此,当您在随机森林中,仅考虑用于分割节点的随机子集,甚至可以通过在每个特征上使用随机阈值来使树更加随机,而不是如正常的决策树一样搜索最佳阈值。这个过程产生了广泛的多样性,通常可以得到更好的模型。
  
  机器学习算法之随机森林算法的特征的重要性 
  
 随机森林算法的另一个优点是可以很容易地测量每个特征对预测的相对重要性。 Sklearn为此提供了一个很好的工具,它通过查看使用该特征减少了森林中所有树多少的不纯度,来衡量特征的重要性。它在训练后自动计算每个特征的得分,并对结果进行标准化,以使所有特征的重要性总和等于1。
  
  决策树与随机森林的区别 
  
 随机森林是决策树的集合,但仍有一些区别。
                                          
 如果您将带有特征和标签的训练数据集输入到决策树中,它将制定一些规则集,用于预测。
  
 例如,如果您想预测某人是否会点击在线广告,可以收集该广告的过去点击人员以及能够描述其做决定的特征。一旦你将这些特征和标签放入决策树中,它会生成节点和一些规则,然后你就可以预测广告是否会被点击。但决策树通常通过计算信息增益和基尼指数来生成节点和规则时,相比之下,随机森林则是随机的。
  
 另一个区别是“深度”决策树往往会遭遇过拟合问题。而随机森林则可以通过创建随机的特征子集并使用这些子集构建较小的树,随后组成子树,这种方法可以防止大部分情况的过拟合。要注意的是,这同时会使得计算速度变慢,并取决于随机森林构建的树数。
  
  机器学习算法之随机森林算法重要的超参数 
  
 随机森林中的参数要么用来增强模型的预测能力,要么使模型更快。 以下将讨论sklearns内置的随机森林函数中的超参数。
  
  提高模型预测准确性 
  
 首先,“n_estimators”超参数表示算法在进行最大投票或采取预测平均值之前建立的树数。 一般来说,树的数量越多,性能越好,预测也越稳定,但这也会减慢计算速度。
  
 另一个重要的超参数是“max_features”,它表示随机森林在单个树中可拥有的特征最大数量。 Sklearn提供了几个选项,在他们的文档中有描述:
  
 http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
  
 最后一个重要的超参数是“min_sample_leaf”,正如其名称所述,这决定了叶子的数量。
  
  加快模型计算速度 
  
 “n_jobs”超参数表示引擎允许使用处理器的数量。 若值为1,则只能使用一个处理器。 值为-1则表示没有限制。
  
 “random_state”,表示随机数种子,保证模型的输出具有可复制性。 当它被赋于一个指定值,且模型训练具有相同的参数和相同的训练数据时,该模型将始终产生相同的结果。
  
 最后,还有一个“oob_score”(也称为oob采样), 它是一种随机森林交叉验证方法。  在这个抽样中,大约三分之一的数据不用于模型训练,而用来评估模型的性能。这些样本被称为袋外样本。它与留一法交叉验证方法非常相似,但几乎没有附加的计算负担。
  
  优缺点分析 
  
 就像我之前提到的那样,随机森林的一个优点是它可以用于回归和分类任务,并且很容易查看模型的输入特征的相对重要性 。
   
  
 随机森林同时也被认为是一种非常方便且易于使用的算法,因为它是默认的超参数通常会产生一个很好的预测结果。超参数的数量也不是那么多,而且它们所代表的含义直观易懂。
  
 机器学习中的一个重大问题是过拟合,但大多数情况下这对于随机森林分类器而言不会那么容易出现。因为只要森林中有足够多的树,分类器就不会过度拟合模型。
  
 随机森林的主要限制在于使用大量的树会使算法变得很慢,并且无法做到实时预测。一般而言,这些算法训练速度很快,预测十分缓慢。越准确的预测需要越多的树,这将导致模型越慢。在大多数现实世界的应用中,随机森林算法已经足够快,但肯定会遇到实时性要求很高的情况,那就只能首选其他方法。
  
 当然,随机森林是一种预测性建模工具,而不是一种描述性工具。也就是说,如果您正在寻找关于数据中关系的描述,那建议首选其他方法。
  
  适用范围 
  
 随机森林算法可被用于很多不同的领域,如银行,股票市场,医药和电子商务。 在银行领域,它通常被用来检测那些比普通人更高频率使用银行服务的客户,并及时偿还他们的债务。 同时,它也会被用来检测那些想诈骗银行的客户。 在金融领域,它可用于预测未来股票的趋势。 在医疗保健领域,它可用于识别药品成分的正确组合,分析患者的病史以识别疾病。 除此之外,在电子商务领域中,随机森林可以被用来确定客户是否真的喜欢某个产品。

随机森林

4. 随机森林

随机森林是一种集成算法(Ensemble Learning),它属于Bagging类型,通过组合多个弱分类器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能。其可以取得不错成绩,主要归功于 "随机"和“森林” ,一个使它具有抗过拟合能力,一个使它更加精准。
                                          
  Bagging 是一种在原始数据集上通过有放回抽样重新选出k个新数据集来训练分类器的集成技术。它使用训练出来的分类器的集合来对新样本进行分类,然后用多数投票或者对输出求均值的方法统计所有分类器的分类结果,结果最高的类别即为最终标签。此类算法可以有效降低bias,并能够降低variance。
  
 【 自助法 】它通过自助法(bootstrap)重采样技术,从训练集里面采集固定个数的样本,但是每采集一个样本后,都将样本放回。也就是说,之前采集到的样本在放回后有可能继续被采集到。
  
  【OOB】 在Bagging的每轮随机采样中,训练集中大约有36.5%的数据没有被采样集采集中。 对于这部分没有采集到的数据,我们常常称之为袋外数据(Out of Bag, 简称OOB) 。这些数据没有参与训练集模型的拟合,因此可以用来检测模型的泛化能力。
  
  【随机性】 对于我们的Bagging算法,一般会对样本使用boostrap进行随机采集,每棵树采集相同的样本数量,一般小于原始样本量。这样得到的采样集每次的内容都不同 ,通过这样的自助法生成K个分类树组成随机森林,做到样本随机性 。
  
  【输出】 Bagging的集合策略也比较简单,对于分类问题,通常使用简单投票法,得到最多票数的类别或者类别之一为最终的模型输出。对于回归问题,通常使用简单平均法,对T个弱学习器得到的回归结果进行算术平均得到的最终的模型输出。
  
  【弱分类器】 首先,RF使用了CART决策树作为弱学习器。换句话说,其实我们只是将实验CART决策树作为弱学习器的Bagging方法称为随机森林。
  
  【随机性】 同时,在生成每棵树的时候, 每个树选取的特征都不仅仅是随机选出的少数特征,一般默认取特征总数m的开方。 而一般的CART树则会选取全部的特征进行建模。因此 ,不但特征是随机的,也保证了特征随机性 。
  
  【样本量】 相对于一般的Bagging算法,RF会选择采集和训练集样本数N一样个数的样本。、
  
  【特点】 由于随机性,对于降低模型的方差很有作用,故随机森林一般不需要额外剪枝,即可以取得较好的泛化能力和抗拟合能力(Low Variance)。当然对于训练集的拟合程度就会差一点,也就是模型的偏倚会大一些(High Bias),仅仅是相对的。
  
  在关于随机森林的原始论文中,显示随机森林错误率取决于两件事: 
  
         森林中任何两棵树之间的相关性。增加相关性会增加森林错误率。
   
  
         森林中每棵树的力量(具有低错误率的树是强分类器)。增加单棵数据的强度(分类更精确)会降低森林错误率。 
  
     随机森林的弱分类器使用的是CART树,CART决策树又称为分类回归树。当数据集的因变量为连续型数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算算法就是一个分类树,可以很好地解决分类问题。但是需要注意的是,该算法是一个二叉树,即每一个叶节点只能引申出两个分支,所以当某个非叶节点是多水平(2个以上)的离散变量时,该变量就有可能被多次使用。同时,若某个非叶节点是连续变量时,决策树也将把他当做离散变量来处理(即在有限的可能值中做划分)。
  
     特征选择目前比较流行的方法是信息增益、增益率、基尼系数和卡方检验。这里主要介绍基于基尼系数(Gini)的特征选择,因为随机森林采用的CART决策树就是基于基尼系数选择特征的。
  
     基尼系数的选择的标准就是每个子节点达到最高的纯度,即落在子节点中的所有观察都属于同一分类,此时基尼系数最小,纯度最高,不确定度最小。对于一般的决策树,加入总共有K类,样本属于第K类的概率:pk,则该概率分布的基尼指数为:
                                          
 基尼指数越大,说明不确定性就越大;基尼系数越小,不确定性越小,数据分割越彻底,越干净。
  
 对于CART树而言,由于是二叉树,可以通过下面的表示:
                                          
 在我们遍历每个特征的每个分割点时,当使用特征A=a,将D划分为两部分,即D1(满足A=a的样本集合),D2(不满足A=a的样本集合)。则在特征A=a的条件下D的基尼指数为:
                                          
 Gini(D):表示集合D的不确定性。
  
 Gini(A,D):表示经过A=a分割后的集合D的不确定性。
  
 随机森林中的每棵CART决策树都是通过不断遍历这棵树的特征子集的所有可能的分割点,寻找Gini系数最小的特征的分割点,将数据集分成两个子集,直至满足停止条件为止。
  
     首先,正如Bagging介绍中提到的,每个树选择使用的特征时,都是从全部m个特征值随机产生的,本身就已经降低了过拟合的风险和趋势。模型不会被特定的特征值或特征组合所决定,随机性的增加,将控制模型的拟合能力不会无限提高。
  
     第二,与决策树不同,RF对决策树的简历做了改进。对于普通的决策树,我们会在节点上所有的m个样本特征中选择一个最优的特征来做决策树的左右子树划分。但是RF的每个树,其实选用的特征是一部分,在这些少量特征中,选择一个最优的特征来做决策树的左右子树划分,将随机性的效果扩大,进一步增强了模型的泛化能力。
  
     假设每棵树选取msub个特征,msub越小,此时模型对于训练集的拟合程度会变差,偏倚增加,但是会泛化能力更强,模型方差减小。msub越大则相反。在实际使用中,一般会将msub的取值作为一个参数,通过开启OOB验证或使用交叉验证,不断调整参数以获取一个合适的msub的值。
  
  优点: 
  
     (1)由于采用了集成算法,本身精度比大多数单个算法要好。
  
     (2)在测试集上表现良好,由于两个随机性的引入,使得随机森林不容易陷入过拟合( 样本随机,特征随机 )
  
     (3)在工业上,由于两个随机性的引入,使得随机森林具有一定的抗噪声能力,对比其他算法具有一定优势。
  
     (4)由于树的组合,使得随机森林可以处理非线性数据,本身属于非线性分类(拟合)模型。
  
     (5) 它能够处理很高维度(feature很多)的数据 ,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化。
  
     (6)训练速度快,可以运用在大规模数据集上。
  
     (7)由于袋外数据(OOB),可以在模型生成过程中取得真实误差的无偏估计,且不损失训练数据量。
  
     (8)在训练过程中,能够检测到feature间的互相影响, 且可以得出feature的重要性 ,具有一定参考意义。
  
     (9)由于每棵树可以独立、同时生成,容易做成并行化方法。
  
     (10)由于实现简单、 精度高、抗过拟合能力强 ,当面对非线性数据时,适于作为基准模型。
  
  缺点: 
  
     (1)随机森林在解决回归问题时,并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够作出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过拟合。(PS:随机森林已经被证明在某些噪音较大的分类或者回归问题上会过拟合)
  
 (2)对于许多统计建模者来说,随机森林给人感觉就像一个黑盒子,你无法控制模型内部的运行。只能在不同的参数和随机种子之间进行尝试。
  
 (3)可能有很多相似的决策树,掩盖了真实的结果。
  
 (4)对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。( 处理高维数据,处理特征遗失数据,处理不平衡数据是随机森林的长处 )。
  
 (5)执行数据虽然比boosting等快,但是比单棵决策树慢多了。
  
 (1) 不要求是线性特征,比如逻辑回归很难处理类别型特征 ,而树模型,是一些决策树的集合,可以很容易的处理这些情况。
  
 (2) 由于算法构建的过程,这些算法很容易处理高维的数据,大量的训练数据的场景 。
                                          
 极端随机树是随机森林的一个变种,原理几乎和RF一模一样,仅有区别有:
  
 (1)对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集。
  
 (2)在选定了划分特征后,RF的决策树会基于基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是极端随机树比较的激进,他会随机的选择一个特征值来划分决策树。

5. 什么是随机森林

 Bagging是 bootstrap aggregating 。思想就是从总体样本当中 随机取一部分样本进行训练,通过多次这样的结果,进行投票获取平均值作为结果输出 ,这就极大可能的 避免了不好的样本数据,从而提高准确度 。因为有些是不好的样本,相当于噪声,模型学入噪声后会使准确度不高。Bagging降低 Variance ,因此采用的都是强学习器。
    举个例子 :
   假设有1000个样本,如果按照以前的思维,是直接把这1000个样本拿来训练,但现在不一样,先抽取800个样本来进行训练,假如噪声点是这800个样本以外的样本点,就很有效的避开了。重复以上操作,提高模型输出的平均值。
   Random Forest(随机森林)是 一种基于树模型的Bagging的优化版本 ,一棵树的生成肯定还是不如多棵树,因此就有了随机森林,解决 决策树泛化能力弱的 特点。(可以理解成三个臭皮匠顶过诸葛亮)
   而同一批数据,用同样的算法只能产生一棵树,这时Bagging策略可以 帮助我们产生不同的数据集 。 Bagging 策略来源于bootstrap aggregation:从样本集(假设样本集N个数据点)中重采样选出Nb个样本(有放回的采样,样本数据点个数仍然不变为N),在所有样本上,对这n个样本建立分类器(ID3\C4.5\CART\SVM\LOGISTIC), 重复以上两步m次,获得m个分类器 ,最后根据这m个分类器的投票结果,决定数据属于哪一类。
    每棵树的按照如下规则生成: 
   一开始我们提到的随机森林中的“随机”就是指的这里的两个随机性。两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林 不容易陷入过拟合,并且具有很好得抗噪能力 (比如:对缺省值不敏感)。
   总的来说就是随机选择样本数,随机选取特征,随机选择分类器,建立多颗这样的决策树,然后通过这几课决策树来投票,决定数据属于哪一类( 投票机制有一票否决制、少数服从多数、加权多数 )
   减小 特征选择个数m,树的相关性和分类能力也会相应的降低 ;增大m,两者也会随之增大。所以关键问题是 如何选择最优的m (或者是范围),这也是随机森林唯一的一个参数。
    优点: 
    缺点: 
   根据随机森林创建和训练的特点,随机森林对缺失值的处理还是比较特殊的。
   其实,该缺失值填补过程类似于推荐系统中采用协同过滤进行评分预测,先计算缺失特征与其他特征的相似度,再加权得到缺失值的估计,而随机森林中计算相似度的方法(数据在决策树中一步一步分类的路径)乃其独特之处。
    OOB :
   上面我们提到,构建随机森林的关键问题就是 如何选择最优的m ,要解决这个问题主要依据计算 袋外错误率oob error(out-of-bag error) 。
   bagging方法中Bootstrap每次约有 1/3的样本不会出现在Bootstrap所采集的样本集合中 ,当然也就没有参加决策树的建立,把这1/3的数据称为 袋外数据oob(out of bag) ,它可以用于 取代测试集误差估计方法 。
    袋外数据(oob)误差的计算方法如下: 
    优缺点 :
   这已经经过证明是 无偏估计的 ,所以在随机森林算法中 不需要再进行交叉验证或者单独的测试集来获取测试集误差 的无偏估计。

什么是随机森林

6. 随机森林原理

  1、什么是随机森林?    随机森林就是用随机的方式建立一个森林,在森林里有很多决策树组成,并且每一棵决策树之间是没有关联的。当有一个新样本的时候,我们让森林的每一棵决策树分别进行判断,看看这个样本属于哪一类,然后用投票的方式,哪一类被选择的多,作为最终的分类结果。在回归问题中,随机森林输出所有决策树输出的平均值。
   (1)随机森林既可以用于分类,也可以用于回归。   (2)它是一种降维手段,用于处理缺失值和异常值。   (3)它是集成学习的重要方法。
    2、两个随机抽取    (1)样本有放回随机抽取固定数目   (2)构建决策树时,特征随机抽取   解释:两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)
    3、随机森林算法是如何工作的? 
   在随机森林中,每一个决策树“种植”和“生长”的四个步骤:
   (1)假设我们设定训练集中的样本个数为N,然后通过有重置的重复多次抽样获得这N个样本,这样的抽样结果将作为我们生成决策树的训练集;
   (2)如果有M个输入变量,每个节点都将随机选择m(m<M)个特定的变量,然后运用这m个变量来确定最佳的分裂点。在决策树的生成过程中,m的值是保持不变的;
   (3)每棵决策树都最大可能地进行生长而不进行剪枝;
   (4)通过对所有的决策树进行加总来预测新的数据(在分类时采用多数投票,在回归时采用平均)。
    4、随机森林的优缺点    优点:   (1)在分类和回归都表现良好   (2)对高维数据的处理能力强,可以处理成千上万的输入变量,是一个非常不错的降维方法   (3)能够输出特征的重要程度   (4)有效的处理缺省值
    5、重要参数    随机森林分类效果(错误率)与两个因素有关:   (1)森林中任意两棵树的相关性:相关性越大,错误率越大;   (2)森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。     减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数。在学习如何选择参数前首先介绍oob的概念。
    6、oob:袋外错误率    为了选择最优的m,这里需要利用的是袋外错误率oob(out-of-bag error)。我们知道,在构建每个决策树的时候,采用的是随机又放回的抽取,所以对于每棵树来说,都有一些样本实力没有参与树的生成,所以这些样本成为袋外样本,即oob。所以我们需要做一下oob估计:   (1)对每个样本,计算它作为oob样本的树对它的分类情况   (2)多数投票作为该样本的分类结果   (3)用误分个数占样本总数的比率作为随机森林的oob误分率
   oob误分率是随机森林泛化误差的一个无偏估计,它的结果近似于需要大量计算的k折交叉验证。所以没有必要对它进行交叉验证或者用一个独立的测试集来获得误差的一个无偏估计。它可以在内部进行评估,也就是说在生成的过程中就可以对误差建立一个无偏估计。
   当我们知道了oob的计算方法,我们可以通过选取不同的m,计算oob error,找出oob error最小时对应的m的值。这和交叉验证的思想非常的相似。
    7、RF特征重要性的度量方法    (1)对于每一棵决策树,计算其oob error_0   (2)选取一个特征,随机对特征加入噪声干扰,再次计算oob error_1   (3)特征的重要性=∑(oob error_1-oob error_0)/随机森林中决策树的个数
   (4)对随机森林中的特征变量按照特征重要性降序排序。   (5)然后重复以上步骤,直到选出m个特征。
   解释:用这个公式来度量特征重要性,原因是:给某个特征随机的加入噪声后,如果oob error增大,说明这个特征对样本分类的结果影响比较大,说明重要程度比较高。
    8、RF特征选择    首先特征选择的目标有两个:   1:找到与分类结果高度相关的特征变量。   2:选择出数目较少的特征变量并且能够充分的预测应变量的结果。
   特征选择的步骤:   (1)对于每一棵决策树,计算其oob error   (2)随机的修改OOB中的每个特征xi的值,计算oob error_2,再次计算重要性   (3)按照特征的重要性排序,然后剔除后面不重要的特征   (4)然后重复以上步骤,直到选出m个特征。
    9、几个问题    (1)为什么要随机抽取样本?   答:如果不进行随机抽样,对于每个树的训练集都是相同的,训练出来的结果也是一样的,所以此时进行投票决策没有意义。
   (2)为什么要有放回的去抽样呢?   答:如果不是有放回的抽样,那么每一棵树的训练样本是不同的,都是没有交集的,那么每棵树都是有偏的,都是片面的,树与树之间并不是完全公平的。我们需要的是,没颗决策树是公平的,然后让它们投票决策得出结果,并且这样可以防止过度拟合。
   (3)这里指的有放回的抽样,是每次抽一个放回,还是一次抽n个再放回?
                                           注意:   构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。
   参考资源:    http://www.cnblogs.com/emanlee/p/4851555.html     http://www.cnblogs.com/maybe2030/p/4585705.html     http://scientistcafe.com/2016/11/18/Tree4.html     http://www.cnblogs.com/justcxtoworld/p/3447231.html     https://zhuanlan.zhihu.com/p/21358126 

7. 随机森林原理介绍与适用情况(综述篇)

 随机森林是一种集成算法(Ensemble Learning),它属于Bagging类型,通过组合多个弱分类器,最终结果通过投票或取均值,使得整体模型的结果具有较高的精确度和泛化性能。其可以取得不错成绩,主要归功于“ 随机 ”和“ 森林 ”,一个使它具有抗过拟合能力,一个使它更加精准。   
                                           
   Bagging也叫自举汇聚法(bootstrap aggregating),是一种在原始数据集上通过有放回抽样重新选出k个新数据集来训练分类器的集成技术。它使用训练出来的分类器的集合来对新样本进行分类,然后用多数投票或者对输出求均值的方法统计所有分类器的分类结果,结果最高的类别即为最终标签。此类算法可以有效降低bias,并能够降低variance。
   随机森林(Random Forest,RF)是Bagging算法的一种,其实在介绍完Bagging算法之后,随机森林几乎是呼之欲出的,RF相对于Bagging只是对其中一些细节做了自己的规定和设计。
   随机森林的弱分类器使用的是CART数,CART决策树又称分类回归树。当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很好的解决分类问题。   但需要注意的是,该算法是一个 二叉树 ,即每一个非叶节点只能引伸出两个分支,所以当某个非叶节点是多水平(2个以上)的离散变量时,该变量就有可能被多次使用。同时,若某个非叶节点是连续变量时,决策树也将把他当做离散变量来处理(即在有限的可能值中做划分)
   特征选择目前比较流行的方法是信息增益、增益率、基尼系数和卡方检验。这里主要介绍基于基尼系数(GINI)的特征选择,因为随机森林采用的CART决策树就是基于基尼系数选择特征的。   基尼系数的选择的标准就是每个子节点达到最高的纯度,即落在子节点中的所有观察都属于同一个分类,此时基尼系数最小,纯度最高,不确定度最小。   对于一般的决策树,假如总共有K类,样本属于第k类的概率为:pk,则该概率分布的基尼指数为:
                                           基尼指数越大,说明不确定性就越大;基尼系数越小,不确定性越小,数据分割越彻底,越干净。   对于CART树而言,由于是二叉树,可以通过下面的表示:
                                           在我们遍历每个特征的每个分割点时,当使用特征A=a,将D划分为两部分,即D1(满足A=a的样本集合),D2(不满足A=a的样本集合)。则在特征A=a的条件下D的基尼指数为:
                                           Gini(D):表示集合D的不确定性。   Gini(A,D):表示经过A=a分割后的集合D的不确定性。   随机森林中的每棵CART决策树都是通过不断遍历这棵树的特征子集的所有可能的分割点,寻找Gini系数最小的特征的分割点,将数据集分成两个子集,直至满足停止条件为止。
   首先,正如Bagging介绍中提到的,每个树选取使用的特征时,都是从全部m个特征中随机产生的,本身已经降低了过拟合的风险和趋势。模型不会被特定的特征值或者特征组合所决定,随机性的增加,将控制模型的拟合能力不会无限提高。   第二,与决策树不同,RF对决策树的建立做了改进。对于普通的决策树,我们会在节点上所有的m个样本特征中选择一个最优的特征来做决策树的左右子树划分。但是RF的每个树,其实选用的特征是一部分,在这些少量特征中,选择一个最优的特征来做决策树的左右子树划分,将随机性的效果扩大,进一步增强了模型的泛化能力。   假设每棵树选取msub个特征,msub越小,此时模型对于训练集的拟合程度会变差,偏倚增加,但是会泛化能力更强,模型方差减小。msub越大则相反。在实际使用中,一般会将msub的取值作为一个参数,通过开启oob验证或使用交叉验证,不断调整参数以获取一个合适的msub的值。

随机森林原理介绍与适用情况(综述篇)

8. 随机森林算法简介

随机森林是一种包含多个决策树的分类器。随机森林的算法是由Leo Breiman和Adele Cutler发展推论出的。随机森林,顾名思义就是用随机的方式建立一个森林,森林里面由很多的决策树组成,而这些决策树之间没有关联。
  
 随机森林就是用过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支------集成学习(Ensemble Learning)方法。集成学习就是使用一系列学习器进行学习,并将各个学习方法通过某种特定的规则进行整合,以获得比单个学习器更好的学习效果。集成学习通过建立几个模型,并将它们组合起来来解决单一预测问题。它的工作原理主要是生成多个分类器或者模型,各自独立地学习和作出预测。
  
 随机森林是由多棵决策树构成的。对于每棵树,他们使用的训练集是采用放回的方式从总的训练集中采样出来的。而在训练每棵树的结点时,使用的特征是从所有特征中采用按照一定比例随机地无放回的方式抽取的。
  
 随机森林的建立基本由随机采样和完全分裂两部分组成。
  
 随机森林对输入的数据进行行、列的采样,但两种采样的方法有所不同。对于行采样,采用的方式是有放回的的采样,即在采样得到的样本集合中,可能会有重复的样本。假设输入样本为N个,那么采样的样本也为N个。这使得在训练时,每棵树的输入样本都不是全部的样本,所以相对不容易出现过拟合。对于列采样,采用的方式是按照一定的比例无放回的抽样,从M个特征中,选择m个样本(m<M);
  
 在形成决策树的过程中,决策树的每个节点都要按完全分裂的方式来分裂,直到结点不能再分裂。采用这种方式建立出的决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本都是指向同一个分类器。
最新文章
热门文章
推荐阅读