R Начинающий: MSE возвращается NaN - PullRequest
0 голосов
/ 29 октября 2018

Я где-то закодировал это неправильно, потому что я получил NaN для MSE. Но я не могу на всю жизнь понять, где я ошибся. Все в первой части кода было дано мне как истинное (кроме n, H, j и dtrain). {m = 50 - размер тестового набора данных}. Затем мне сказали, что тренировочные данные должны иметь размер n = 50; и чтобы соответствовать линейным моделям и найти MSE для OLS, Ridge, & Lasso.

> library(glmnet)

> library(ISLR)

> set.seed(2018)

>m = 50

>**n = 50**

>p = 45

>rho = 0.7;

>Sigma = matrix(rho, p, p);

>diag(Sigma) = 1;

>X= MASS::mvrnorm(m, rep(0, p), Sigma);

>**H= MASS::mvrnorm(n, rep(0,p), Sigma);**

>beta0 = 10;

>num_nonzero = 45;

>beta = c(rep(1, num_nonzero), rep(0, p-num_nonzero));

>y = beta0+X%*%beta+rnorm(m);

>**j = beta0+H%*%beta+rnorm(n);**

>dtest = data.frame(y, X)

>**dtrain = data.frame(j, H)**

МНК

fit.lm <- lm(j ~ ., data = dtrain)

pred.lm <- predict(fit.lm, dtest)

mean((pred.lm - dtest$j)^2)

РИДЖ

train.mat <- model.matrix(j ~ ., data = dtrain)

test.mat <- model.matrix(y ~ ., data = dtest)

grid <- 10 ^ seq(10, -2, length = 100)

fit.ridge <- glmnet(train.mat, dtrain$j, alpha = 0, lambda = grid, thresh = 1e-12)

cv.ridge <- cv.glmnet(train.mat, dtrain$j, alpha = 0, lambda = grid, thresh = 1e-12)

bestlam.ridge <- cv.ridge$lambda.min

bestlam.ridge

pred.ridge <- predict(fit.ridge, s = bestlam.ridge, newx = test.mat)

mean((pred.ridge - dtest$j)^2)

ЛАССО

fit.lasso <- glmnet(train.mat, dtrain$j, alpha = 1, lambda = grid, thresh = 1e-12)

cv.lasso <- cv.glmnet(train.mat, dtrain$j, alpha = 1, lambda = grid, thresh = 1e-12)

bestlam.lasso <- cv.lasso$lambda.min

bestlam.lasso

pred.lasso <- predict(fit.lasso, s = bestlam.lasso, newx = test.mat)

mean((pred.lasso - dtest$j)^2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...