随机森林的理解

链接:https://www.zhihu.com/question/64043740/answer/672248748
来源:知乎

随机森林

 

 

随机森林是一种灵活的、便于使用的机器学习算法,即使没有超参数调整,大多数情况下也会带来好的结果。它可以用来进行分类和回归任务。通过本文,你将会学习到随机森林算法是如何解决分类和回归问题的。

 

为了理解什么是随机森林算法,首先要熟悉决策树。

 

决策树往往会产生过拟合问题,尤其会发生在存在整组数据的决策树上。有时决策树仿佛变得只会记忆数据了。下面是一些过拟合的决策树的典型例子,既有分类数据,也有连续数据。

 

1. 分类数据:

 

如果一位年龄在15岁到25岁之间的美国男性,他喜欢吃冰激凌,有位德国朋友,厌恶鸟类,2012年8月25日曾吃过薄煎饼——那么他很有可能下载Pokemon Go。

 

2. 连续数据:

 

 

随机森林阻止了这类问题的发生:它是多重决策树的组合,而不只是一棵决策树。随机森林算法下决策树的数量越多,泛化的结果更好。

 

更准确地说,随机森林的工作原理如下:

 

1. 从数据集(表)中随机选择k个特征(列),共m个特征(其中k小于等于m)。然后根据这k个特征建立决策树。

 

2. 重复n次,这k个特性经过不同随机组合建立起来n棵决策树(或者是数据的不同随机样本,称为自助法样本)。

 

3. 对每个决策树都传递随机变量来预测结果。存储所有预测的结果(目标),你就可以从n棵决策树中得到n种结果。

 

4. 计算每个预测目标的得票数再选择模式(最常见的目标变量)。换句话说,将得到高票数的预测目标作为随机森林算法的最终预测。

 

*针对回归问题,随机森林中的决策树会预测Y的值(输出值)。通过随机森林中所有决策树预测值的平均值计算得出最终预测值。而针对分类问题,随机森林中的每棵决策树会预测最新数据属于哪个分类。最终,哪一分类被选择最多,就预测这个最新数据属于哪一分类。

例子:

 

詹姆斯要决定在巴黎的一周要去哪些景点。他拜访了一位曾在巴黎住过一年的朋友,问朋友曾去过哪些景点,是否觉得有趣。基于自己的经验,这位朋友会给詹姆斯一些建议。

 

这是典型的决策树算法方法。詹姆斯的朋友根据自己的经验,告诉詹姆斯可以去哪些景点游览。

 

之后,詹姆斯问了很多在巴黎待过的朋友,询问建议,他们推荐了自己去过的景点。然后詹姆斯选择了被推荐次数最多的景点,这就是典型的随机森林算法。

 

因此,随机森林是一种在共拥有m个特征的决策树中随机选择k个特征组成n棵决策树,再选择预测结果模式(如果是回归问题,选择平均值)。

 

 

优缺点

 

优点:

 

1. 可以用来解决分类和回归问题:随机森林可以同时处理分类和数值特征。

2. 抗过拟合能力:通过平均决策树,降低过拟合的风险性。

3. 只有在半数以上的基分类器出现差错时才会做出错误的预测:随机森林非常稳定,即使数据集中出现了一个新的数据点,整个算法也不会受到过多影响,它只会影响到一颗决策树,很难对所有决策树产生影响。

 

缺点:

 

1. 据观测,如果一些分类/回归问题的训练数据中存在噪音,随机森林中的数据集会出现过拟合的现象。

2. 比决策树算法更复杂,计算成本更高。

3. 由于其本身的复杂性,它们比其他类似的算法需要更多的时间来训练。

 

重要的超参数

 

随机森林中的超参数既可以用来提高模型的预测能力,也可以加快建模的速度。下面介绍了sklearn内置随机森林函数的超参数:

 

1. 提高预测能力

 

· 子模型的数量:在利用最大投票数或平均值来预测之前,你想要建立子树的数量。一般来说,子树的数量越多,越能提高性能,预测的准确性就越稳定,但是也会放缓计算过程。

 

· 节点分裂时参与判断的最大特征数:随机森林允许单个决策树使用特征的最大数量。Sklearn提供了几个选项,如文档中所述。

 

· 叶子节点最小样本数:内部节点再划分所需最小样本数。

 

2. 加快建模速度

 

· 并行数:允许使用处理器的数量。如果输出值为1,只能使用一个处理器。输出值为-1则意味着没有限制。

 

· 随机数生成器:使模型的输出可复制。当模型具有一个确定的随机数,并且给定相同的超参数和相同的训练数据时,模型将始终产生相同的结果。

 

