使用caret+ranger训练随机森林计算AUC时出现参数重复匹配报错
报错原因
formal argument "probability" matched by multiple actual arguments 报错的核心是probability参数被重复传递给了ranger执行函数:
- caret的
train()接口调用ranger做分类任务时,会自动根据trainControl中的classProbs参数值,给底层ranger()传递对应的probability参数,不需要用户手动在train()的入参中重复声明 - 你同时在
train()入参与caret自动传参中设置了probability,触发了参数重复冲突
另外你原代码中trainControl的VerboseIter参数拼写错误,R大小写敏感,正确参数名为全小写的verboseIter。
解决步骤
- 调整
trainControl配置:因为你需要输出概率计算AUC,需要在训练控制项中显式开启classProbs = TRUE,caret会自动给ranger传递probability = TRUE,无需手动设置 - 删除
train()函数中手动添加的probability = TRUE参数 - 确认你的因变量
mort_30为因子类型,否则分类概率输出会失效
修改后可运行代码
set.seed(40) # 先确认因变量是因子,非因子要先转换 data.train$mort_30 <- as.factor(data.train$mort_30) control.data <- trainControl(method="cv", number=10, sampling ="up", verboseIter= TRUE, classProbs = TRUE, # 开启类别概率输出 summaryFunction = twoClassSummary) # 可选,用于直接输出AUC等二分类指标 rfGrid <- expand.grid( .mtry=2:6, .splitrule="gini", .min.node.size=c(250,500)) fit.dataup <- train(mort_30 ~ C_SEX+V_AGE+Hemoglobin+Thrombocytes+Leukocytes+CRP, data=data.train, method="ranger", max.depth=10, num.trees=500, trControl=control.data, tuneGrid=rfGrid, importance="impurity", verbose=TRUE, metric = "ROC") # 可选,搭配twoClassSummary使用,按AUC选最优参数
内容的提问来源于stack exchange,提问作者Lærke Kjær
相关产品推荐
相关产品推荐

