2016-06-20 29 views
1

リッジ回帰は、OLS回帰とわずかに異なります。数学的には、OLS回帰式を使用してリッジ回帰は、私は多重共を避けるために、リッジ回帰を使用していたが、戻って、実質的だった非常に奇妙な結果を得たMatlabのリッジ回帰とOLS回帰

enter image description here

式を使用しています

enter image description here

regress()を使うよりも悪いです。 matlabでは、関数ridgeを呼び出すには、XにX、Yを、kに値を入力する必要があります。理論的には、kをゼロに設定すると、これらの式は同じでなければなりません。しかし、同じ値のXとYを使用して、両方ともコード内でコールバックされると、Bの2つの非常に異なる行列が得られます(以下を参照)。なぜこれが起こるのか誰かが説明できますか? ridgeドキュメンテーションた内容に応じて、

b_ridge = ridge(Y_current,X, 0) 

    12.4525 
    9.0099 
    0.2808 
    -1.5426 
    -1.1107 

b_regress = regress(Y_current,X) 

    3.5586 
    0.8805 
    0.1670 
    -0.3934 
    -0.8526 
+1

giv私たちは 'Y_current'と' X'の考え方をいくつか考えていますか? – edwinksl

答えて

4

:彼らは0、標準偏差1

を意味しているので、結果はx列を中心とスケーリング後に計算されている

は、ここでカラムを用いた例ですベクター:

>> x = randn(5,1); 
>> y = randn(5,1); 
>> ridge(y, x, 0) 
ans = 
    -0.045681220595243 
>> regress(y, x) 
ans = 
    -0.028738686366027 
>> regress(y, (x-mean(x))/std(x)) 
ans = 
    -0.045681220595243 
+1

答えをありがとう!私は周りをたどり着いていました。倍率と同じ結果を得るには、倍率をXに入れた列を削除し、倍率を0に設定してください。 b_regress =回帰(Y_current、X); b_ridge = ridge(Y_current、X(:、2:5)、0、0); – Schmax