【发布时间】:2021-05-28 23:34:10
【问题描述】:
我在 R 中使用 Hitters 数据集。目前,我拟合了一个线性回归,从所有其他协变量中预测薪水,样本量从 20 到 75 不等,并且我计算了平均测试/训练误差:
data("Hitters", package = 'ISLR')
Hitters = na.omit(Hitters)
set.seed(1)
train.idx = sample(1:nrow(Hitters), 75,replace=FALSE)
train = Hitters[train.idx,-20]
test = Hitters[-train.idx,-20]
errs <- rep(NA,56)
for (ii in 20:75){
train.idx = sample(1:nrow(Hitters), ii,replace=FALSE)
train = Hitters[train.idx,-20]
test = Hitters[-train.idx,-20]
train.lm <- lm(Salary ~., - Salary, data = train)
train.pred <- predict(train.lm, train)
test.pred <- predict(train.lm, data = test)
errs[ii-19] <- mean((test.pred - train$Salary)^2)
}
errs
现在,我尝试使用我之前创建的样本,正则化参数为 20,对 Ridge 回归做同样的事情。我尝试过:
x_train = model.matrix(Salary~., train)[,-1]
x_test = model.matrix(Salary~., test)[,-1]
y_train = train$Salary
y_test = test$Salary
#cv.out = cv.glmnet(x_train,y_train, alpha = 0)
#lam = cv.out$lambda.min
errs.train <- rep(NA, 56)
for (ii in 20:75){
ridge_mod = glmnet(x_train, y_train, alpha=0, lambda = 20)
ridge_pred = predict(ridge_mod, newx = x_test)
#errs.test[ii] <- mean((ridge_pred - y_test)^2)
errs.train[ii-19] <- mean((ridge_pred - y_train)^2)
}
errs.train
但是所有的错误都是一样的。我该如何解决这个问题?
【问题讨论】:
-
如果您查看第一个 sn-p,
sample正在for循环中使用。在您的第二个 sn-p 中,没有采样,因此您不会对每个循环中的数据进行任何更改。
标签: r regression prediction training-data glmnet