2014-12-13 133 views
3

我是glmnet包中的新成員R,並且想根據glmnet.cv函數發佈的研究論文中的建議指定lambda函數。文檔建議我們可以提供一個遞減的lambdas作爲參數。但是,在文檔中沒有如何執行此操作的示例。我們如何指定一個自定義的lambda序列glmnet

這將是非常感激,如果有人可以建議如何去這樣做。我通過100個奇值(nlambda默認值)的向量的函數?這個矢量的最小值和最大值應該有什麼限制,如果有的話?此外,是他們的事情要記住關於nvarsnobs等,同時指定載體?

在此先感謝。

+0

這個問題可能是更適合http://stats.stackexchange.com。 – 2014-12-13 06:59:33

+0

的問題是如何如此看來適合所以'R'正確編碼的過程。 – eipi10 2014-12-13 18:42:35

回答

0

這是相當容易的,雖然它沒有很好的原始文檔中解釋;)

在我使用COX家庭,但你可以根據你的需要改變它

my_cvglmnet_fit <- cv.glmnet(x=regression_data, y=glmnet_response, family="cox", maxit = 100000) 

那麼下面的你可以繪製由cv.glmnet創建的擬合對象,並且在繪圖中可以輕鬆看到lambda最小的位置。其中一條虛線垂直線是最小的lambda,另一條是1se。

plot(my_cvglmnet_fit) 

以下行可以幫助您看到非零係數及其相應的值:

coef(my_cvglmnet_fit, s = "lambda.min")[which(coef(my_cvglmnet_fit, s = "lambda.min") != 0)] # the non zero coefficients 
colnames(regression_data)[which(coef(my_cvglmnet_fit, s = "lambda.min") != 0)] # The features that are selected 

這裏有一些鏈接,可以幫助:
http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html
http://blog.revolutionanalytics.com/2013/05/hastie-glmnet.html

6

您可以定義網格是這樣的:

grid=10^seq(10,-2,length=100) ##get lambda sequence 
    ridge_mod=glmnet(x,y,alpha=0,lambda=grid) 
相關問題