r - 在插入符包中的训练模型中使用 poly( 函数导致数据帧错误

标签 r r-caret

这是我正在运行的代码:

library(caret)
library(ISLR)
data('Auto')
cverror <- c()
for(i in 1:5){
  train_control <- trainControl(method='LOOCV')
  models <- train(mpg~poly(horsepower,i), data = Auto, trControl=train_control, method='glm')
  cverror[i] <- (models$results$RMSE)^2
}

cverror

我想要完成的是使用循环计算不同多项式级别的 MSE(均方误差),这样我就不必逐行编码。我收到的错误消息是:

 Error in `[.data.frame`(data, , all.vars(Terms), drop = FALSE) : 
  undefined columns selected 

为什么我会收到此错误?我的同学说这段代码在他们的机器上运行良好,但在我的个人或工作计算机上不起作用。我安装了最新的 RStudio 和 R 版本,所有软件包都是最新的。

下面的代码行工作得很好:

train(mpg~poly(horsepower,2), data = Auto, trControl=train_control, method='glm')

这与 ISLR 文本第 192/193 页上的教程有关(我正在对其进行扩展)。

最佳答案

如果i <- 2其值不代入公式中。公式字面上是mpg ~ poly(horsepower, i) .

试试这个:

library(caret)
library(ISLR)
data('Auto')
cverror <- numeric(5)
for(i in 1:5){
  train_control <- trainControl(method='LOOCV')
  f <- bquote(mpg ~ poly(horsepower, .(i)))
  models <- train(as.formula(f), data = Auto, trControl=train_control, method='glm')
  cverror[i] <- (models$results$RMSE)^2
}

cverror
#[1] 24.23151 19.24821 19.33498 19.42443 19.03321

PS:更高次多项式几乎可以保证过度拟合。我不建议使用次数高于 2(也许是 3)的多项式。在这种情况下通常有更好的模型可用。对于“自然”过程来说,更高阶的多项式很少见。

关于r - 在插入符包中的训练模型中使用 poly( 函数导致数据帧错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41742777/

相关文章:

r - Knitr - 在主文档中生成图片,在附录中呈现

r - 在 caret::train 函数中使用 bagImpute 预处理时出现缺失值错误

r - TrainControl 的插入符错误,方法 ="repeatedCV"

r - 使用插入符号和 gbm 方法进行多类分类

r - `caret` 中的训练错误率

r - 使用 rhino R 包的 yarn 依赖性问题

r - 每个点而不是单个数据点的散点图汇总统计数据(例如总和或平均值)

r - 更改顶点边框的线类型

r - 对象 'pkgInfo' 未找到,r

r - 为什么并行包比只使用apply 慢?