線形回帰分析と相関係数
1個まえscikit-learnで線形回帰分析 - 無意義なつぶやき
の記事で書いた線形回帰分析について少し詳し目に書きます。
従属変数yと独立変数xが与えられたとき
これが線形回帰分析のモデルです。
Δ^2を最小にするようにθを設定します。
簡単のため
で考えることにします。
となるので
でこれを微分し
ここでは相関行列になります。
ここで各要素の相関が非常に高い場合はどうなるのでしょうか?
irisを例に考えてみます。
slswはsepal lengthとsepal widthを切り出したものです。
これとsepal lengthの相関を考えてみると当然ですが、
以下のようになります。
In [60]: dcoef=np.corrcoef(slsw.T, sl.T) In [61]: dcoef Out[61]: array([[ 1. , -0.10936925, 1. ], [-0.10936925, 1. , -0.10936925], [ 1. , -0.10936925, 1. ]]) In [62]: np.linalg.eig(dcoef) Out[62]: (array([ 2.02337679e+00, 3.33066907e-16, 9.76623209e-01]), array([[ -6.99166411e-01, 7.07106781e-01, 1.05670856e-01], [ 1.49441157e-01, -1.34995136e-16, 9.88770621e-01], [ -6.99166411e-01, -7.07106781e-01, 1.05670856e-01]])) In [63]: np.linalg.det(dcoef) Out[63]: 0.0
determinantが0となるため、が存在しないことになります。
これは極端な例ですが、相関行列の変数が相関が高いペアが含まれていると
モデル精度が不安定になるようです。
これを解消するために考案されたのがリッジ回帰です。
続きはまた今度