Mathematical-Statistics

數據矩陣為對角線時 lasso 問題的閉式解

  • November 7, 2016

我們有問題:

假設: 在這種情況下是否有封閉形式的解決方案?

我有這個:

所以我認為答案是:為了,但我不確定。

我將通過@cardinal 推導封閉形式套索解決方案時,在這裡找到,稍作修改。

我會假設對所有人. 這是合理的,因為如果我們有一個那麼這告訴我們第 列都是0,我認為排除這種情況是合理的。我會讓. 請注意,這也意味著是滿秩和 OLS 解是唯一定義的。

我還將修改您的符號以更好地匹配我引用的答案。為此,我將解決

這與您的問題相同,但如果您願意,我可以在此處添加更多詳細信息。

根據@cardinal 的推導,我們有需要解決的問題

注意到 OLS 解決方案是, 我們有

我們正在優化每個分開,所以我們可以分開解決這個總和的每一項。這意味著我們需要最小化在哪裡

在對鏈接答案進行完全類似的論證之後,我們發現

此外,所以我們有

所以事實證明,一個預測器如果設計矩陣是正交的,而不僅僅是正交的,那麼它會在什麼時候被清零。所以我們可以看到在這種情況下, 變量選擇與 if 沒有什麼不同, 但實際係數根據預測變量進行縮放。

最後一點,我將把這個解決方案變成一個類似於你的解決方案,這意味著我們需要乘以通過某事得到. 如果那麼我們就有了

自從.

注意到究竟是什麼時候

我們看到我們可以替代地表達作為

因此,這與您所擁有的非常接近,但並不完全相同。

如果可能的話,我總是喜歡根據知名庫檢查這樣的派生,所以這是 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)))

引用自:https://stats.stackexchange.com/questions/244753

comments powered by Disqus