使用R语言caret包获取类别概率时遇错误求解决
解决caret+ranger预测概率时的"undefined columns selected"错误
问题核心原因
你碰到的这个错误,关键问题在于使用train()函数时,没有在trainControl()中开启classProbs=TRUE参数。默认情况下这个参数是FALSE,这会让caret默认不配置模型输出类别概率的能力,当你后续调用predict(..., type="prob")时,自然找不到对应的概率列,从而抛出undefined columns selected的错误。
虽然你已经把carb转为了因子类型,但这只是分类模型的基础要求,没有开启概率计算的配置,后续的概率预测还是会失败。
修正后的完整代码
require(caret) # 将目标变量转为因子 mtcars$carb <- as.factor(mtcars$carb) # 构建调参网格 tuneGrid <- expand.grid(mtry = c(10), min.node.size = c(1), splitrule = "extratrees") # 关键:在trainControl中添加classProbs=TRUE rf_model <- train( carb~., data=mtcars, method="ranger", trControl=trainControl(method="none", classProbs = TRUE), # 启用类别概率计算 tuneGrid = tuneGrid ) # 现在可以正常获取每个类别的预测概率了 predict(rf_model, mtcars, type="prob")
额外注意事项
- 当你设置
classProbs=TRUE后,caret会自动把probability=TRUE传递给底层的ranger()函数,让随机森林模型在训练时计算并保存每个样本属于不同类别的概率。 - 如果在实际项目中使用独立的测试集,一定要确保测试集的目标因子水平和训练集完全一致——比如测试集不能出现训练集中没有的
carb取值,否则同样会触发类似的列选择错误。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