· 是否计算袋外得分:也称作袋外抽样——它是一种随机森林交叉验证方法。在这个样本中,大约三分之一的数据不是用来训练模型,而是用来评估模型的性能。这些样品被称为袋外样品。这一方法与留一法交叉验证非常相似,但几乎没有额外的计算负担。

 

 

Python实现

查看/下载位于Git存储库中的随机森林模板:

https://github.com/the-learning-machine/ML-algorithms-python/blob/master/Classification/random_forests.ipynb

 

资源:

https://www.kdnuggets.com/education/online.html

https://www.kdnuggets.com/software/index.html

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

随机森林(Random Forest)算法原理
集成学习(Ensemble)思想、自助法(bootstrap)与bagging
**集成学习(ensemble)**思想是为了解决单个模型或者某一组参数的模型所固有的缺陷,从而整合起更多的模型,取长补短,避免局限性。随机森林就是集成学习思想下的产物,将许多棵决策树整合成森林,并合起来用来预测最终结果。

首先,介绍自助法(bootstrap),这个奇怪的名字来源于文学作品 The Adventures of Baron Munchausen(吹牛大王历险记),这个作品中的一个角色用提着自己鞋带的方法把自己从湖底下提了上来。因此采用意译的方式,叫做自助法。自助法顾名思义,是这样一种方法:即从样本自身中再生成很多可用的同等规模的新样本,从自己中产生和自己类似的,所以叫做自助,即不借助其他样本数据。自助法的具体含义如下:

如果我们有个大小为N的样本,我们希望从中得到m个大小为N的样本用来训练。那么我们可以这样做:首先,在N个样本里随机抽出一个样本x1,然后记下来,放回去,再抽出一个x2,… ,这样重复N次,即可得到N的新样本,这个新样本里可能有重复的。重复m次,就得到了m个这样的样本。实际上就是一个有放回的随机抽样问题。每一个样本在每一次抽的时候有同样的概率(1/N)被抽中。

这个方法在样本比较小的时候很有用,比如我们的样本很小,但是我们希望留出一部分用来做验证,那如果传统方法做train-validation的分割的话,样本就更小了,bias会更大,这是不希望的。而自助法不会降低训练样本的规模,又能留出验证集(因为训练集有重复的,但是这种重复又是随机的),因此有一定的优势。

至于自助法能留出多少验证,或者说,m个样本的每个新样本里比原来的样本少了多少?可以这样计算:每抽一次,任何一个样本没抽中的概率为 (1-1/N),一共抽了N次,所以任何一个样本没进入新样本的概率为(1-1/N)N。那么从统计意义上来说,就意味着大概有(1-1/N)N这么大比例的样本作为验证集。当N→inf时,这个值大概是1/e,36.8%。以这些为验证集的方式叫做包外估计(out of bag estimate)

bagging的名称来源于 ( Bootstrap AGGregatING ),意思是自助抽样集成,这种方法将训练集分成m个新的训练集,然后在每个新训练集上构建一个模型,各自不相干,最后预测时我们将这个m个模型的结果进行整合,得到最终结果。整合方式就是:分类问题用majority voting,回归用均值。

bagging和boosting是集成学习两大阵营,之后在总结两者的异同。

决策树(Decision Tree)与随机森林(Random Forest)
决策树是用树的结构来构建分类模型,每个节点代表着一个属性,根据这个属性的划分,进入这个节点的儿子节点,直至叶子节点,每个叶子节点都表征着一定的类别,从而达到分类的目的。

常用的决策树有ID4,C4.5,CART等。在生成树的过程中,需要选择用那个特征进行剖分,一般来说,选取的原则是,分开后能尽可能地提升纯度,可以用信息增益,增益率,以及基尼系数等指标来衡量。如果是一棵树的话,为了避免过拟合,还要进行剪枝(prunning),取消那些可能会导致验证集误差上升的节点。

随机森林实际上是一种特殊的bagging方法,它将决策树用作bagging中的模型。首先,用bootstrap方法生成m个训练集,然后,对于每个训练集,构造一颗决策树,在节点找特征进行分裂的时候,并不是对所有特征找到能使得指标(如信息增益)最大的,而是在特征中随机抽取一部分特征,在抽到的特征中间找到最优解,应用于节点,进行分裂。随机森林的方法由于有了bagging,也就是集成的思想在,实际上相当于对于样本和特征都进行了采样(如果把训练数据看成矩阵,就像实际中常见的那样,那么就是一个行和列都进行采样的过程),所以可以避免过拟合。

prediction阶段的方法就是bagging的策略,分类投票,回归均值。

 

reference:

http://www.scholarpedia.org/article/Ensemble_learning

原文链接:https://blog.csdn.net/edogawachia/article/details/79357844

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值