如何从R中的glmnet得到目标函数的值?

如何从R中的glmnet得到目标函数的值?,r,glmnet,R,Glmnet,我可以获得套索或脊回归拟合 cvfit <- cv.glmnet(X, y) cvfit我不确定glmnet是否提供了目标函数的值,但我们自己计算很容易。这里有一个小套索的例子 library(glmnet) x <- as.matrix(mtcars[c("hp", "cyl", "wt", "gear")]) y <- mtcars$mpg cvfit = cv.glmnet(x, y, alpha = 1) # alpha = 1 for LASSO 岭回归类似

我可以获得套索或脊回归拟合

cvfit <- cv.glmnet(X, y)

cvfit我不确定
glmnet
是否提供了目标函数的值,但我们自己计算很容易。这里有一个小套索的例子

library(glmnet)

x <- as.matrix(mtcars[c("hp", "cyl", "wt", "gear")])
y <- mtcars$mpg

cvfit = cv.glmnet(x, y, alpha = 1)  # alpha = 1 for LASSO

岭回归类似:使用
alpha=0
代替
sum(abs(coefs[-1]))
替换为
sum(coefs[-1]^2)

MSE=线性回归的目标函数。是的,适用于普通线性回归,但不适用于套索或岭回归。例如,在套索中,目标函数是MSE+lambda*| A |,其中A是系数。@rhombidodecaderon你对目标函数的看法是正确的。套索确实最小化了目标函数“剩余平方和+λ*|系数|”。
cvfit$lambda[cvfit$lambda==cvfit$lambda.min]
只是
cvfit$lambda.min
顺便说一下:-)谢谢,看起来不错。我想知道:我认为glmnet标准化了回归过程中的所有变量。在计算目标函数时,重新标准化它们是否重要?
mse <- cvfit$cvm[cvfit$lambda == lambda.min]
library(glmnet)

x <- as.matrix(mtcars[c("hp", "cyl", "wt", "gear")])
y <- mtcars$mpg

cvfit = cv.glmnet(x, y, alpha = 1)  # alpha = 1 for LASSO
coefs <- coef(cvfit, s = "lambda.min")
objective <- sum((y - coefs[1] - (x %*% coefs[-1]))^2) + 
             cvfit$lambda.min * sum(abs(coefs[-1]))
objective