自由度と入力行列を指定してリッジ回帰の正則化パラメーターを計算する方法は?


11

A を独立変数の行列とし、Bを対応する従属値のn × 1行列とします。リッジ回帰では、パラメータ定義λを:だからβは= A T A + λ I - 1 A T B。ここで、[usv] = svd(A)およびd i = i t h 's'の対角エントリとしましょう。自由度を定義します(df)= n i = 1d i2×p×1λβ=T+λ1TBd=th。リッジ回帰は低分散成分の係数を縮小するため、パラメーターλは自由度を制御します。したがって、正規回帰の場合であるλ=0の場合、df = nであり、すべての独立変数が考慮されます。私が直面している問題は、「df」と行列「s」を指定して、λの値を見つけることです。私は上記の方程式を整理し直そうとしましたが、閉じた形の解決策を得ていませんでした。役立つポインタを提供してください。Σ=1d2d2+λλλ=0λ


さて、これに答える時間は必要です(おそらく他の人があなたを助ける方が早いでしょう)が、ほとんどの洞察はstat.lsa.umich.edu/~kshedden/Courses/Stat600/Notes/から取られるかもしれませんそして、定義のは何ですか私はどういうわけかλを見逃しているので、自由度。kλ
Dmitrij Celov 2011年

@Dmitrij:返信のThnx、質問を更新し、「k」を置き換えましたλ
Amit

こんにちはアミット、正則化パラメーターを計算する前にどのように自由度を知ることができますか?
Baz

回答:


9

Newton-Raphson / Fisher-scoring / Taylor-seriesアルゴリズムがこれに適しています。

あなたのために解決する方程式有するH λ = P Σ iは= 1 、D 2 、Iをλ 誘導体と H

hλ=Σ=1pd2d2+λdf=0
次その後、取得: HλHλ0+λ-λ0時間
hλ=Σ=1pd2d2+λ2
hλhλ0+λλ0hλ|λ=λ0=0

以下のために再配置あなたが得る: λ = λ 0 - [ 時間λ

λ=λ0[hλ|λ=λ0]1hλ0
d2=1λ0=pdfdf

λj+1=λj+[Σ=1pd2d2+λj2]1[Σ=1pd2d2+λjdf]

λλ


d2=1

λ0λ0=0

(+1)とにかく私は同じ数値解を与えるでしょう。
Dmitrij Celov 2011年

6

以下は、probabilityislogicによって証明された式に基づく小さなMatlabコードです。

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
チームに行く!
確率

試みられた編集者は、while条件はであるべきだと主張していますwhile ( abs(diff)>threshold )
gung-モニカの

while( abs(diff) > threshold )1001e16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.