随机森林算法是什么?

2024-05-20 10:33

1. 随机森林算法是什么?


随机森林算法是什么?

2. 分类算法 - 随机森林

 上次我写了决策树算法,决策树可以解决分类问题,也有CART算法可以解决回归问题,而随机森林也和决策树非常类似,采用了CART算法来生成决策树,因此既可以解决分类问题,也可以解决回归问题。从名字中可以看出,随机森林是用随机的方式构建的一个森林,而这个森林是由很多的相互不关联的决策树组成。实时上随机森林从本质上属于机器学习的一个很重要的分支叫做集成学习。集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。   所以理论上,随机森林的表现一般要优于单一的决策树,因为随机森林的结果是通过多个决策树结果投票来决定最后的结果。简单来说,随机森林中每个决策树都有一个自己的结果,随机森林通过统计每个决策树的结果,选择投票数最多的结果作为其最终结果。我觉得中国一句谚语很形象的表达了随机森林的运作模式,就是“三个臭皮匠,顶个诸葛亮”。
                                           我有一批100条的数据,通过颜色、长度、甜度、生长地方和水果类别,那么我要预测在某种颜色、长度、甜度和生长地方的水果究竟是什么水果,随机森林要怎么做呢?
   这里的抽样是指的在这批水果中,有放回地抽样,比如我要生成3个决策树来预测水果种类,那么每棵树要抽样50条数据来生成,每棵树抽取数据后数据要放回,下一棵树抽取数据仍然要从100条数据里面抽取。这种方法就叫做 bootstrap重采样技术 。
   每棵树利用抽取的样本生成一棵树,值得注意的是,由于采用的是CART算法,因此生成的是二叉树,并且可以处理连续性数据。如果每个样本的特征维度为M,像以上提到的数据,样本特征维度5,指定一个常数m<<M,随机地从5个特征中选取m个特征子集 (这一点非常重要,这也是随机森林的随机这个名字的来源,因此这样才能保证生成的决策树不同) ,每次树进行分裂时,从这m个特征中选择最优的,并且每棵决策树都最大可能地进行生长而不进行剪枝。   此时,一颗茂盛的决策树就生成了。
   根据3颗决策树的结果,如果是连续型的数据最终需要求均值获得结果,如果是分类型的数据最后求众数获得结果。
   1)正如上文所述,随机森林算法能解决分类与回归两种类型的问题,并在这两个方面都有相当好的估计表现
   2)随机森林对于高维数据集的处理能力令人兴奋,它可以处理成千上万的输入变量,并确定最重要的变量,因此被认为是一个不错的降维方法。此外,该模型能够输出变量的重要性程度,这是一个非常便利的功能
   3)在对缺失数据进行估计时,随机森林是一个十分有效的方法。就算存在大量的数据缺失,随机森林也能较好地保持精确性
   4)当存在分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法
   5)模型的上述性能可以被扩展运用到未标记的数据集中,用于引导无监督聚类、数据透视和异常检测
   6)随机森林算法中包含了对输入数据的重复自抽样过程,即所谓的bootstrap抽样。这样一来,数据集中大约三分之一将没有用于模型的训练而是用于测试,这样的数据被称为out of bag samples,通过这些样本估计的误差被称为out of bag error。研究表明,这种out of bag方法的与测试集规模同训练集一致的估计方法有着相同的精确程度,因此在随机森林中我们无需再对测试集进行另外的设置。
   1)随机森林在解决回归问题时并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续型的输出。当进行回归时,随机森林不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合。
   2)对于许多统计建模者来说,随机森林给人的感觉像是一个黑盒子——你几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。

3. 随机森林算法是什么?

随机森林算法是以决策树为基学习器构建bagging的基础上,进一步在决策树的训练过程中引入随机属性的算法。
在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。 
而 "Random Forests" 是他们的商标。 这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合 Breimans 的 "Bootstrap aggregating" 想法和 Ho 的"random subspace method"以建造决策树的集合。

随机森林算法之根据下列算法而建造每棵树:
用N来表示训练用例(样本)的个数,M表示特征数目。
输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M。
从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。
对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这m个特征,计算其最佳的分裂方式。
每棵树都会完整成长而不会剪枝,这有可能在建完一棵正常树状分类器后会被采用)。

随机森林算法是什么?

4. 分类变量可以做随机森林嘛

不能,太难了。




