1. 是什么
如前面所说,决策树有时候会出现过拟合(overfit)的问题,越强大的决策树越可能出现过拟合,但是如果几个模型或者一个模型的几个参数组合起来,就很容易弥补这种问题。所以,随机森林就是一种ensemble方法中的bagging方法,用原始数据进行训练至完全分裂最后得到多个决策树,对新的数据的预测就是对所有的决策树取平均值来进行预测。
2. 关键概念
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左右(具体数字忘记从哪里来的了)可以达到可接受的性能和误差率。
bootstrap=True:是否有放回的采样。
oob_score=False:oob(out of band,带外)数据,即:在某次决策树训练中没有被bootstrap选中的数据。多单个模型的参数训练,我们知道可以用cross validation(cv)来进行,但是特别消耗时间,而且对于随机森林这种情况也没有大的必要,所以就用这个数据对决策树模型进行验证,算是一个简单的交叉验证。性能消耗小,但是效果不错。
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()处理。
主要用来做分类。缺点不多,基本上没有看到。它有很多的优点,比如:
个人认为,其中对feature的那几个优点很重要,因为节省了做特征工程的时间以及误差。另外,实现简单和可以并行也是很重要的特色,因为这样比较容易维护和调优。
6. 参考
http://www.cnblogs.com/leftnoteasy/archive/2011/03/07/random-forest-and-gbdt.html
http://www.zilhua.com/629.html