随机森林模型调参方法

一、默认参数

打印随机森林学习器的默认参数配置:

1、bootstrap=True

2criterion='mse'

3max_depth=None

4max_features='auto'

5max_leaf_nodes=None

6、min_impurity_decrease=0.0

7min_impurity_split=None

8min_samples_leaf=1

9min_samples_split=2

10min_weight_fraction_leaf=0.0

11n_estimators=10

12、n_jobs=1

13oob_score=False

14random_state=None

15、verbose=0

16、warm_start=False

 

二、重要参数

1、系统参数

(1)random_state(随机发生器种子数)

如果是int,random_state是随机数发生器使用的种子; 如果是RandomState实例,random_state是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例。

2、决策树参数

(1)max_features(最大特征数)

划分特征时的最多特征数,可以是多种类型的值。默认为“None”,即划分时考虑所有特征数。

其他值:“log2”——最多考虑log2N个特征;“sqrt”/“auto”——最多考虑sqrt(N)个特征;int(n)——可填任意大于1且不大于特征数量的整数。

一般而言,当样本特征数较少(<50)时,使用默认配置即可。

 

(2)max_depth(决策树最大深度)

默认为“None”,即决策树建立子树时不限制子树的深度。在样本量较少或特征数较少的情况下可以使用默认配置。否则,推荐取值10-100之间。

 

(3)min_samples_split(内部结点再划分所需最小样本数)

当某节点的样本数少于min_samples_split时,不会继续再尝试选择最优特征来进行划分。 默认为2,如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大该值。

 

(4)min_samples_leaf(叶结点最少样本数)

当某叶结点数目小于样本数,则和兄弟结点一起被剪枝。默认为1。当样本量不大时,可以使用默认配置。否则推荐增大该值。

 

(5)min_weight_fraction_leaf(叶结点最小样本权重和)

该值限制了叶结点所有样本权重和的最小值,如果小于该值,则会和兄弟节点一起被剪枝。 默认为0,即不考虑权重问题。当样本存在较多缺失值,或分类树样本的分布类别偏差很大时,将引入样本权重,此时需要考虑该值。

 

(6)max_leaf_nodes(最大叶结点数)

该值能够防止过拟合,默认为“None”,即不限制最大叶结点数。但特征不多时,使用默认配置即可。否则需要设置该值,具体数值通过交叉验证获得。

 

(7)min_impurity_split(结点划分最小不纯度)

该值限制了决策树的增长,当某结点的不纯度小于阈值,则该结点不再生成子结点,一般推荐使用默认值1e-7。

 

3、Bagging框架参数

    Bagging框架中各弱学习器之间没有依赖,因此随机森林的调参难度低于梯度提升树。

(1)n_estimators(弱学习器最大迭代次数)

    即弱学习器的个数。一般而言,该值太小易发生欠拟合,太大则成本增加且效果不明显。一般选取适中的数值,默认为10。

 

(2)oob_score (是否采用袋外样本评价模型)

    默认为False。推荐使用True,因为这样可以反映模型拟合后的泛化能力。

 

(3)criterion(特征评价标准)

    分类和回归模型的损失函数不同:分类模型默认为基尼指数,也可选择信息增益;回归模型默认为均方差(mse),也可选择绝对值差(mae)。一般而言选择默认配置即可。

 

三、调参

一般采用网格搜索法优化超参数组合。这里将调参方法简单归纳为三条:1、分块调参(不同框架参数分开调参);2、一次调参不超过三个参数;3、逐步缩小参数范围。这里以n_estimators参数为例(省略数据和模型的导入):

#导入网格搜索模块
from sklearn.model_selection import GridSearchCV
rfr_best = RandomForestRegressor()
params ={'n_estimators':range(10,20,1)}
gs = GridSearchCV(rfr_best, params, cv=4)
gs.fit(X_train,Y_train)

#查验优化后的超参数配置
print(gs.best_score_)
print(gs.best_params_)


你可能感兴趣的:(机器学习)