Ensemble methods 之 Random Forest(随机森林)(收藏)

1. 是什么

如前面所说,决策树有时候会出现过拟合(overfit)的问题,越强大的决策树越可能出现过拟合,但是如果几个模型或者一个模型的几个参数组合起来,就很容易弥补这种问题。

所以,随机森林就是一种ensemble方法中的bagging方法,用原始数据进行训练至完全分裂最后得到多个决策树,对 新的数据的预测就是 对所有的决策树取平均值来进行预测。

2. 关键概念

  • 采样。样本数量为N,采样数量也为N,但是采取的是有放回的采样(bootstrap)。
  • 训练。决策树完全分裂至所有的叶子节点,不做各种形式的剪枝,不必担心过拟合问题。
  • 组合算法。训练结束之后,对新数据进行预测的时候,会让新数据在所有得到的M个决策树上进行预测,最后对结果进行平均或者进行投票。最早的算法是投票:每个树对每一类投票,sklearn的算法是对各个树进行了平均取结果。
  • 分类和回归。随机森林可以做分类,也可以做回归,但是很显然(实践上也是),做回归有点不靠谱,所以研究随机森林回归意思不大。

3. 算法

没什么特殊的说明,只是熟悉决策树的算法就好了,这里:http://blog.csdn.net/sandyzhs/article/details/46814805

4. 怎么用

class sklearn.ensemble.RandomForestClassifier(n_estimators=10, crite-rion=’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, ran-dom_state=None, verbose=0,
warm_start=False, class_weight=None)

 其中的大多数参数都是决策树(构成组合算法的小决策树)的参数,随机森林特有的有:

n_estimators=10:决策树的个数,越多越好,但是性能就会越差,至少100左右(具体数字忘记从哪里来的了)可以达到可接受的性能和误差率。
n_jobs=1:并行job个数。这个在ensemble算法中非常重要,尤其是bagging(而非boosting,因为boosting的每次迭代之间有影响,所以很难进行并行化),因为可以并行从而提高性能。1=不并行;n:n个并行;-1:CPU有多少core,就启动多少job。
warm_start=False:热启动,决定是否使用上次调用该类的结果然后增加新的。
class_weight=None:各个label的权重。

进行预测可以有几种形式:

predict_proba(x):给出带有概率值的结果。每个点在所有label的概率和为1.
predict(x):直接给出预测结果。内部还是调用的predict_proba(),根据概率的结果看哪个类型的预测值最高就是哪个类型。
predict_log_proba(x):和predict_proba基本上一样,只是把结果给做了log()处理。
5. 应用场景和限制

主要用来做分类。缺点不多,基本上没有看到。它有很多的优点,比如:

  •     在当前的很多数据集上,相对其他算法有着很大的优势
  •     它能够处理很高维度(feature很多)的数据,并且不用做特征选择
  •     在训练完后,它能够给出哪些feature比较重要
  •     训练速度快
  •     在训练过程中,能够检测到feature间的互相影响
  •     容易做成并行化方法
  •     实现比较简单

其中对feature的那几个优点很重要,因为节省了做特征工程的时间以及误差。另外,实现简单和可以并行也是很重要的特色,因为这样比较容易维护和调优。

猜你喜欢

转载自www.cnblogs.com/nxf-rabbit75/p/9298212.html
今日推荐