我可以用
获得套索或脊回归拟合cvfit <- cv.glmnet(X, y)
我知道如何获得lambda的最佳价值
lambda.min <- cvfit$lambda.min
以及如何获得最佳均方误差
mse <- cvfit$cvm[cvfit$lambda == lambda.min]
如何获得目标函数的值?
答案 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)
。