2015-09-26 107 views
0

我可以得到一個套索或脊迴歸擬合與如何從R中的glmnet獲取目標函數的值?

cvfit <- cv.glmnet(X, y) 

我知道如何讓拉姆達出

lambda.min <- cvfit$lambda.min 

和最佳的價值如何獲得最佳的均方誤差出來

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

如何獲得目標函數的值?

+1

MSE =線性迴歸的目標函數。 –

+1

是的,用於普通線性迴歸,但不適用於套索或嶺迴歸。以套索爲例,目標函數是MSE + lambda * | A |其中A是係數。 – rhombidodecahedron

+0

還是我誤會了? – rhombidodecahedron

回答

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(coefs[-1]^2)取代sum(abs(coefs[-1]))

+0

謝謝,看起來不錯。我想知道:我認爲glmnet在迴歸期間將所有變量標準化。在計算目標函數時重新標準化它們很重要嗎? – rhombidodecahedron