Datawhale|高级算法梳理(一):随机森林算法梳理

集成学习(ensemble learning)指的不是某一种机器学习方法,而是一类学习方法的统称。它通过构建并结合多个机器学习方法来完成学习任务。集成学习可以用于分类问题、回归问题等。几乎在所有比赛靠前的名次里,都可以看到集成学习的影子,比如“模型融合”:多个分类器经过一定的策略结合在一起共同得到一个鲁棒的模型。本文就对集成学习的原理做一个总结,可能侧重点会放在分类问题上。

1、集成学习

1.1、集成学习概念

集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务。对于分类任务来说,这里说的多个学习器一般指的是“弱分类器”,弱分类器也即指的是那些分类精度或者说是分类效果没有那么好的分类器。比如在二分类问题中,只要分类器的错误率小于50%即可拿来作为集成学习里的个体分类器。对于我们训练得到的这若干个分类器,经过一定的组合策略,最终形成一个强分类器。常用的集成学习包括但不限于随机森林(Random Forest),XGBoost......

所以集成学习有两个关注点:

  1. 如何得到若干个个体学习分类器
  2. 如何选择一种组合策略,有效的把这些个体学习器合成一个强分类器

1.2、个体学习器概念

个体学习器指的就说构成集成学习的每个分类器个体,也叫做“基学习器”,应该很好理解了。

上一小节我们提到了集成学习的两个关注点,第一个关注点就是:如何让得到这若干个个体分类器。

第一种就是所有的个体分类器都是一个种类的,或者说是同质的。比如随机森林算法里的个体学习分类器都是决策树个体分类器,又比如神经网络个体学习分类器。

第二种就是所有的个体分类器不一定都是一个种类的或者说是异质的。比如说:我们可以用训练集训练出支持向量机个体分类器、逻辑回归个体分类器、最近邻个体分类器.....,最终通过某种组合策略(如投票策略)得到集成的分类器。

目前来说,同质的个体分类器的是比较常见的。要获得好的集成,个体分类器应“好而不同”,即个体分类器要有一定的准确性,即分类器不能太坏,并且要有“多样性”(diversity),即分类器间具有差异。

同质个体分类器按照个体分类器之间是否存在依赖关系可以分为两类,第一个是个体分类器之间不存在强依赖关系,一系列个体分类器可以并行生成,代表算法是bagging和随机森林(Random Forest)系列算法。第二个是个体分类器之间存在强依赖关系,一系列个体分类器基本都需要串行生成,代表算法是boosting系列算法,。

1.3、boosting & bagging

1.3.1 bagging  

  在bagging算法中,它的弱学习器之间没有依赖关系,可以并行生成。

  1. 从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
  2. 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
  3. 对分类问题:将上步得到的k个模型采用简单投票法
    对回归问题,对上述模型采用简单平均法。(所有模型的重要性相同)

1.3.2  boosting

在boosting算法中,它的弱学习器之间存在强依赖关系,一系列个体分类器基本都需要串行生成

boosting是一族可以将弱分类器提升为强分类器的算法。这算法的工作机制类似于:先从初始训练集训练出一个基分类器,再根据基分类器的表现对训练样本分布进行重新调整,使得先前基分类器做错的样本后续持续受到关注,如此重复直到基分类器数目达到指定值T,最终将这些学习器进行加权结合。

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

在章节1.1里我们提出集成学习的第二个关注点是学习器的组合策略,如平均法,投票法,和学习法

  1. 平均法:对于数值型输出来说,最常见的就说平均法。平均法又包含简单平均法和加权平均法。加权平均法的权重一般是从训练数据中学习而得,现实任务中的训练样本通常不充分或存在噪声,这将使得学出的权重不完全可靠。因此,实验和应用均显示出,加权平均分未必一定优于朴素的简单平均法。一般而言,在个体学习器的性能相差较大时宜使用加权平均法,而在个体学习器性能相近时宜使用简单平均法。
  2. 投票法:对于分类任务而言,投票法才是最佳搭档。投票法又包括:相对多数投票法(plurality voting)、绝对多数投票法( majority voting)----要求票数过半、加权投票法(weighted voting)
  3. 、学习法:先从初始数据集中训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器。在新数据集中,初级学习器的输出被当做样例输入特征,初始样本的标记仍被当做样例标记。

 

