R语言bag函数自定义fit与聚合函数触发Stopping错误原因排查
R自定义bagging函数报错的原因及修复方案
问题成因
- 缺少必要依赖包:代码中调用的
train函数、rpart.control配置项、rpart建模方法分别来自caret和rpart包,你只加载了datasets和e1071,运行时找不到对应对象直接触发终止错误。 - 自定义fit函数不符合接口规范:caret的
bagControl要求传入的拟合函数必须接收三个核心参数:重采样后的特征矩阵x、标签向量y、重采样权重w,你编写的fit函数未声明w参数,bag调用时传入参数数量不匹配导致报错。 - 你编写的
getmode聚合函数本身逻辑没有问题,不需要修改。
修复后可运行代码
# 加载所有必要依赖 library(datasets) library(caret) library(rpart) library(e1071) # 补全fit函数的w参数,不需要权重的场景可直接忽略该参数 fit <- function(x, y, w, method="rpart", control = rpart.control(maxdepth=1,maxsurrogate = 0)){ train(x,y,method,control=control) } getmode <- function(v) { uniqv <- unique(v) uniqv[which.max(tabulate(match(v, uniqv)))] } bagged <- bag(x = iris[, names(iris) != "Species"], y = iris$Species, B=4, bagControl = bagControl( fit = fit, predict = predict, aggregate = getmode) )
运行后可直接输出bagged查看模型结果。
内容的提问来源于stack exchange,提问作者GDawg
相关产品推荐
相关产品推荐

