随机森林算法小结

目录:

  1. 集成学习概念
  2. 个体学习器概念
  3. boosting bagging
  4. 结合策略(平均法,投票法,学习法)
  5. 随机森林思想
  6. 随机森林的推广
  7. 优缺点
  8. sklearn参数
  9. 应用场景

1、集成学习概念

集成学习(Ensemble learing)是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器效果更好的一种机器学习方法。对于训练数据,我们通过若干个个体学习器,通过一定的聚合策略,就可以形成一个强学习器,以达到博采众长的目的。也就是说,集成学习主要有两个问题,一是如何得到若干个弱的个体学习器,二是如何选择一种结合策略,将这些弱学习器集成强学习器。

2、个体学习概念

个体学习器有两种选择。一种是所有个体学习器是一个种类的,或者说是同质的,比如都是决策树或者神经网络。另一种是所有个体学习器不全是一个种类的,或者说是异质的,比如对训练集采用KNN,决策树,逻辑回归,朴素贝叶斯或者SVM等,再通过结合策略来集成。
目前来说,同质的个体学习器应用最广泛,一般我们常说的集成方法都是同质个体学习器。而同质学习器使用最多的是CART决策树和神经网络。另外,个体学习器之间是否存在依赖关系可以将集成方法分为两类。一类是个体学习器之间存在强依赖关系,即串行,代表算法是boosting系列算法(Adaboost和GBDT),另一类是个体学习器之间不存在依赖关系,即并行,代表算法是bagging和随机森林。

3、boosting 和bagging

3.1boosting

boosting算法的工作机制是给每一个样本分配一个初始权重,然后用训练样本和权重训练处弱分类器1,根据弱分类器1更新样本的权重,再训练弱分类器2,如此重复进行,直到学习器达到指定的数目,最终将这些弱学习器集成强学习器。可以看出各个弱分类器之间是串行的。
boosting系列算法中最著名的是有Adaboost和提升树(boosting tree),提升树中应用最广泛的是GBDT(梯度提升树)
随机森林算法小结_第1张图片

3.2bagging

bagging算法的各个弱分类器是并行的,相互之间没有影响,可以单独训练。但是单个学习器的训练数据是不一样的。假设原始数据中有n个样本,有T个弱学习器,在原始数据中进行T次有放回的随机采样,得到T个新数据集,作为每个弱分类器的训练样本,新数据集和原始数据集的大小相等。每一个新数据集都是在原始数据集中有放回的选择n个样本得到的。
随机森林是bagging的一个特化进阶版,特化是指随机森林的弱学习器都是决策树,进阶是指随机森林在bagging的基础上,又加上了特征的随机选择,其基本思想和bagging一致。
随机森林算法小结_第2张图片

4、结合策略(平均法,投票法,学习法)

4.1 平均法

对于数值类的回归预测问题,通常使用的结合策略是平均法,也就是说,对于若干个弱学习器的输出进行平均得到最终的预测输出。
    最简单的平均是算术平均,也就是说最终预测是
H ( x ) = 1 T ∑ 1 T h i ( x ) \mathtt{H}(x) = \frac{1}{T}\sum_{1}^T h_i(x) H(x)=T11Thi(x)
    如果每个个体学习器有一个权重w,则最终预测是
H ( x ) = ∑ 1 T w i h i ( x ) \mathtt{H}(x) = \sum_{1}^Tw_i h_i(x) H(x)=1Twihi(x)
    其中wi是个体学习器hi的权重,通常有
w i ≥ 0 , ∑ i = 1 T w i = 1 w_i \geq 0,\sum_{i=1}^T w_i = 1 wi0,i=1Twi=1

4.2 投票法

对于分类问题的预测,我们通常使用的是投票法。假设我们的预测类别是{c1,c2,…cK},对于任意一个预测样本x,我们的T个弱学习器的预测结果分别是 (h1(x),h2(x)…hT(x))。

最简单的投票法是相对多数投票法,也就是我们常说的少数服从多数,也就是T个弱学习器的对样本x的预测结果中,数量最多的类别ci为最终的分类类别。如果不止一个类别获得最高票,则随机选择一个做最终类别。

