如何从R中的glmnet获取目标函数的值?

时间:2015-09-26 18:55:22

标签: r glmnet

我可以用

获得套索或脊回归拟合
cvfit <- cv.glmnet(X, y)

我知道如何获得lambda的最佳价值

lambda.min <- cvfit$lambda.min

以及如何获得最佳均方误差

mse <- cvfit$cvm[cvfit$lambda == lambda.min]

如何获得目标函数的值?

1 个答案:

答案 0 :(得分:1)

我不确定glmnet是否可以访问目标函数的值,但很容易自己计算。这是LASSO的一个小例子。

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

我们可以使用coef来获取模型的系数,然后根据其定义计算目标函数值。

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

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