R caret包调优C5.0时将minCases加入tuneGrid报错如何解决?
错误原因及解决方案
核心报错原因:自定义模型参数表处理异常
你在GetC5Info函数中修改C5.0的模型参数配置时,先将parameter、label两列转为了factor类型,后续直接拼接字符向量时,新参数名无法匹配已有的factor水平,直接被识别为NA,这就是报错信息里三个NA列的来源。
将GetC5Info函数中更新参数表的代码替换为如下内容即可修复该问题:
# 删除原有的参数表修改代码,替换为以下内容 c5ModelInfo$parameters <- rbind( c5ModelInfo$parameters, data.frame( parameter = "splits", class = "numeric", label = "Splits" ) )
直接拼接结构化数据框会自动兼容factor水平,不需要手动修改factor配置。
其他需要修正的问题
- 调参网格的参数设置错误
你构造grida时给.winnow赋值为字符串"FALSE",但模型要求传入逻辑值,同时自定义模型的调参名不需要加.前缀,修改为:
grida <- expand.grid( winnow = FALSE, trials = c(1,5,10,15,20), model = "tree", splits = c(2,5,10,15,20,25,50,100) )
- 缺失依赖包加载
你在C5CustomLoop函数中用到了plyr包的ddply工具,需要在代码开头引入依赖:
library(plyr)
以上三处修改完成后,模型即可正常训练。
内容的提问来源于stack exchange,提问作者Lars
相关产品推荐
相关产品推荐

