随机森林

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机森林相关的知识,希望对你有一定的参考价值。

参考技术A 摘录自别人

随机森林中有一个错误发现率还有一个是树木,,更多的是体现这个工具帮你解决的问题

使用这个工具干了什么,而不是别的

随机森林原理

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个再放回?

注意:

构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。

RandomForest随机森林算法

参考技术A

https://blog.csdn.net/qq_16633405/article/details/61200502
http://blog.itpub.net/12199764/viewspace-1572056/
https://blog.csdn.net/colourful_sky/article/details/82082854

随机森林中随机是核心,通过随机的选择样本、特征,降低了决策树之间的相关性。随机森林中的随机主要有两层意思,一是随机在原始训练数据中有放回的选取等量的数据作为训练样本,二是在建立决策树时,随机的选特征中选取一部分特征建立决策树。这两种随机使得各个决策树之间的相关性小,进一步提高模型的准确性。
随机森林未用到决策树的剪枝,那怎样控制模型的过拟合呢?主要通过控制 树的深度(max_depth),结点停止分裂的最小样本数(min_size)等参数。随机森林还可以处理缺失值。

假设训练集中n个样本,每个样本有d个特征,需要训练一个包含T棵数的随机森林,具体的算法流程如下所示:
1、对于T棵决策树,分别重复如下操作:a、使用Bootstrap抽样,从训练集D获得大小为n的训练集D; b、从d个特征中随机选取m(m
2、如果是回归问题,则最后的输出是 每个树输出的均值;
3、如果是分类问题,则根据投票原则,确定最终的类别。
每棵树的生成都是随机的,至于随机选取的特征数,如何决定随机选取的特征数的大小呢,主要有两种方法,一种是交叉验证,另外一种的经验性设置 m= log_2 d +1。

1、分类间隔:分类间隔是指森林中正确分类样本的决策树的比例减去错误分类的决策树的比例,通过平均每个样本的分类间隔得到随机森林的分类间隔。对于分类间隔,当然是越大越好,大的分类间隔说明模型的分类效果比较稳定,泛化效果好。
2、袋外误差:对于每棵树都有一部分样本而没有被抽取到,这样的样本就被称为袋外样本,随机森林对袋外样本的预测错误率被称为袋外误差(Out-Of-Bag Error,OOB)。计算方式如下所示:
(1)对于每个样本,计算把该样本作为袋外样本的分类情况;
(2)以投票的方式确定该样本的分类结果;
(3)将误分类样本个数占总数的比率作为随机森林的袋外误差。
3、变量重要程度刻画:其实变量重要程度刻画不能算是模型性能评估里面,因为有的实际应用中需要查看这么多的特征中到底那一部分特征是相对重要的特征,这个时候变量的重要程度的刻画就显得尤为重要了。其计算方式主要有一下两种方式:
(1)通过计算特征的平均信息增益大小得出;
(2)通过计算每个特征对模型准确率的影响,通过打乱样本中某一特征的特征值顺序,产生新样本,将新样本放入建立好的随机森林模型计算准确率。相对于不重要的特征,即使打乱了顺序也不会对结果产生很大的影响,对于重要的特征,会对结果产生很大的影响的。

优点
1、对于大部分的数据,它的分类效果比较好。
2、能处理高维特征,不容易产生过拟合,模型训练速度比较快,特别是对于大数据而言。
3、在决定类别时,它可以评估变数的重要性。
4、对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化。
缺点
1、随机森林容易产生过拟合,特别是在数据集相对小或者是低维数据集的时候。
2、 计算速度比单个的决策树慢。
3、 当我们需要推断超出范围的独立变量或非独立变量,随机森林做得并不好。

分类问题

回归问题

常用方法 :参考 https://blog.csdn.net/w952470866/article/details/78987265
predict_proba(x):给出带有概率值的结果。每个点在所有label(类别)的概率和为1。
predict(x):预测X的结果。内部还是调用的predict_proba(),根据概率的结果看哪个类型的预测值最高就是哪个类型。
predict_log_proba(x):和predict_proba基本上一样,只是把结果给做了log()处理。
fit(X, y, sample_weight=None): 从训练数据集(X,y)上建立一个决策树森林。x为训练样本,y为目标值(分类中的类标签,回归中的实数)。
参数
和GBDT对比,GBDT的框架参数比较多,重要的有最大迭代器个数,步长和子采样比例,调参起来比较费力。但是RandomForest则比较简单,这是因为bagging框架里的各个弱学习器之间是没有依赖关系的,这减小的调参的难度。换句话说,达到同样的调参效果,RandomForest调参时间要比GBDT少一些。
Bagging框架参数
n_estimators:最大的弱学习器个数(建立随机森林分类器(树)的个数)。太小容易欠拟合,太大又容易过拟合,一般选择一个适中的数值。增大可以降低整体模型的方差,提升模型的准确度,且不会对子模型的偏差和方差有任何影响。由于降低的是整体模型方差公式的第二项,故准确度的提高有一个上限。在实际应用中,可以在1至200之间取值;
n_jobs:引擎允许使用处理器的数量。 若值为1则只能使用一个处理器, 值为-1则表示没有限制。设置n_jobs可以加快模型计算速度;
oob_score:是否采用袋外误差来评估模型的好坏,默认为 False,推荐设置为True,因为袋外分数反应了一个模型拟合后的泛化能力;
CART决策树参数
max_features: RF划分时考虑的最大特征数。可以使用很多种类型的值,默认是"None",意味着划分时考虑所有的特征数;如果是"log2"意味着划分时最多考虑log2N个特征;如果是"sqrt"或者"auto"意味着划分时最多考虑N−−√N个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数,其中N为样本总特征数。一般来说,如果样本特征数不多,比如小于50,我们用默认的"None"就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。
max_depth: 决策树最大深度。默认为"None",决策树在建立子树的时候不会限制子树的深度这样建树时,会使每一个叶节点只有一个类别,或是达到min_samples_split。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。
min_samples_split: 内部节点再划分所需最小样本数,默认2。这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
min_samples_leaf:叶子节点最少样本数。 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
min_weight_fraction_leaf:叶子节点最小的样本权重和。这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。
max_leaf_nodes: 最大叶子节点数。通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。
min_impurity_split: 节点划分最小不纯度。这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点,即为叶子节点 。一般不推荐改动默认值1e-7。
上面的决策树参数中最重要的包括最大特征数 max_features , 最大深度 max_depth , 内部节点再划分所需最小样本数 min_samples_split 和叶子节点最少样本数 min_samples_leaf
参数调优 :随机森林参数的调优在数据分析和挖掘中也占有一定的地位,学会好的调优方法能够达到事半功倍的效果。调优参考 https://blog.csdn.net/cherdw/article/details/54971771

以上是关于随机森林的主要内容,如果未能解决你的问题,请参考以下文章

随机森林

特征筛选(随机森林)

RandomForest随机森林算法

分类算法 - 随机森林

15、随机森林的OOB

随机森林算法