2、随机森林

 

2.1 随机森林思想

随机森林利用随机的方式将许多决策树组合成一个森林,每个决策树在分类的时候投票决定测试样本的最终类别。其构建过程如下:

  1. 从原始训练集中使用Bootstraping方法随机有放回采样选出m个样本,共进行n_tree次采样,生成n_tree个训练集
  2. 对于n_tree个训练集,我们分别训练n_tree个决策树模型
  3. 对于单个决策树模型,假设训练样本特征的个数为n,那么每次分裂时根据信息增益/信息增益比/基尼指数选择最好的特征进行分裂
  4. 每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝
  5. 将生成的多棵决策树组成随机森林。对于分类问题,按多棵树分类器投票决定最终分类结果;对于回归问题,由多棵树预测值的均值决定最终预测结果

2.2 随机森林的推广

Extra trees是RF的一个变种, 原理几乎和RF一模一样,仅有区别有:

  1. 对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集。
  2. 在选定了划分特征后,RF的决策树会基于信息增益,基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是extra trees比较的激进,他会随机的选择一个特征值来划分决策树。

从第二点可以看出,由于随机选择了特征值的划分点位,而不是最优点位,这样会导致生成的决策树的规模一般会大于RF所生成的决策树。也就是说,模型的方差相对于RF进一步减少,但是bias相对于RF进一步增大。在某些时候,extra trees的泛化能力比RF更好

其他几种集成算法:随机森林,GBDT,XGBoost的对比

2.3 优缺点

优点:

a)随机森林算法能解决分类与回归两种类型的问题,表现良好,由于是集成学习,方差和偏差都比较低,泛化性能优越;
b)随机森林对于高维数据集的处理能力很好,它可以处理成千上万的输入变量,并确定最重要的变量,因此被认为是一个不错的降维方法。此外,该模型能够输出特征的重要性程度,这是一个非常实用的功能。
c) 可以应对缺失数据;
d)当存在分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法;
e ) 高度并行化,易于分布式实现
f) 由于是树模型 ,不需要归一化即可之间使用
缺点:

a)随机森林在解决回归问题时并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续型的输出。当进行回归时,随机森林不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合。
b)对于许多统计建模者来说,随机森林给人的感觉像是一个黑盒子——你几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。
c) 忽略属性之间的相关性
 

2.4 sklearn里的RF算法

sklearn里的RF算法解读:官网链接

对于分类来说:

class sklearn.ensemble.RandomForestClassifier
(n_estimators=10, criterion='gini', max_depth=None, \
min_samples_split=2, min_samples_leaf=1, \
min_weight_fraction_leaf=0.0, max_features='auto', \
max_leaf_nodes=None, bootstrap=True, oob_score=False, \
n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)
  • n_estimators 森林中树的个数
  • criterion 评价划分程度的函数,’gini‘表示基尼不纯度,’entropy‘表示熵,用于信息增益
  • feature_importances_ 特征重要程度,值越大特征越重要
  • 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。

  • splitter: 随机选择属性"random"还是选择不纯度最大"best"的属性,建议用默认 best。
  • presort:是否对数据进行预分类,以加快拟合中最佳分裂点的发现。默认False,适用于大数据集。小数据集使用True,可以加快训练。是否预排序,预排序可以加速查找最佳分裂点,对于稀疏数据不管用,Bool,auto:非稀疏数据则预排序,若稀疏数据则不预排序

 

2.4 应用场景

对于遥感领域来说,主要使用的是随机森林的分类器算法,可以做土地利用分类、土地覆盖分类、农田、建筑物、道路等的提取等等。

作为90年代,最牛逼的鲁棒性最强的两个模型之一(另外一个应该是SVM),RF能够应用的地方太多太多了。比如kaggle上的titannike号船员获救情况的预测.......等等

参考文献:

  1. https://www.cnblogs.com/pinard/p/6131423.html
  2. https://www.cnblogs.com/wxx-wxx/p/10495170.html
  3. https://blog.csdn.net/qq_32690999/article/details/78759463
  4. https://blog.csdn.net/weixin_42054926/article/details/89000912
  5. https://blog.csdn.net/u013239656/article/details/89019819#_2
  6. https://blog.csdn.net/yingfengfeixiang/article/details/80210145
  7. https://www.jianshu.com/p/6243190dfa8b
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值