Рішення закритої форми задачі Лассо, коли матриця даних є діагональною


13

ім'я У нас проблема:

minwRd(1ni=1n(w,xiyi)2+2λ||w||1),
з припущенням, що:
i=1nxixiT=diag(σ12,...,σd2).

Чи є в цьому випадку рішення закритої форми?

Я маю це:

(XTX)1=diag(σ12,...,σd2),
і тому я думаю, що відповідь: :
wj=yjmax{0,1λn|yj|},
для yj=i=1nyixijσi2 , але я не впевнений.

Відповіді:


9

Я пройду через @ кардинальне виведення рішення ласо для закритої форми, коли XTX=I , знайдений тут , з незначними модифікаціями.

Я буду припускати, що для всіх . Це виправдано, тому що якщо у нас є то це говорить нам, що й стовпець є всім 0, і я вважаю, що розумно виключати такий випадок. Я дозволю . Зауважте, що це також означає, що є повним рангом і рішення OLS визначено однозначно.σi2>0iσi2=0iXXTX=DXβ^

Я також збираюся змінити вашу позначення, щоб вона краще відповідала цій відповіді, яку я посилаюсь. З цією метою я буду вирішувати

β^λ=argminβRp12||YXβ||22+λ||β||1.

Це ідентично вашій проблемі, але я можу додати тут більше деталей, якщо хочете.

Після виведення @ кардинала, ми маємо вирішити

β^λ=argmin 12(YTY2YTXβ+βTXTXβ)+λ||β||1

=argmin YTXβ+12βTDβ+λ||β||1.

Зауваживши, що рішення OLS є , у нас є β^=(XTX)1XTY=D1XTY

β^λ=argmin β^TDβ+12βTDβ+λ||β||1

=argmin j=1pβ^jβjσj2+σj22βj2+λ|βj|.

Ми оптимізуємо кожен окремо, тому ми можемо вирішити кожен цієї суми окремо. Це означає, що нам потрібно мінімізувати де βjLj

Lj=β^jβjσj2+σj22βj2+λ|βj|.

Після абсолютно аналогічного аргументу на відповідь, ми знаходимо, що

(β^λ)j=sgn(β^j)(|β^j|λσj2)+.

Крім того, тому у нас це β^=D1XTYβ^j=XjTYσj2

(|β^j|λσj2)+=1σj2(|XjTY|λ)+

тож виявляється, що предиктор отримує нуль саме тоді, коли б матриця проекту була ортонормальною, а не просто ортогональною. Отже, ми можемо бачити, що в цьому випадку при вибір змінної не відрізняється, ніж якщо , але фактичні коефіцієнти масштабуються відповідно до дисперсійних дисперсій.XjXTX=DIXTX=Iβ^λ

На завершення я перетворять це рішення на те, що нагадує ваше, а значить, нам потрібно помножити на щось, щоб отримати . Якщо нас є те, що β^β^λ(β^λ)j0

(β^λ)j=sgn(β^j)(|β^j|λσj2)=β^jsgn(β^j)λσj2

=β^j(1λσj2|β^j|)

оскільки .a|a|=sgn(a)

Зауваживши, що саме тоді, коли (β^λ)j=0

|β^j|λσj20|β^j|λσj21λσj2|β^j|1λσj2|β^j|0,

ми бачимо, що ми можемо альтернативно виразити як β^λ

(β^λ)j=β^j(1λσj2|β^j|)+.

Тож це дуже близько до того, що у вас було, але зовсім не так.

Мені завжди подобається, якщо можливо, перевіряти такі виводи проти відомих бібліотек, тож ось приклад в 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)))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.