Jaki jest najmniejszy

14

Zdefiniuj oszacowanie lasso gdzie i ^ {th} wiersz x_i \ in \ mathbb {R} ^ p macierzy projektowej X \ in \ mathbb {R} ^ {n \ times p} jest wektorem zmiennych towarzyszących dla wyjaśnienia odpowiedzi stochastycznej y_i (dla i = 1, \ kropki n ).

β^λ=argminβRp12nyXβ22+λβ1,
ithxiRpXRn×pyii=1,n

Wiemy, że dla λ1nXTy szacunek lasso β^λ=0 . (Zobacz na przykład zakres parametrów dostrajania Lasso i Ridge'a ). W innej notacji oznacza to, że λmax=1nXTy . Zauważ, że λmax=supβ^λ0λ.Widzimy to wizualnie z następującym obrazem przedstawiającym ścieżkę rozwiązania lasso:

ścieżka rozwiązania lasso

Zauważ, że na daleko po prawej stronie działki, wszystkie współczynniki są równe zero. Dzieje się tak w punkcie λmax opisanym powyżej.

Od tej działce, możemy również zauważyć, że na daleko po lewej stronie, wszystkie współczynnika są niezerowe: jaka jest wartość , w którym każdy element jest początkowo zerowa? To znaczy, co jest równa, jako funkcja i ? Interesuje mnie rozwiązanie w formie zamkniętej. W szczególności nie interesuje mnie rozwiązanie algorytmiczne, takie jak na przykład sugerowanie, że LARS może znaleźć węzeł poprzez obliczenia.beta X X min = minut Jλβ^λXY

λmin=minjs.t.β^j=0λ
Xy

Mimo moich zainteresowań wydaje się, że może nie być dostępna w formie zamkniętej, ponieważ w przeciwnym razie pakiety obliczeniowe lasso prawdopodobnie skorzystałyby z niej podczas określania głębokości parametru strojenia podczas sprawdzania poprawności krzyżowej. W związku z tym interesuje mnie wszystko, co można teoretycznie pokazać na temat i (nadal) szczególnie interesuje się formą zamkniętą. λ m i nλminλmin

użytkownik795305
źródło
Jest to stwierdzone i udowodnione w dokumencie glmnet
Matthew Drury
@MatthewDrury Dziękujemy za udostępnienie tego! Jednak ten artykuł nie wydaje się dzielić tego, co sugerujesz, że oni robią. W szczególności zwróć uwagę, że mój jest ich . λ minλmaxλmin
user795305
Czy na pewno potrzebujesz tagu [tuning-parameter]?
ameba mówi Przywróć Monikę
1
masz rację, zamknięta forma rozwiązania lasso zasadniczo nie istnieje (patrz stats.stackexchange.com/questions/174003/... ). jednak lars przynajmniej mówi ci, co się dzieje i pod jakimi warunkami / w którym momencie możesz dodać / usunąć zmienną. myślę, że coś takiego jest najlepsze, co możesz dostać.
chRrr
1
@chRrr Nie jestem pewien, czy to w pełni uczciwe powiedzieć: wiemy, że dla . Oznacza to, że w skrajnym przypadku rozwiązania 0, mamy formę zamkniętą. Pytam, czy podobnie jest w skrajnym przypadku, gdy oszacowanie lasso jest gęste (tj. Bez zer). Rzeczywiście, nie jestem nawet zainteresowany dokładnymi wpisami --- tylko czy są one zerowe czy nie. X1β^λ=0 beta Xλ1nXtyβ^λ
user795305

Odpowiedzi:

15

Oszacowanie lasso opisane w pytaniu jest odpowiednikiem mnożnika lagrange'a następującego problemu optymalizacji:

minimize f(β) subject to g(β)t

f(β)=12n||yXβ||22g(β)=||β||1

Ta optymalizacja ma geometryczną reprezentację znalezienia punktu styku między sferą wielowymiarową a polytopem (rozpiętym przez wektory X). Powierzchnia polytopu reprezentuje . Kwadrat promienia kuli reprezentuje funkcję i jest minimalizowany, gdy powierzchnie stykają się.g(β)f(β)

Poniższe obrazy przedstawiają objaśnienie graficzne. W obrazach wykorzystano następujący prosty problem z wektorami o długości 3 (dla uproszczenia, aby móc wykonać rysunek):

[y1y2y3]=[1.41.840.32]=β1[0.80.60]+β2[00.60.8]+β3[0.60.640.48]+[ϵ1ϵ2ϵ3]
a my minimalizujemy z ograniczeniemϵ12+ϵ22+ϵ32abs(β1)+abs(β2)+abs(β3)t

Obrazy pokazują:

  • Czerwona powierzchnia przedstawia ograniczenie, polytop o rozpiętości X.
  • Zielona powierzchnia przedstawia zminimalizowaną powierzchnię - kulę.
  • Niebieska linia pokazuje ścieżkę lasso, rozwiązania, które znajdujemy, gdy zmieniamy lub .tλ
  • Zielony wektor pokazuje rozwiązanie OLS (które wybrano jako lub .y^β1=β2=β3=1 y =x1+x2+x3y^=x1+x2+x3
  • Trzy czarne wektory to , , i .x1=(0.8,0.6,0)x2=(0,0.6,0.8)x3=(0.6,0.64,0.48)

Wyświetlamy trzy obrazy:

  1. Na pierwszym zdjęciu tylko punkt polytopu dotyka kuli . Ten obraz pokazuje bardzo dobrze, dlaczego rozwiązanie lasso nie jest tylko wielokrotnością rozwiązania OLS. Kierunek rozwiązania OLS zwiększa sumy . W tym przypadku tylko pojedynczy jest niezerowy.|β|1βi
  2. Na drugim zdjęciu grzbiet polytopa dotyka kuli (w wyższych wymiarach otrzymujemy analogi o wyższych wymiarach). W tym przypadku wiele jest niezerowych.βi
  3. Na trzecim zdjęciu aspekt polytopu dotyka kuli . W tym przypadku wszystkie są niezeroweβi .

Zakres lub dla którego mamy pierwszy i trzeci przypadek, można łatwo obliczyć dzięki ich prostej reprezentacji geometrycznej.tλ

Przypadek 1: Tylko jeden niezerowyβi

Niezerowa to ta, dla której skojarzony wektor ma najwyższą bezwzględną wartość kowariancji z (jest to punkt paralallelotopu najbliższy rozwiązaniu OLS). Możemy obliczyć mnożnik Lagrange'a poniżej którego mamy co najmniej niezerową , biorąc pochodną z (znak w zależności od tego, czy zwiększymy w kierunku ujemnym czy dodatnim):βixiy^λmaxβ±βiβi

(12n||yXβ||22λ||β||1)±βi=0

który prowadzi do

λmax=(12n(||yXβ||22±βi)(||β||1)±βi)=±(12n||yXβ||22βi=±1nxiy

co równa się wspomnianej w komentarzach.||XTy||

gdzie powinniśmy zauważyć, że jest to prawdą tylko w szczególnym przypadku, w którym czubek polytopu dotyka kuli ( więc nie jest to ogólne rozwiązanie , chociaż uogólnienie jest proste).

Przypadek 3: Wszystkie są niezerowe.βi

W tym przypadku aspekt polytopu dotyka kuli. Wtedy kierunek zmiany ścieżki lassa jest normalny do powierzchni konkretnego aspektu.

Polytop ma wiele aspektów, z dodatnim i ujemnym udziałem . W przypadku ostatniego kroku lasso, gdy rozwiązanie lasso jest zbliżone do rozwiązania ols, wówczas wkład musi być określony znakiem rozwiązania OLS. Normalna ścianka może być zdefiniowana przez przyjęcie gradientu funkcji , wartości sumy beta w punkcie , która wynosi:xixi||β(r)||1r

n=r(||β(r)||1)=r(sign(β^)(XTX)1XTr)=sign(β^)(XTX)1XT

a równoważna zmiana wersji beta dla tego kierunku to:

βlast=(XTX)1Xn=(XTX)1XT[sign(β^)(XTX)1XT]

który po niektórych sztuczkach algebraicznych z przesunięciem transpozycji ( ) i rozkładem nawiasów staje sięATBT=[BA]T

βlast=(XTX)1sign(β^)

normalizujemy ten kierunek:

βlast,normalized=βlastβlastsign(β^)

Aby znaleźć poniżej której wszystkie współczynniki są niezerowe. Musimy tylko przeliczyć z rozwiązania OLS z powrotem do punktu, w którym jeden ze współczynników wynosi zero,λmin

d=min(β^βlast,normalized)with the condition that β^βlast,normalized>0

, i w tym momencie oceniamy pochodną (jak poprzednio, gdy obliczamy ). Używamy tego dla funkcji kwadratowej mamy :λmaxq(x)=2q(1)x

λmin=dn||Xβlast,normalized||22

Zdjęcia

punkt dotyka kuli, pojedynczy jest niezerowy:βi

pierwszy krok ścieżki lasso

grzbiet (lub różny w wielu wymiarach) dotyka kuli, wiele jest niezerowych:βi

środek ścieżki lasso

aspekt dotyka kuli, wszystkie są niezerowe:βi

ostatni krok ścieżki lasso

Przykład kodu:

library(lars)    
data(diabetes)
y <- diabetes$y - mean(diabetes$y)
x <- diabetes$x

# models
lmc <- coef(lm(y~0+x))
modl <- lars(diabetes$x, diabetes$y, type="lasso")

# matrix equation
d_x <- matrix(rep(x[,1],9),length(x[,1])) %*% diag(sign(lmc[-c(1)]/lmc[1]))
x_c = x[,-1]-d_x
y_c = -x[,1]

# solving equation
cof <- coefficients(lm(y_c~0+x_c))
cof <- c(1-sum(cof*sign(lmc[-c(1)]/lmc[1])),cof)

# alternatively the last direction of change in coefficients is found by:
solve(t(x) %*% x) %*% sign(lmc)

# solution by lars package
cof_m <-(coefficients(modl)[13,]-coefficients(modl)[12,])

# last step
dist <- x %*% (cof/sum(cof*sign(lmc[])))
#dist_m <- x %*% (cof_m/sum(cof_m*sign(lmc[]))) #for comparison

# calculate back to zero
shrinking_set <- which(-lmc[]/cof>0)  #only the positive values
step_last <- min((-lmc/cof)[shrinking_set])

d_err_d_beta <- step_last*sum(dist^2)

# compare
modl[4] #all computed lambda
d_err_d_beta  # lambda last change
max(t(x) %*% y) # lambda first change
enter code here

Uwaga: najważniejsze są te trzy ostatnie linie

> modl[4]            # all computed lambda by algorithm
$lambda
 [1] 949.435260 889.315991 452.900969 316.074053 130.130851  88.782430  68.965221  19.981255   5.477473   5.089179
[11]   2.182250   1.310435

> d_err_d_beta       # lambda last change by calculating only last step
    xhdl 
1.310435 
> max(t(x) %*% y)    # lambda first change by max(x^T y)
[1] 949.4353

Napisane przez StackExchangeStrike

Sextus Empiricus
źródło
Dziękujemy za uwzględnienie zmian! Jak dotąd czytając, utknąłem tuż obok podrozdziału „przypadek 1”. Wynik dla wyprowadzony tam jest niepoprawny, ponieważ nie zawiera wartości bezwzględnej ani maksymalnej. Wiemy ponadto, że istnieje błąd, ponieważ w derywacji występuje błąd znaku, miejsce, w którym błędnie zakłada się różniczkowość, „arbitralny wybór” do rozróżnienia w odniesieniu do, oraz niepoprawnie oszacowana pochodna. Szczerze mówiąc, nie ma jednego poprawnego znaku „ ”. λmaxi=
user795305
Poprawiłem to za pomocą znaku plus minus. Zmiana wersji beta może być dodatnia lub ujemna. W odniesieniu do maksymalnego i „arbitralnego wyboru” ... ”, dla którego powiązany wektor ma najwyższą kowariancję z xiy^
Sextus Empiricus
Dziękuję za aktualizację! Nadal jednak występują problemy. Na przykład,βiyXβ22 jest oceniany nieprawidłowo.
user795305
Jeśli to korelacja ta wchodzi w równanie, ponieważ: jeśli s = 0, to tylko zmiana stycznej na zmienia długość wektoraβ=0βi||yXβ||22
=||yXβ||2βi2||yXβ||2
=||ysxi||2s2||yXβ||2
=2cor(xi,y)||xi||2||y||2
=2xiy
sxiyysxi
Sextus Empiricus
Ach, okej, więc w twoim sporze jest granica! (Używasz zarównoβ=0 i tego, że współczynnik jest niezerowy.) Ponadto druga równość w linii z jest myląca, ponieważ znak może się zmienić z powodu różnicowania wartości bezwzględnej. λmax
user795305