1. ホーム
  2. matlab

[解決済み] Matlabでのリッジ回帰とOLS回帰

2022-02-16 12:13:58

質問

リッジ回帰は、OLS回帰とごくわずかに異なる。数学的には、OLS回帰は次の数式を使用します。

ここで、リッジ回帰は以下の式を使用します。

多重共線性を避けるためにリッジ回帰を使いたかったのですが、非常に奇妙な結果が返ってきて、単に regress() を使うよりもかなり悪くなってしまいました。理論的には、もしkがゼロに設定されれば、これらの方程式は同じになるはずです。しかし、私のコードでXとYの同じ値を使用して、両方を同時に呼び出すと、Bについて2つの非常に異なる行列を受け取ります(下図)。なぜこのようなことが起こるのか、どなたか説明してください。

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

解決方法は?

によると ridge のドキュメントを参照してください。

をセンタリングおよびスケーリングした後に計算されます。 x の列は平均0、標準偏差1である。

列ベクトルを使った例です。

>> 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