如何从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