Câu trả lời:
Tôi sẽ đi qua dẫn xuất của @ cardinal về giải pháp lasso dạng đóng khi , được tìm thấy ở đây , với những sửa đổi nhỏ.
Tôi sẽ giả sử rằng cho tất cả . Điều này là hợp lý bởi vì nếu chúng ta có thì điều này cho chúng ta biết rằng cột thứ của là 0 và tôi nghĩ việc loại trừ trường hợp đó là hợp lý. Tôi sẽ cho . Lưu ý rằng điều này cũng có nghĩa là là thứ hạng đầy đủ và giải pháp OLS được xác định duy nhất.
Tôi cũng sẽ sửa đổi ký hiệu của bạn để phù hợp hơn với câu trả lời mà tôi đang tham khảo. Cuối cùng, tôi sẽ giải quyết
Điều này giống hệt với vấn đề của bạn nhưng tôi có thể thêm chi tiết ở đây nếu bạn muốn.
Theo dẫn xuất của @ cardinal, chúng ta cần giải quyết
Lưu ý rằng giải pháp OLS là , chúng tôi có β bước sóng=argmin - β TDβ+1
Chúng tôi đang tối ưu hóa riêng biệt cho từng , vì vậy chúng tôi có thể giải quyết riêng từng điều khoản của khoản tiền này. Điều này có nghĩa là chúng ta cần giảm thiểu trong đó
Theo một đối số hoàn toàn không phù hợp với câu trả lời được liên kết, chúng tôi thấy rằng
Hơn nữa, vì vậy chúng tôi có
Vì vậy, nó chỉ ra rằng một dự đoán sẽ bị loại bỏ chính xác khi nào nếu ma trận thiết kế là trực giao, không chỉ trực giao. Vì vậy, chúng ta có thể thấy rằng trong trường hợp này với , lựa chọn biến không khác so với nếu , nhưng các hệ số thực tế được chia tỷ lệ theo phương sai dự đoán.
Như một lưu ý cuối cùng, tôi sẽ biến giải pháp này thành một giải pháp tương tự như của bạn, điều đó có nghĩa là chúng ta cần nhân với thứ gì đó để có được . Nếu thì chúng ta có
kể từ .
Ghi chú điều đó chính xác khi
chúng tôi thấy rằng chúng tôi có thể thay thế biểu hiện là
Vì vậy, điều này rất gần với những gì bạn đã có nhưng không hoàn toàn giống nhau.
Tôi luôn muốn kiểm tra các dẫn xuất như thế này đối với các thư viện nổi tiếng nếu có thể, vì vậy đây là một ví dụ trong R:
## generating `x`
set.seed(1)
n = 1000
p = 5
sigma2s = 1:p
x = svd(matrix(rnorm(n * p), n, p))$u %*% diag(sqrt(sigma2s))
## check this
# t(x) %*% x
## generating `y`
betas = 1:p
y = x %*% betas + rnorm(nrow(x), 0, .5)
lambda = 2
## using a well-known library to fit lasso
library(penalized)
penalized(y, x, lambda1 = lambda)@penalized
## using closed form solution
betahat = lm(y ~ x - 1)$coef
ifelse(betahat > 0, 1, -1) * sapply(abs(betahat) - lambda / sigma2s, function(v) max(c(0, v)))