Tôi đang sử dụng đoạn mã sau với glmnet:Bắt hệ số glmnet tại 'tốt nhất' lambda
> library(glmnet)
> fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1])
> plot(fit, xvar='lambda')
Tuy nhiên, tôi muốn in ra các hệ số lúc tốt nhất Lambda, giống như nó được thực hiện ở sườn núi hồi quy. Tôi thấy cấu trúc phù hợp sau đây:
> str(fit)
List of 12
$ a0 : Named num [1:79] 20.1 21.6 23.2 24.7 26 ...
..- attr(*, "names")= chr [1:79] "s0" "s1" "s2" "s3" ...
$ beta :Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
.. [email protected] i : int [1:561] 0 4 0 4 0 4 0 4 0 4 ...
.. [email protected] p : int [1:80] 0 0 2 4 6 8 10 12 14 16 ...
.. [email protected] Dim : int [1:2] 10 79
.. [email protected] Dimnames:List of 2
.. .. ..$ : chr [1:10] "cyl" "disp" "hp" "drat" ...
.. .. ..$ : chr [1:79] "s0" "s1" "s2" "s3" ...
.. [email protected] x : num [1:561] -0.0119 -0.4578 -0.1448 -0.7006 -0.2659 ...
.. [email protected] factors : list()
$ df : int [1:79] 0 2 2 2 2 2 2 2 2 3 ...
$ dim : int [1:2] 10 79
$ lambda : num [1:79] 5.15 4.69 4.27 3.89 3.55 ...
$ dev.ratio: num [1:79] 0 0.129 0.248 0.347 0.429 ...
$ nulldev : num 1126
$ npasses : int 1226
$ jerr : int 0
$ offset : logi FALSE
$ call : language glmnet(x = as.matrix(mtcars[-1]), y = mtcars[, 1])
$ nobs : int 32
- attr(*, "class")= chr [1:2] "elnet" "glmnet"
Nhưng tôi không thể có được Lambda tốt nhất và các hệ số tương ứng. Cảm ơn bạn đã giúp đỡ.
Bạn đang sử dụng trình tự lambda mặc định, được tạo bằng cách sử dụng 'nlambda, lambda.min.ratio'. Lời khuyên mà tôi luôn nghe là vượt qua chuỗi lambda của riêng bạn, ví dụ: 'lambda = 10^seq (10, -15,1/3)' hoặc tương tự. – smci
@smci, bạn có lỗi đánh máy trong ví dụ của mình. Dấu hiệu phải có trên tham số từ ví dụ: 'lambda = 10^seq (từ = -10, đến = 15, bởi = 1/3)' – Faris