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λ


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]

λλ


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.