在R中构建回归树调优网格时遇parameters函数报错求助
解决方法
1. 先理清模型类型(你要的是randomForest,不是单棵决策树)
你提到要尝试randomForest模型,但当前代码用的是decision_tree()(对应rpart单棵决策树),这是两种不同的模型。如果目标是随机森林,应该用rand_forest()函数,指定引擎为"randomForest",同时标记要调优的参数:
library(tidymodels) # 构建随机森林的调优规格 tune_spec <- rand_forest( mtry = tune(), # 每棵树随机选取的特征数 trees = tune(), # 森林中树的数量 min_n = tune() # 节点分裂所需的最小样本量 ) %>% set_engine("randomForest") %>% set_mode("regression")
2. 正确生成调优网格(针对单棵决策树或随机森林)
不管是哪种模型,要使用grid_regular()生成调优网格,必须先在模型规格中标记出需要调优的参数(用tune()),否则parameters()无法识别可调整的参数,就会报错。
如果你确实想调rpart单棵决策树
修正你的原始代码,添加可调参数标记:
# 修正后的单棵决策树规格 tune_spec <- decision_tree( cost_complexity = tune(), # 复杂度惩罚项,控制树的剪枝 tree_depth = tune(), # 树的最大深度 min_n = tune() # 节点最小样本量 ) %>% set_engine("rpart") %>% set_mode("regression") # 生成调优网格 tree_grid <- grid_regular(parameters(tune_spec), levels = 3)
更简便的写法
你也可以直接把模型规格传给grid_regular(),它会自动提取可调参数:
tree_grid <- grid_regular(tune_spec, levels = 3)
报错根源
你之前的decision_tree()没有设置任何tune()标记的参数,parameters()函数无法从一个没有可调参数的模型对象中生成参数集,因此抛出错误。另外注意区分单棵决策树(decision_tree()+rpart)和随机森林(rand_forest()+randomForest)的用法,避免模型类型混淆。
内容的提问来源于stack exchange,提问作者Lillian Welsh
相关产品推荐
相关产品推荐