稍微复杂的投票法是绝对多数投票法,也就是我们常说的要票过半数。在相对多数投票法的基础上,不光要求获得最高票,还要求票过半数。否则会拒绝预测。
    更加复杂的是加权投票法,和加权平均法一样,每个弱学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。

4.3 学习法

上面的方法都是对弱学习器的结果做平均或者投票,相对比较简单,但是可能学习误差较大,于是就有了学习法这种方法,对于学习法,代表方法是stacking,当使用stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
    在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。

5、随机森林思想

随机森林(Random Forest,以下简称RF),它是Bagging算法的进化版,也就是说,它的思想仍然是bagging,但是进行了独有的改进。
首先,RF使用了CART决策树作为弱学习器,这让我们想到了梯度提示树GBDT。第二,在使用决策树的基础上,RF对决策树的建立做了改进,对于普通的决策树,我们会在节点上所有的n个样本特征中选择一个最优的特征来做决策树的左右子树划分,但是RF通过随机选择节点上的一部分样本特征,这个数字小于n,假设为nsub,然后在这些随机选择的nsub个样本特征中,选择一个最优的特征来做决策树的左右子树划分。这样进一步增强了模型的泛化能力。    
    如果nsub=n,则此时RF的CART决策树和普通的CART决策树没有区别。nsub越小,则模型约健壮,当然此时对于训练集的拟合程度会变差。也就是说nsub越小,模型的方差会减小,但是偏倚会增大。在实际案例中,一般会通过交叉验证调参获取一个合适的nsub的值。
    除了上面两点,RF和普通的bagging算法没有什么不同, 下面简单总结下RF的算法。
    输入为样本集D={(x,y1),(x2,y2),…(xm,ym)},弱分类器迭代次数T。
    输出为最终的强分类器f(x)
    1)对于t=1,2…,T:
      a)对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集Dt
      b)用采样集Dt训练第t个决策树模型Gt(x),在训练决策树模型的节点的时候, 在节点上所有的样本特征中选择一部分样本特征, 在这些随机选择的部分样本特征中选择一个最优的特征来做决策树的左右子树划分    
2) 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。

6、随机森林推广

由于RF在实际应用中的良好特性,基于RF,有很多变种算法,应用也很广泛,不光可以用于分类回归,还可以用于特征转换,异常点检测等。下面对于这些RF家族的算法中有代表性的做一个总结。

6.1 extra trees

extra trees是RF的一个变种, 原理几乎和RF一模一样,仅有区别有:
    1) 对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集。
    2) 在选定了划分特征后,RF的决策树会基于基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是extra trees比较的激进,他会随机的选择一个特征值来划分决策树。
    从第二点可以看出,由于随机选择了特征值的划分点位,而不是最优点位,这样会导致生成的决策树的规模一般会大于RF所生成的决策树。也就是说,模型的方差相对于RF进一步减少,但是偏倚相对于RF进一步增大。在某些时候,extra trees的泛化能力比RF更好。

6.2 Totally Random Trees Embedding

Totally Random Trees Embedding(以下简称 TRTE)是一种非监督学习的数据转化方法。它将低维的数据集映射到高维,从而让映射到高维的数据更好的运用于分类回归模型。我们知道,在支持向量机中运用了核方法来将低维的数据集映射到高维,此处TRTE提供了另外一种方法。
    TRTE在数据转化的过程也使用了类似于RF的方法,建立T个决策树来拟合数据。当决策树建立完毕以后,数据集里的每个数据在T个决策树中叶子节点的位置也定下来了。比如我们有3颗决策树,每个决策树有5个叶子节点,某个数据特征x划分到第一个决策树的第2个叶子节点,第二个决策树的第3个叶子节点,第三个决策树的第5个叶子节点。则x映射后的特征编码为(0,1,0,0,0, 0,0,1,0,0, 0,0,0,0,1), 有15维的高维特征。这里特征维度之间加上空格是为了强调三颗决策树各自的子编码。
    映射到高维特征后,可以继续使用监督学习的各种分类回归算法了。

4.3 Isolation Forest

