在插入符包中的训练模型中使用 poly( 函数导致数据帧错误
using poly( function within training model in caret package resulting in dataframe error
这是我的代码 运行:
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:高阶多项式几乎可以保证 over-fitting。我不推荐次数高于 2 的多项式,也许是 3。在这种情况下通常有更好的模型可用。对于 "natural" 个过程,高阶多项式很少见。
我遇到了类似的问题。您是否尝试过使用以下方法?
models <- train(x = poly(Auto$horsepower,i), y = Auto$mpg, data = Auto, trControl=train_control, method='glm')
(我没有测试过这段特定的代码。)
这是我的代码 运行:
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:高阶多项式几乎可以保证 over-fitting。我不推荐次数高于 2 的多项式,也许是 3。在这种情况下通常有更好的模型可用。对于 "natural" 个过程,高阶多项式很少见。
我遇到了类似的问题。您是否尝试过使用以下方法?
models <- train(x = poly(Auto$horsepower,i), y = Auto$mpg, data = Auto, trControl=train_control, method='glm')
(我没有测试过这段特定的代码。)