【发布时间】:2017-06-29 07:45:43
【问题描述】:
我正在使用 caret/R 构建预测模型,但遇到了以下问题:
- 尝试执行训练/调整时,我收到此错误:
if (tmps
经过一些研究,似乎在数据中存在缺失值时会发生此错误,而在此示例中并非如此(我确认数据集没有 NA)。但是,我还在某处读到,在插入符号的重新采样例程中可能会引入缺失值,我怀疑这是正在发生的事情。
- 为了解决问题 1,我尝试在插入符号重新采样期间“预处理”数据,方法是删除零方差和接近零方差的预测变量,并使用插入符号 knn 自动输入缺失值估算方法
preProcess(c('zv','nzv','knnImpute')),,但现在我收到以下错误:
错误:预处理需要矩阵或数据帧
不用说我检查并确认输入数据集确实是矩阵,所以我不明白为什么会出现第二个错误。
代码如下:
x.train <- predict(dummyVars(class ~ ., data = train.transformed),train.transformed)
y.train <- as.matrix(select(train.transformed,class))
vbmp.grid <- expand.grid(estimateTheta = c(TRUE,FALSE))
adaptive_trctrl <- trainControl(method = 'adaptive_cv',
number = 10,
repeats = 3,
search = 'random',
adaptive = list(min = 5, alpha = 0.05,
method = "gls", complete = TRUE),
allowParallel = TRUE)
fit.vbmp.01 <- train(
x = (x.train),
y = (y.train),
method = 'vbmpRadial',
trControl = adaptive_trctrl,
preProcess(c('zv','nzv','knnImpute')),
tuneGrid = vbmp.grid)
问题(1)和(2)的代码唯一的区别是,在(1)中,train语句中的预处理行被注释掉了。
总之,
-数据中没有缺失值
-x.train 和 y.train 都是矩阵
-我尝试在trainControl 中使用标准的'repeatedcv' 方法而不是'adaptive_cv',结果完全相同
-忘了说结果class有3个等级
有人对可能出现的问题有任何建议吗?
一如既往,提前致谢
雷耶马尔
【问题讨论】:
-
提供可重现的示例和
sessionInfo的结果将有助于回答您的问题。