随机森林算法梳理

本文转载自跟小帅学代码,详情可以扫描下方二维码:
640?wx_fmt=jpeg

首先来说一下集成学习。集成学习在学术界和工业界都有很高的热度,例如Kaggle竞赛中神挡杀神佛挡杀佛的XGBoost就是一个典型的例子。那么什么是集成学习?最通俗易懂的理解就是:"三个臭皮匠,顶个诸葛亮"。把"臭皮匠"组合起来,其决策能力可能超过"诸葛亮"。

根据其训练基学习器的特点将其分为2大类:Boosting和Bagging。

Boosting

Boosting采用串行的方式训练基学习器,各学习器之间相互依赖。与人类的学习过程类似,人们学习的时候总是不断犯错不断去更正,降低下次犯错的概率,Boosting也是Learn from your mistakes。

640?wx_fmt=jpeg

Bagging

Bagging的主要思想是:集体投票决策。Bagging各基学习器之间无强依赖,可以进行并行训练。随机森林(Random Forest)就是一种比较著名的以决策树为基学习器的Bagging算法。因为各个学习器之间无强依赖,所以在训练过程中,随机森林将训练集分为若干子集。

640?wx_fmt=jpeg

结合策略

有了基学习器,我们怎么进行组合呢?这就要说到结合策略了。主要是平均法,投票法和学习法三个结合策略。

平均法

对于数值类的回归预测问题,通常使用的结合策略是平均法,也就是说,对于若干个弱学习器的输出进行平均得到最终的预测输出。可以是一般的mean也可以加权平均。

投票法

对于分类问题的预测,我们通常使用的是投票法。最简单的投票法是相对多数投票法,即少数服从多数。绝对多数投票法稍微复杂一点,在相对多数投票法的基础上,还要求票过半数。否则会拒绝预测。更加复杂的是加权投票法,每个弱学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。

学习法

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

随机森林

理解了bagging算法,随机森林(Random Forest)就好理解了。它是Bagging算法的进化版。首先,RF使用了CART决策树作为弱学习器。第二,在使用决策树的基础上,RF对决策树的建立做了改进,对于普通的决策树,我们会在节点上所有的n个样本特征中选择一个最优的特征来做决策树的左右子树划分,但是RF通过随机选择节点上的一部分样本特征,这个数字小于n,为m,然后在这些随机选择的m个样本特征中,选择一个最优的特征来做决策树的左右子树划分。这样进一步增强了模型的泛化能力。

640?wx_fmt=jpeg

由于RF在实际应用中的良好特性,基于RF,有很多变种算法,应用也很广泛,不光可以用于分类回归,还可以用于特征转换,异常点检测等。extra trees是RF的一个变种, 原理几乎和RF一模一样。仅有区别有:

  • 对于每个决策树的训练集,RF采用的是随机采样bootstrap来选择采样集作为每个决策树的训练集,而extra trees一般不采用随机采样,即每个决策树采用原始训练集

  • 在选定了划分特征后,RF的决策树会基于基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是extra trees比较的激进,他会随机的选择一个特征值来划分决策树。因此在某些时候,extra trees的泛化能力比RF更好。


随机森林优缺点

  • 优点

1、采用并行方法训练因此可以高度并行化,对于大数据的大样本训练速度有优势。

2、由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。

3、在训练后,可以给出各个特征对于输出的重要性。

4、由于采用了随机抽样,训练出来的模型的方差小,泛化能力强。

5、相对于Boosting系列的Adaboost和GBDT,RF实现比较简单。

6、对部分特征缺失不敏感。

  • 缺点

    1、在某些噪音比较大的样本集上,RF模型容易陷入过拟合。

    2、取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。

sklearn参数解释

n_estimators:基学习器的数量,越大越好,但是训练时间会越长。

criterion:寻找最有切分点的依据,默认采用Gini index。

max_features:随机特征子集的大小,默认是"auto",一般默认就可以,如果特征纬度特别大,可以灵活改变最大特征数,以控制决策树的生成时间。

max_depth:最大深度默认"None",当样本和特征都很多的情况下可以控制深度。

min_samples_split:节点最小样本数量,当某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。默认为2,若样本数量大,可以考虑增大这个值。

min_samples_leaf:叶子节点最少样本数。若某叶子节点数目小于min_samples_leaf,则会和兄弟节点一起被剪枝。默认是1,当样本量增大的时候推荐增大这个值。

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

max_leaf_nodes:最大叶子节点数。通过限制最大叶子节点数,可以防止过拟合。默认为"None"。

min_impurity_split:节点划分最小不纯度。如果某节点的不纯度小于这个值,就不再生成子结点。


应用

当数据维度相对低(几十维),同时对准确性有较高要求时,我们可以选用随机森林,同时它不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。


 
 

◆ ◆ ◆  ◆ ◆


640?wx_fmt=jpeg


长按二维码关注我们



数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。


管理员二维码:

640?wx_fmt=jpeg


猜你喜欢

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值