随机森林RF的参数调优

参考原文档:sklearn中Random Forest参数调优_sklearn rf系数-CSDN博客

本文从实践的角度对RF做一个总结。重点讲述scikit-learn中RF的调参注意事项,以及和GBDT调参的异同点。

1、scikit-learn随机森林类库概述

在scikit-learn中,RF的分类类是RandomForestClassifier,回归类是RandomForestRegressor。当然RF的变种Extra Trees也有, 分类类ExtraTreesClassifier,回归类ExtraTreesRegressor。由于RF和Extra Trees的区别较小,调参方法基本相同,本文只关注于RF的调参。

        和GBDT的调参类似,RF需要调参的参数也包括两部分,第一部分是Bagging框架的参数,第二部分是CART决策树的参数。下面我们就对这些参数做一个介绍。

2、RF框架参数

       首先我们关注于RF的Bagging框架的参数。这里可以和GBDT对比来学习,GBDT的框架参数比较多,但是RF则比较简单,这是因为bagging框架里的各个弱学习器之间是没有依赖关系的,这减小的调参的难度。换句话说,达到同样的调参效果,RF调参时间要比GBDT少一些。

       下面我来看看RF重要的Bagging框架的参数,由于RandomForestClassifier和RandomForest Regressor参数绝大部分相同,这里会将它们一起讲,不同点会指出。

1、 n_estimators: 弱学习器的最大迭代次数,或者说最大的弱学习器的个数。

一般来说n_estimators太小,容易欠拟合,n_estimators太大,又容易过拟合。

一般选择一个适中的数值。默认是100。

在实际调参的过程中,我们常常将n_estimators和下面介绍的参数learning_rate一起考虑。

2、oob_score :是否采用袋外样本来评估模型的好坏。

默认是False。个人推荐设置为True,因为袋外分数反应了一个模型拟合后的泛化能力。

3、criterion: CART树做划分时对特征的评价标准。

分类模型和回归模型的损失函数是不一样的。

分类RF对应的CART分类树默认是基尼系数gini,另一个可选择的标准是信息增益。

回归RF对应的CART回归树默认是均方差mse,另一个可以选择的标准是绝对值差mae。

一般来说选择默认的标准就已经很好的。

总结:RF重要的框架参数比较少,主要需要关注的是 n_estimators,即RF最大的决策树个数。

3、RF决策树参数

下面我们再来看RF的决策树参数,它要调参的参数基本和GBDT相同,如下:

1、RF划分时考虑的最大特征数max_features: 默认是”None”

默认是”None”,意味着划分时考虑所有的特征数;

如果是”log2”意味着划分时最多考虑log2N个特征;

如果是”sqrt”或者”auto”意味着划分时最多考虑N−−√个特征。

如果是整数,代表考虑的特征绝对数。

如果是浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。N为样本总特征数。

小结:一般来说,如果样本特征数不多,比如小于50,我们用默认的”None”就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。

2、 决策树最大深度max_depth: 默认可以不输入

如果不输入的话,决策树在建立子树的时候不会限制子树的深度。

小结:一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。

3、内部节点再划分所需最小样本数min_samples_split: 默认是2

这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。

小结:如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

4、叶子节点最少样本数min_samples_leaf: 默认是1

这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。

默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。

小结:如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

5、叶子节点最小的样本权重和min_weight_fraction_leaf: 默认是0

这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。

默认是0,就是不考虑权重问题。

小结:一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。

6、最大叶子节点数max_leaf_nodes: 默认是”None”

通过限制最大叶子节点数,可以防止过拟合

默认是”None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。

小结:如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。

7、节点划分最小不纯度min_impurity_split: 默认值1e-7

这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。

小结:一般不推荐改动。

总结:上面决策树参数中最重要的包括:

(1)最大特征数max_features,

(2)最大深度max_depth,

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

(4)叶子节点最少样本数min_samples_leaf。

小样本数据-总结

因此针对小样本数据,随机森林算法需要调整的参数为:

n_estimators、learning-rate(这两个一起调整)

max_features: 默认是”None”,划分时考虑所有的特征数;

max_depth: 默认可以不输入,决策树在建立子树的时候不会限制子树的深度。

min_samples_split: 默认是2,限制子树继续划分的条件。

min_samples_leaf: 默认是1,限制叶子节点最少的样本数。

min_weight_fraction_leaf: 默认是0,不考虑权重问题;样本缺失值较多,才需要考虑这个值。

max_leaf_nodes: 默认是”None”,不限制最大的叶子节点数,如果特征多的话,可以加以限制

min_impurity_split: 默认值1e-7,不推荐改动。

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于随机森林回归模型的参数调优,可以考虑以下几个关键参数: 1. n_estimators(树的数量):增加树的数量可以提高模型的准确性,但也会增加计算成本。可以通过交叉验证来选择合适的数量。 2. max_depth(树的最大深度):限制树的深度可以防止过拟合。可以通过网格搜索或交叉验证来选择最佳深度。 3. min_samples_split(节点分裂所需的最小样本数):控制节点分裂的条件,防止过拟合。较高的值可以提高模型的稳定性。 4. min_samples_leaf(叶节点所需的最小样本数):控制叶节点的大小,防止过拟合。较低的值可以提升模型的灵敏度。 5. max_features(每个节点考虑的特征数量):限制每个节点考虑的特征数量,可以防止特征间的高度相关性对结果的影响。 在参数调优时,可以使用交叉验证和网格搜索等技术来寻找最佳参数组合。例如,可以使用GridSearchCV函数来进行网格搜索,并通过交叉验证评估不同参数组合的性能。 以下是一个示例代码片段: ```python from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import GridSearchCV # 定义参数范围 param_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [None, 5, 10], 'min_samples_split': [2, 5, 10], 'min_samples_leaf': [1, 2, 4], 'max_features': ['auto', 'sqrt', 'log2'] } # 创建随机森林回归器 rf = RandomForestRegressor() # 使用网格搜索进行参数调优 grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5) grid_search.fit(X_train, y_train) # 输出最佳参数组合 print("Best Parameters: ", grid_search.best_params_) # 使用最佳参数组合的模型进行预测 best_rf = grid_search.best_estimator_ y_pred = best_rf.predict(X_test) ``` 通过以上步骤,可以找到最佳的参数组合,并使用该组合构建的模型进行预测。注意,这只是一个示例,具体的参数范围和评估方法需要根据实际情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值