Wie berechnet man den Regularisierungsparameter in der Gratregression bei gegebenen Freiheitsgraden und Eingabematrix?

11

Sei A die Matrix unabhängiger Variablen und B die entsprechende Matrix der abhängigen Werte. In ridge regression, definieren wir einen Parameter so dass: . Nun sei [usv] = svd (A) und diagonaler Eintrag von 's'. wir definieren Freiheitsgrade (df) = . Die Ridge-Regression verkleinert die Koeffizienten von Komponenten mit geringer Varianz, und daher steuert der Parameter die Freiheitsgrade. Also fürn×pn×1; & λβ=(ATA+λI)1ATBdi=ithi=1n(di)2(di)2+λλλλ=0Dies ist bei normaler Regression der Fall, df = n, und daher werden alle unabhängigen Variablen berücksichtigt. Das Problem, mit dem ich konfrontiert bin, besteht darin, den Wert von bei 'df' und der Matrix 's' zu finden. Ich habe versucht, die obige Gleichung neu anzuordnen, aber keine Lösung in geschlossener Form erhalten. Bitte geben Sie hilfreiche Hinweise.λ

Amit
quelle
Nun, ich brauche Zeit, um darauf zu antworten (wahrscheinlich werden andere Ihnen schneller helfen), aber die meisten Erkenntnisse können stat.lsa.umich.edu/~kshedden/Courses/Stat600/Notes/… entnommen werden. Und was ist in der Definition von Freiheitsgrade, da ich irgendwie vermisse . λkλ
Dmitrij Celov
@Dmitrij: Danke für die Antwort, ich habe die Fragen aktualisiert und 'k' durchλ
Amit
Hallo Amit, wie können Sie die Freiheitsgrade kennen, bevor Sie den Regularisierungsparameter berechnen?
Baz

Antworten:

9

Ein Newton-Raphson / Fisher-Scoring / Taylor-Reihen-Algorithmus wäre dafür geeignet.

Sie müssen die Gleichung für lösen mit Ableitung Sie erhalten dann: h ( λ ) = p i = 1 d 2 iλ h

h((λ)=ich=1pdich2dich2+λ- -df=0
h(λ)h(λ(0))+(λ-λ(0))h
hλ=- -ich=1pdich2((dich2+λ)2
h((λ)h((λ((0))+((λ- -λ((0))hλ|λ=λ((0)=0

Neuanordnung für Sie: Hiermit wird die iterative Suche eingerichtet. Nehmen Sie für anfängliche Startwerte in der Summation an, dann erhalten Sie .λ = λ ( 0 ) - [ hλ

λ=λ((0)- -[hλ|λ=λ((0)]]- -1h((λ((0))
dich2=1λ((0)=p- -dfdf

λ((j+1)=λ((j)+[ich=1pdich2((dich2+λ((j))2]]- -1[ich=1pdich2dich2+λ((j)- -df]]

Dies "geht" in die richtige Richtung ( erhöhen, wenn die Summation zu groß ist, verringern, wenn es zu klein ist) und dauert normalerweise nur wenige Iterationen, um gelöst zu werden. Ferner ist die Funktion monoton (eine Zunahme / Abnahme von verringert / erhöht immer die Summation), so dass sie eindeutig konvergiert (keine lokalen Maxima).λλ

Wahrscheinlichkeitslogik
quelle
Vielen Dank, aber ich habe Zweifel, warum wir annehmen müssen , da wir bereits die richtigen Werte haben ... Ich habe diese Formel durch Schreiben eines Matlab-Codes überprüft und diese Annahme nicht übernommen , aber es funktioniert gut und gibt die richtige Lösungdich2=1
Amit
Die Annahme ist nur, den Anfangswert von "nah genug" an den korrekten Wert zu bringen. Wenn Sie eine bessere Vermutung haben, beginnen Sie damit. Sie können sogar einfach , solange Ihre ds größer als Null sind. Die ds werden in den Iterationen nicht als 1 angenommen, nur um den Algorithmus zu starten. λ((0)λ((0)=0
Wahrscheinlichkeitslogik
(+1) Ich würde sowieso die gleiche numerische Lösung geben.
Dmitrij Celov
6

Hier ist der kleine Matlab-Code, der auf der Formel basiert, die durch Wahrscheinlichkeitslogik bewiesen wurde:

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
quelle
2
Los Team!
Wahrscheinlichkeitslogik
Ein versuchter Editor argumentiert, dass die while-Bedingung sein sollte while ( abs(diff)>threshold ).
Gung - Reinstate Monica
while( abs(diff) > threshold )- -1001e- -16