Создание одного обучающего/тестового набора, который работает с regsubet и регрессией гребня/лассо.

avatar
The Statistician Magician
8 апреля 2018 в 06:33
384
0
1

Я следую Упражнению 6.9 по этой ссылке: https://notendur.hi.is/map27/ISLR/ISLRChapter6.html

В частности, инструктор создает обучающие и тестовые наборы данных следующим образом:

set.seed(1)
trainRows = sample(dim(College)[1], ceiling(dim(College)[1]/2))
train = is.element(c(1:dim(College)[1]),trainRows)
test = !train

Теперь объекты "train" и "test" являются логическими операторами. Теперь эти обучающие и тестовые объекты работают для lm, ridge и lasso.

#Linear Regression
fit = lm(Apps~.  data=College[train, ])
fit.pred = predict(fit, College[test, ])
mean((College[test, ][, "Apps"] - fit.pred)^2)
#Ridge Regression
trainMat = model.matrix(Apps~.  data=College[train, ])
testMat = model.matrix(Apps~.  data=College[test, ])
grid = 10 ^ seq(10, -10, length=100)
ridgeModel = cv.glmnet(trainMat, College[train, ][, "Apps"], alpha=0, 
lambda=grid)
optLambda = ridgeModel$lambda.min
optLambda
#Ridge MSE
ridgePred = predict(ridgeModel, newx=testMat, s=optLambda)
mean((College[test, ][, "Apps"] - ridgePred)^2)
#Lasso Model
lassoModel = cv.glmnet(trainMat, College[train, ][, "Apps"], alpha=1, 
lambda=grid)
optLambda = lassoModel$lambda.min
optLambda
#Test MSE - Lasso
lassoPred = predict(lassoModel, newx=testMat, s=optLambda)
mean((College[test, ][, "Apps"] - lassoPred)^2)

Однако, когда я пытаюсь использовать эти объекты с функцией regsubsets, я получаю следующее сообщение:

regfit.full=regsubsets(Apps ~ . data = train)

Error in terms.formula(formula, data = data) : '.' in formula and no 'data' argument

Однако, когда я создаю обучающий/тестовый объект следующим образом (который не работает для регрессий ridge и lasso с использованием пакета glmnet), он работает с regsubset

index = sample(1:nrow(College), size=0.5*nrow(College))
train_2 = College[index,]
test_2  = College[-index,]

Теперь у меня есть два обучающих и тестовых набора, что явно не идеально. Есть ли способ создать только один тренировочный/тестовый набор, который может работать как с regsubsets, так и с ridge/lasso?

Спасибо

Источник
r2evans
8 апреля 2018 в 06:46
0

Что такое regsubsets? (Возможно из пакета ISLR?) Как ты это называешь? Как вы вызываете другие функции, ridge и lasso? Поймите, что мы не видим вашу консоль, не знакомы с вашей работой/учебой и имеем здесь только ваши слова, которые помогут нам помочь вам.

The Statistician Magician
8 апреля 2018 в 06:50
0

Привет, сейчас внесу правки в свои сообщения.

r2evans
8 апреля 2018 в 07:43
1

Везде вы ссылаетесь College[train,], почему не regsubsets(Apps ~ . data = College[train,])?

Benjamin Christoffersen
8 апреля 2018 в 18:28
0

Я согласен с @r2evans. Кажется, что train — это логический вектор, а не data.frame. Это должно завершиться ошибкой, если train является логическим вектором, если вы, например. передайте его на glm или lm.

Ответы (0)