Isolation Forest(以下简称IForest)是一种异常点检测的方法。它也使用了类似于RF的方法来检测异常点。
    对于在T个决策树的样本集,IForest也会对训练集进行随机采样,但是采样个数不需要和RF一样,对于RF,需要采样到采样集样本个数等于训练集个数。但是IForest不需要采样这么多,一般来说,采样个数要远远小于训练集个数?为什么呢?因为我们的目的是异常点检测,只需要部分的样本我们一般就可以将异常点区别出来了。
    对于每一个决策树的建立, IForest采用随机选择一个划分特征,对划分特征随机选择一个划分阈值。这点也和RF不同。
    另外,IForest一般会选择一个比较小的最大决策树深度max_depth,原因同样本采集,用少量的异常点检测一般不需要这么大规模的决策树。
    对于异常点的判断,则是将测试样本点x拟合到T颗决策树。计算在每颗决策树上该样本的叶子节点的深度ht(x)。,从而可以计算出平均高度h(x)。此时我们用下面的公式计算样本点x的异常概率:
s(x,m)=2−h(x)c(m)

其中,m为样本个数。c(m)的表达式为:
c(m)=2ln(m−1)+ξ−2m−1m,ξ为欧拉常数
    s(x,m)的取值范围是[0,1],取值越接近于1,则是异常点的概率也越大。

7、RF优缺点

RF的主要优点有:
     1) 训练可以高度并行化,对于大数据时代的大样本训练速度有优 势。个人觉 得这是的最主要的优点。
    2) 由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候, 仍然能高效的训练模型。
    3) 在训练后,可以给出各个特征对于输出的重要性
    4) 由于采用了随机采样,训练出的模型的方差小,泛化能力强。
    5) 相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。
    6) 对部分特征缺失不敏感。
RF的主要缺点有:
    1)在某些噪音比较大的样本集上,RF模型容易陷入过拟合。
    2) 取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的 模型的效果。

8、sklearn调参

​ 在scikit-learn中,RF的分类类是RandomForestClassifier,回归类是RandomForestRegressor。首先考虑RF中Bagging框架的参数

8.1、RF框架参数

​ 1) n_estimators: 也就是弱学习器的最大迭代次数,或者说最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,计算量会太大,并且n_estimators到一定的数量后,再增大n_estimators获得的模型提升会很小,所以一般选择一个适中的数值。默认是100。

2) oob_score :即是否采用袋外样本来评估模型的好坏。默认识False。个人推荐设置为True,因为袋外分数反应了一个模型拟合后的泛化能力。

3) criterion: 即CART树做划分时对特征的评价标准。分类模型和回归模型的损失函数是不一样的。分类RF对应的CART分类树默认是基尼系数gini,另一个可选择的标准是信息增益。回归RF对应的CART回归树默认是均方差mse,另一个可以选择的标准是绝对值差mae。一般来说选择默认的标准就已经很好的。

从上面可以看出, RF重要的框架参数比较少,主要需要关注的是 n_estimators,即RF最大的决策树个数。

8.2、RF决策树参数

​ 1) RF划分时考虑的最大特征数max_features: 可以使用很多种类型的值,默认是"auto",意味着划分时最多考虑N−−√个特征;如果是"log2"意味着划分时最多考虑log2N个特征;如果是"sqrt"或者"auto"意味着划分时最多考虑N−−√个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。其中N为样本总特征数。一般我们用默认的"auto"就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。

2) 决策树最大深度max_depth: 默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。

3) 内部节点再划分所需最小样本数min_samples_split: 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

4) 叶子节点最少样本数min_samples_leaf: 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

5)叶子节点最小的样本权重和min_weight_fraction_leaf:这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。

6) 最大叶子节点数max_leaf_nodes: 通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。

7) 节点划分最小不纯度min_impurity_split: 这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。一般不推荐改动默认值1e-7。

上面决策树参数中最重要的包括最大特征数max_features, 最大深度max_depth, 内部节点再划分所需最小样本数min_samples_split和叶子节点最少样本数min_samples_leaf。

9、应用场景

​ 个人认为,由于RF是以决策树为弱学习器模型来训练的,因此能够适用于决策树的数据都可以使用RF来进行模型训练,而且效果肯定要强于单纯的决策树。应用场景比较广泛,可以根据自己的需求来进行选择性使用。

文章参考:集成学习原理小结-刘建平
Bagging与随机森林算法原理小结 -刘建平

你可能感兴趣的:(机器学习)