1 随机森林概述
1.1 集成算法概述
集成学习(ensemble learning)是通过在数据上构建多个模型,集成所有模型的建模结果。
集成算法的目标:集成算法会考虑多个评估器的建模结果,汇总之后得到一个综合的结果,以此来获取比单个模型更好的回归或分类表现。
集成评估器(ensemble estimator):多个模型集成成为的模型。
基评估器(base estimator):组成集成评估器的每个模型。
三类集成算法:装袋法(Bagging),提升法(Boosting)和stacking。
装袋法的**核心思想**是构建多个相互独立的评估器,然后对其预测进行平均或多数表决原则来决定集成评估器的结果。装袋法的代表模型就是*随机森林*。
提升法中,基评估器是相关的,是按顺序一一构建的。其**核心思想**是结合弱评估器的力量一次次对难以评估的样本进行预测,从而构成一个强评估器。提升法的代表模型有*Adaboost*和*梯度提升树*。
1.2 sklearn中的集成算法
sklearn中的集成算法模块ensemble:
ensemble.RandomForestClassifier --- 随机森林分类
ensemble.RandomForestRegressor --- 随机森林回归
sklearn.ensemble
PS(决策树简介):
决策树的主要功能是从一张有特征和标签的表格中,通过对特定特征进行提问,为我们总结出一系列决策规则,并用树状图来呈现这些决策规则。
决策树的核心问题有两个,一个是如何找出正确的特征来进行提问,即如何分枝,二是树生长到什么时候应该停下。
第一个问题: 衡量分枝质量的指标-不纯度。(分类树的不纯度--基尼系数或信息熵,回归树的不纯度--MSE均方误差)
每次分枝时,决策树对所有的特征进行不纯度计算,选取不纯度最低的特征进行分枝,分枝后,又再对被分枝的不同取值下,计算每个特征的不纯度,继续选取不纯度最低的特征进行分枝。
第二个问题:每分枝一层,树整体的不纯度会越来越小,决策树追求的是最小不纯度。因此,决策树会不断分枝,直到没有更多的特征可用,或整体的不纯度指标已经最优,决策树就会停止生长。
决策树非常容易过拟合,这是说,它很容易在训练集上表现优秀,却在测试集上表现很糟糕。为了防止决策树的过拟合,我们要对决策树进行剪枝,sklearn中提供了大量的剪枝参数。
2 RandomForestClassifier
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, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False,n_jobs=None, random_state=None, verbose=0, warm_start=False,class_weight=None)
n_estimators: 森林中树木的数量,即基评估器的数量。 n_estimators越大,模型的效果往往越好。
但任何模型都有决策边界,n_estimators达到一定的程度之后,随机森林的精确性往往不在上升或开始波动,并且,n_estimators越大,需要的计算量和内存也越大,训练的时间也会越来越长。 训练时,希望这个参数在训练难度和模型效果之间取得平衡。
random_state: 随机森林中的random_state控制的是生成森林的模式,而非让一个森林中只有一棵树。当random_state固定时,随机森林中生成是一组固定的树,但每棵树依然是不一致的,这是用”随机挑选特征进行分枝“的方法得到的随机性。并且我们可以证明,当这种随机性越大的时候,袋装法的效果一般会越来越好。用袋装法集成时,基分类器应当是相互独立的,是不相同的。
bootstrap:参数默认True,代表采用这种有放回的随机抽样技术。通常,这个参数不会被我们设置为False。
oob_score:如果希望用袋外数据来测试,则需要在实例化时就将oob_score这个参数调整为True。袋外数据(out of bag data,简写为oob):会有约37%的训练数据被浪费掉,没有参与建模。
也就是说,在使用随机森林时,我们可以不划分测试集和训练集,只需要用袋外数据来测试我们的模型即可。
3 RandomForestRegressor
class sklearn.ensemble.RandomForestRegressor (n_estimators=’warn’, criterion=’mse’, max_depth=None,min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’,max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False,n_jobs=None, random_state=None, verbose=0, warm_start=False)
所有的参数,属性与接口,全部和随机森林分类器一致。仅有的不同就是回归树与分类树的不同,不纯度的指标,参数Criterion不一致。
PS:实例中 专门用来填补缺失值的类sklearn.impute.SimpleImputer 可将均 值,中值,或者其他最常用的数值填补到数据中。