随机森林(RandomForest,RF)网格搜索法调参

本文介绍随机森林(Random Forest, RF)的参数含义及网格搜索法调参步骤,通过实战案例展示如何选择最佳参数以优化模型。重点讲解RF框架参数、决策树参数及网格搜索法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(随机森林(RandomForest,RF)网格搜索法调参)

摘要:当你读到这篇博客,如果你是大佬你可以选择跳过去,免得耽误时间,如果你和我一样刚刚入门算法调参不久,那么你肯定知道手动调参是多么的低效。那么现在我来整理一下近几日学习的笔记,和大家一起分享学习这个知识点。对于scikit-learn这个库我们应该都知道,可以从中导出随机森林分类器(RandomForestClassifier),当然也能导出其他分类器模块,在此不多赘述。在我们大致搭建好训练模型之后,我们需要确定RF分类器中的重要参数,从而可以得到具有最佳参数的最终模型。这次调参的内容主要分为三块:1.参数含义;2.网格搜索法内容;3.实战案例。

1.RF参数含义

1.1RF框架参数

(1) n_estimators: 也就是弱学习器的最大迭代次数,或者说最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,计算量会太大,并且n_estimators到一定的数量后,再增大n_estimators获得的模型提升会很小,所以一般选择一个适中的数值。默认是100。

(2) oob_score :即是否采用袋外样本来评估模型的好坏。默认识False。个人推荐设置为True,因为袋外分数反应了一个模型拟合后的泛化能力,(至于袋外样本,需要了解一下RF的原理)。

(3) criterion: 即CART树做划分时对特征的评价标准。分类RF对应的CART分类树默认是基尼系数gini,另一个可选择的标准是信息增益。
从上面可以看出, RF重要的框架参数比较少,主要需要关注的是 n_estimators,即RF最大的决策树个数。

1.2RF决策树参数

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

(1) RF划分时考虑的最大特征数max_featu res: 可以使用很多种类型的值,默认是"auto",意味着划分时最多考虑N个特征;如果是"log2"意味着划分时最多考虑log2N个特征;如果是"sqrt"或者"auto"意味着划分时最多考虑N−−√个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分比,即考虑(百分比)取整后的特征数。其中N为样本总特征数。一般我们用默认的"auto"就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。

(2) 决策树最大深度max_depth: 默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。

(3) 内部节点再划分所需最小样本数min_samples_split: 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。

(4) 叶子节点最少样本数min_samples_leaf: 这个值限制了叶子节点最少

### 使用R语言通过网格搜索优化随机森林模型 为了在R中使用网格搜索优化随机森林模型,`mlr`包提供了一种高效的方法来执行这一过程。下面详细介绍如何设置并运行该流程。 #### 创建任务和数据集 首先定义要解决的任务类型(例如分类或回归),以及加载所需的数据集。这一步骤确保后续操作基于正确的输入数据进行处理[^1]。 ```r library(mlr) # 定义任务为二元分类问题 task <- makeClassifTask(data = iris, target = "Species") # 查看任务详情 print(task) ``` #### 构建基础学习器 接着构建一个基本的学习器对象,这里指定采用随机森林作为算法,并初步设定一些默认参数值[^2]。 ```r lrn_rf <- makeLearner("classif.randomForest", predict.type = "prob") ``` #### 设定超参数空间 定义待优化的超参数范围及其取值列表,形成所谓的“参数格子”。这些参数的选择直接影响着模型性能的好坏[^3]。 ```r ps <- makeParamSet( makeIntegerParam("ntree", lower = 50, upper = 200), makeNumericParam("mtry", lower = 1, upper = ncol(getTaskData(task)) - 1), makeDiscreteParam("nodesize", values = c(1, 5, 10)) ) ``` #### 实例化评估策略 选择合适的交叉验证方法和其他辅助组件,比如重采样方案等,用来衡量不同配置下模型的表现情况[^4]。 ```r rdesc <- makeResampleDesc("CV", iters = 5L) ctrl <- makeTuneControlGrid() ``` #### 执行网格搜索 利用`tuneParams()`函数启动实际的调优工作,它会遍历所有可能的组合找到表现最好的一组超参数设置。 ```r tuned_params <- tuneParams(lrn_rf, task, rdesc, par.set = ps, control = ctrl) print(tuned_params$x) ``` #### 训练最终模型 最后应用上述获得的最佳参数重新训练整个随机森林模型,以便于后期部署或进一步分析之用。 ```r final_model <- setHyperPars(makeLearner("classif.randomForest"), par.vals = tuned_params$x) mod <- train(final_model, task) ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值