Comment calculer le paramètre de régularisation dans la régression de crête en fonction des degrés de liberté et de la matrice d'entrée?

11

Soit A la matrice des variables indépendantes et B la matrice n × 1 correspondante des valeurs dépendantes. Dans la régression d'arête, on définit un paramètre λ de sorte que: β = ( A T A + X I ) - 1 A T B . Soit maintenant [usv] = svd (A) et d i = i t h l' entrée diagonale de 's'. on définit les degrés de liberté (df) = n i = 1 ( d i ) 2n×pn×1λβ=(UNETUNE+λje)-1UNETBje=jeth . La régression de crête réduit les coefficients des composantes de faible variance et donc le paramètreλcontrôle les degrés de liberté, donc pourλ=0, ce qui est le cas de la régression normale, df = n, et donc toutes les variables indépendantes seront prises en compte. Le problème auquel je suis confronté est de trouver la valeur deλétant donné 'df' et la matrice 's'. J'ai essayé de réorganiser l'équation ci-dessus mais je n'obtenais pas de solution sous forme fermée. Veuillez fournir des conseils utiles.je=1n(je)2(je)2+λλλ=0λ

Amit
la source
Eh bien, j'ai besoin de temps pour répondre à cela (probablement d'autres seront plus rapides pour vous aider), mais la plupart des informations peuvent être tirées de stat.lsa.umich.edu/~kshedden/Courses/Stat600/Notes/… Et quel est dans la définition de degrés de liberté, car je manque en quelque sorte λ . kλ
Dmitrij Celov
@Dmitrij: Thnx pour la réponse, j'ai mis à jour les questions et remplacé 'k' par λ
Amit
Salut Amit, comment savoir quels sont les degrés de liberté avant de calculer le paramètre de régularisation?
Baz

Réponses:

9

Un algorithme Newton-Raphson / Fisher-scoring / Taylor-series serait adapté à cela.

Vous avez l'équation à résoudre pour h ( λ ) = p i = 1 d 2 iλ avec dérivée h

h(λ)=je=1pje2je2+λ-F=0
Vous obtenez alors: h(λ)h(λ(0))+(λ-λ(0))h
hλ=-je=1pje2(je2+λ)2
h(λ)h(λ(0))+(λ-λ(0))hλ|λ=λ(0)=0

λ

λ=λ(0)-[hλ|λ=λ(0)]-1h(λ(0))
je2=1λ(0)=p-FF

λ(j+1)=λ(j)+[je=1pje2(je2+λ(j))2]-1[je=1pje2je2+λ(j)-F]

λλ

probabilitéislogique
la source
je2=1
λ(0)λ(0)=0
(+1) Je donnerais quand même la même solution numérique.
Dmitrij Celov
6

Voici le petit code Matlab basé sur la formule prouvée par probabilitéislogic:

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
la source
2
Allez l'équipe!
probabilitéislogic
Une tentative de rédaction soutient que la condition while devrait être while ( abs(diff)>threshold ).
gung - Rétablir Monica
while( abs(diff) > threshold )-1001e-16