Jak obliczyć parametr regularyzacji w regresji grzbietu przy danych stopniach swobody i macierzy wejściowej?

11

Niech A będzie macierzą n×p zmiennych niezależnych, a B będzie odpowiadającą macierzą wartości zależnych. Regresję kalenicy, że określenie parametrów tak, że: . Teraz pozwól [usv] = svd (A) i ukośny wpis „s”. definiujemy stopnie swobody (df) = . Regresja grzbietu zmniejsza współczynniki składników o niskiej wariancji, a zatem parametr kontroluje stopnie swobody, więc dlan×1λβ=(ZAT.ZA+λja)-1ZAT.breja=jathja=1n(reja)2)(reja)2)+λλλ=0, co ma miejsce w przypadku regresji normalnej, df = n, a zatem zostaną uwzględnione wszystkie zmienne niezależne. Problem, przed którym stoję, polega na znalezieniu wartości „df” i macierzy „s”. Próbowałem zmienić powyższe równanie, ale nie otrzymałem rozwiązania w formie zamkniętej. Podaj wszelkie pomocne wskazówki.λ

Amit
źródło
Cóż, potrzebuję czasu, aby odpowiedzieć na to pytanie (prawdopodobnie inni szybciej udzielą ci pomocy), ale większość wglądów można wziąć ze stat.lsa.umich.edu/~kshedden/Courses/Stat600/Notes/... A co to jest w definicji stopnie swobody, ponieważ jakoś tęsknię za . kλ
Dmitrij Celov,
@Dmitrij: Dzięki za odpowiedź, zaktualizowałem pytania i zastąpiłem „k” λ
Amit
Cześć Amit, skąd możesz wiedzieć, jakie są stopnie swobody przed obliczeniem parametru regularyzacji?
Baz

Odpowiedzi:

9

Byłby do tego odpowiedni algorytm Newton-Raphson / Fisher-score / Taylor-series.

Masz równanie do rozwiązania dla h ( λ ) = p i = 1 d 2 iλ z pochodną h

h(λ)=ja=1preja2)reja2)+λ-refa=0
Otrzymujesz: h(λ)h(λ(0))+(λ-λ(0))h
hλ=-ja=1preja2)(reja2)+λ)2)
h(λ)h(λ(0))+(λ-λ(0))hλ|λ=λ(0)=0

przearanżowanie dla otrzymujesz: λ = λ ( 0 ) - [ godzλ

λ=λ(0)-[hλ|λ=λ(0)]-1h(λ(0))
reja2)=1λ(0)=p-refarefa

λ(jot+1)=λ(jot)+[ja=1preja2)(reja2)+λ(jot))2)]-1[ja=1preja2)reja2)+λ(jot)-refa]

λλ

prawdopodobieństwo prawdopodobieństwa
źródło
reja2)=1
λ(0)λ(0)=0
(+1) Podałbym to samo rozwiązanie numeryczne.
Dmitrij Celov,
6

Oto mały kod Matlab oparty na formule udowodnionej logiką prawdopodobieństwa:

function [lamda] = calculate_labda(Xnormalised,df)
    [n,p] = size(Xnormalised);   

    %Finding SVD of data
    [u s v]=svd(Xnormalised);
    Di=diag(s);
    Dsq=Di.^2;

    %Newton-rapson method to solve for lamda
    lamdaPrev=(p-df)/df;
    lamdaCur=Inf;%random large value
    diff=lamdaCur-lamdaPrev;   
    threshold=eps(class(XstdArray));    
    while (diff>threshold)          
        numerator=(sum(Dsq ./ (Dsq+lamdaPrev))-df);        
        denominator=sum(Dsq./((Dsq+lamdaPrev).^2));        
        lamdaCur=lamdaPrev+(numerator/denominator);        
        diff=lamdaCur-lamdaPrev;        
        lamdaPrev=lamdaCur;        
    end
    lamda=lamdaCur;
end
Amit
źródło
2
Dalej drużyno!
probabilityislogic
Próba redaktora dowodzi, że warunek while powinien być while ( abs(diff)>threshold ).
gung - Przywróć Monikę
while( abs(diff) > threshold )-1001mi-16