在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。 而 "Random Forests" 是他们的商标。
这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合 Breimans 的 "Bootstrap aggregating" 想法和 Ho 的"random subspace method"" 以建造决策树的集合。
随机森林的优点有:
1. 对于很多种资料,它可以产生高准确度的分类器。
2. 它可以处理大量的输入变量。
3. 它可以在决定类别时,评估变量的重要性。
4. 在建造森林时,它可以在内部对于一般化后的误差产生不偏差的估计。
5. 它包含一个好方法可以估计遗失的资料,并且,如果有很大一部分的资料遗失,仍可以维持准确度。
6. 它提供一个实验方法,可以去侦测 variable interactions。
7. 对于不平衡的分类资料集来说,它可以平衡误差。
8. 它计算各例中的亲近度,对于数据挖掘、侦测偏离者(outlier)和将资料视觉化非常有用。
9. 使用上述。它可被延伸应用在未标记的资料上,这类资料通常是使用非监督式聚类。也可侦测偏离者和观看资料。
10. 学习过程是很快速的。

5. 随机森林算法是什么?

随机森林是一种比较新的机器学习模型。
经典的机器学习模型是神经网络,有半个多世纪的历史了。神经网络预测精确,但是计算量很大。上世纪八十年代Breiman等人发明分类树的算法(Breiman et al. 1984),通过反复二分数据进行分类或回归,计算量大大降低。
2001年Breiman把分类树组合成随机森林(Breiman 2001a),即在变量(列)的使用和数据(行)的使用上进行随机化,生成很多分类树,再汇总分类树的结果。随机森林在运算量没有显著提高的前提下提高了预测精度。
随机森林对多元共线性不敏感,结果对缺失数据和非平衡的数据比较稳健,可以很好地预测多达几千个解释变量的作用(Breiman 2001b),被誉为当前最好的算法之一(Iverson et al. 2008)。

随机森林优点:
随机森林是一个最近比较火的算法,它有很多的优点:
a、在数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合。
b、在当前的很多数据集上,相对其他算法有着很大的优势,两个随机性的引入,使得随机森林具有很好的抗噪声能力。
c、它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化。

随机森林算法是什么?

6. 随机森林的介绍


7. 随机森林

摘录自别人
  
 随机森林中有一个错误发现率还有一个是树木,,更多的是体现这个工具帮你解决的问题
  
 使用这个工具干了什么,而不是别的
  
 随机森林原理
  
  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个再放回?
                                          
 注意:
  
 构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。

随机森林

8. 随机森林

先上重点 
  
 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采样), 它是一种随机森林交叉验证方法。  在这个抽样中,大约三分之一的数据不用于模型训练,而用来评估模型的性能。这些样本被称为袋外样本。它与留一法交叉验证方法非常相似,但几乎没有附加的计算负担。
  
  优缺点分析 
  
 就像我之前提到的那样,随机森林的一个优点是它可以用于回归和分类任务,并且很容易查看模型的输入特征的相对重要性 。
   
  
 随机森林同时也被认为是一种非常方便且易于使用的算法,因为它是默认的超参数通常会产生一个很好的预测结果。超参数的数量也不是那么多,而且它们所代表的含义直观易懂。
  
 机器学习中的一个重大问题是过拟合,但大多数情况下这对于随机森林分类器而言不会那么容易出现。因为只要森林中有足够多的树,分类器就不会过度拟合模型。
  
 随机森林的主要限制在于使用大量的树会使算法变得很慢,并且无法做到实时预测。一般而言,这些算法训练速度很快,预测十分缓慢。越准确的预测需要越多的树,这将导致模型越慢。在大多数现实世界的应用中,随机森林算法已经足够快,但肯定会遇到实时性要求很高的情况,那就只能首选其他方法。
  
 当然,随机森林是一种预测性建模工具,而不是一种描述性工具。也就是说,如果您正在寻找关于数据中关系的描述,那建议首选其他方法。
  
  适用范围 
  
 随机森林算法可被用于很多不同的领域,如银行,股票市场,医药和电子商务。 在银行领域,它通常被用来检测那些比普通人更高频率使用银行服务的客户,并及时偿还他们的债务。 同时,它也会被用来检测那些想诈骗银行的客户。 在金融领域,它可用于预测未来股票的趋势。 在医疗保健领域,它可用于识别药品成分的正确组合,分析患者的病史以识别疾病。 除此之外,在电子商务领域中,随机森林可以被用来确定客户是否真的喜欢某个产品。