Come calcolare i parametri di regolarizzazione nella regressione della cresta dati i gradi di libertà e la matrice di input?


11

Sia A una matrice di variabili indipendenti e B la matrice corrispondente dei valori dipendenti. Nella regressione ridge, definiamo un parametro in modo tale che: . Ora lascia [usv] = svd (A) e voce diagonale di 's'. definiamo i gradi di libertà (df) = . La regressione della cresta riduce i coefficienti dei componenti a bassa varianza e quindi il parametro controlla i gradi di libertà. Quindi pern × 1 λ β = ( A T A + λ I ) - 1 A T B d i = i t hn i = 1 ( d i ) 2n×pn×1λβ=(UNTUN+λio)-1UNTBdio=ioth λλ=0Σio=1n(dio)2(dio)2+λλλ=0, che è il caso della regressione normale, df = n, e quindi verranno prese in considerazione tutte le variabili indipendenti. Il problema che sto affrontando è trovare il valore di dato 'df' e la matrice 's'. Ho provato a riorganizzare l'equazione di cui sopra ma non ottenevo una soluzione a forma chiusa. Fornisci eventuali suggerimenti utili.λ


Beh, ho bisogno di tempo per rispondere a questa domanda (probabilmente altri saranno più veloci per aiutarti), ma la maggior parte delle intuizioni possono essere tratte da stat.lsa.umich.edu/~kshedden/Courses/Stat600/Notes/… E cos'è in definizione di gradi di libertà, dato che in qualche modo mi manca . λKλ
Dmitrij Celov,

@Dmitrij: Grazie per la risposta, ho aggiornato le domande e ho sostituito 'k' conλ
Amit

Ciao Amit, come fai a sapere quali sono i gradi di libertà prima di calcolare il parametro di regolarizzazione?
Baz,

Risposte:


9

Un algoritmo Newton-Raphson / Fisher-scoring / serie Taylor sarebbe adatto a questo.

Hai l'equazione da risolvere per con derivato Quindi ottieni: h ( λ ) = p i = 1 d 2 iλ h

h(λ)=Σio=1pdio2dio2+λ-df=0
h(λ)h(λ(0))+(λ-λ(0))h
hλ=-Σio=1pdio2(dio2+λ)2
h(λ)h(λ(0))+(λ-λ(0))hλ|λ=λ(0)=0

riordinando per ottieni: Imposta la ricerca iterativa. Per i valori iniziali iniziali, assumere nella somma, quindi si ottiene .λ = λ ( 0 ) - [ hλd 2 i =1λ(0)=p-df

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

λ(j+1)=λ(j)+[Σio=1pdio2(dio2+λ(j))2]-1[Σio=1pdio2dio2+λ(j)-df]

Questo "va" nella giusta direzione (aumenta quando la somma è troppo grande, diminuisce quando è troppo piccola) e in genere richiede solo poche iterazioni per risolverlo. Inoltre la funzione è monotonica (un aumento / diminuzione in diminuirà / aumenterà sempre la somma), in modo che converga in modo univoco (nessun massimo locale).λλλ


grazie mille, ma ho un dubbio sul perché dobbiamo assumere , dato che abbiamo già i loro valori corretti ... Ho controllato questa formula scrivendo un codice matlab e non ho preso questa ipotesi , ma funziona bene e fornisce la soluzione correttadio2=1
Amit

Il presupposto è solo quello di ottenere il valore iniziale di "abbastanza vicino" al valore corretto. Se hai un'ipotesi migliore, allora inizia con quello. Puoi anche semplicemente impostare , purché le tue d siano maggiori di zero. I d non sono considerati 1 nelle iterazioni, solo per avviare l'algoritmo. λ ( 0 ) = 0λ(0)λ(0)=0
Probislogic

(+1) Darei comunque la stessa soluzione numerica.
Dmitrij Celov,

6

Ecco il piccolo codice Matlab basato sulla formula dimostrata da probabilitàSlogic:

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

2
Forza squadra!
Probislogic

Un editor tentato sostiene che la condizione while dovrebbe essere while ( abs(diff)>threshold ).
gung - Ripristina Monica

while( abs(diff) > threshold )-1001e-16
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.