0
我可以得到一個套索或脊迴歸擬合與如何從R中的glmnet獲取目標函數的值?
cvfit <- cv.glmnet(X, y)
我知道如何讓拉姆達出
lambda.min <- cvfit$lambda.min
和最佳的價值如何獲得最佳的均方誤差出來
mse <- cvfit$cvm[cvfit$lambda == lambda.min]
如何獲得目標函數的值?
我可以得到一個套索或脊迴歸擬合與如何從R中的glmnet獲取目標函數的值?
cvfit <- cv.glmnet(X, y)
我知道如何讓拉姆達出
lambda.min <- cvfit$lambda.min
和最佳的價值如何獲得最佳的均方誤差出來
mse <- cvfit$cvm[cvfit$lambda == lambda.min]
如何獲得目標函數的值?
我不確定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(coefs[-1]^2)
取代sum(abs(coefs[-1]))
。
謝謝,看起來不錯。我想知道:我認爲glmnet在迴歸期間將所有變量標準化。在計算目標函數時重新標準化它們很重要嗎? – rhombidodecahedron
MSE =線性迴歸的目標函數。 –
是的,用於普通線性迴歸,但不適用於套索或嶺迴歸。以套索爲例,目標函數是MSE + lambda * | A |其中A是係數。 – rhombidodecahedron
還是我誤會了? – rhombidodecahedron