使用caret包rpart模型时遇‘Argument params not matched’错误求助
问题分析与解决办法
嘿,我来帮你搞定这个问题——你遇到的Argument params not matched错误其实是个参数传递的小坑!
错误根源
caret的train()函数根本没有params这个参数,你把要传给rpart的split='information'参数放错地方啦。train()会通过可变参数...把额外参数直接传给底层的建模函数(也就是rpart),所以不需要用params来打包这些参数。
快速修正
把你train()调用里的params=list(split='information')删掉,换成直接写split='information'就行。另外注意你定义的myvars变量现在没用到,要么用上要么清理掉,避免冗余。
修正后的核心代码如下:
samp.m <- train(samp.f, data=credit_data, method='rpart', trControl = fitControl, tuneLength=20, metric = "Accuracy", tuneGrid = Grid, na.action = na.omit, split='information') # 直接把rpart的参数放在这里
额外小贴士
如果之后需要给rpart传递更多控制类参数(比如maxdepth、minsplit这类),有两种方式:
- 直接加在
train()的参数列表里,和split一样; - 用
rpart.control()创建一个控制对象,然后通过train()的control参数传递,比如:# 先创建rpart的控制参数 rpart_ctrl <- rpart.control(maxdepth=5, minsplit=10) # 再传入train samp.m <- train(samp.f, data=credit_data, method='rpart', trControl = fitControl, tuneGrid = Grid, control = rpart_ctrl, split='information')
你单独跑rpart循环没问题,是因为直接调用rpart时可以直接指定参数,但train()有自己的参数规则,不能随便加它不认识的参数~
内容的提问来源于stack exchange,提问作者ktj1989
相关产品推荐
相关产品推荐

