情報学部大学生のダラダラ日記

β日記

機械学習や日記っぽいものを書きます

D次元線形回帰モデルを平均二乗誤差を用いて解く

スポンサーリンク

※自分のはてなブログの編集都合上、行列表現がTexで表現できないため画像を挿入します。すみません。※

導入

線形回帰モデルとは

例えば直線モデルについて考えてみます。以下の図を見てください。

 

f:id:Parco1021:20200203134035p:plain

引用元:線形単回帰分析の仕組みをわかりやすく解説! | 全人類がわかる統計学

 

散らばっている点を"それっぽい"直線にしています。直線の式であるので{\displaystyle y(x)=w_0x_o+w_1 }といった形になっています。この{\displaystyle w_1およびw_0 }を求めることが「線形回帰モデルを解く」ということです。

 

本記事の目的

では、本記事の目的を明確にします。先に紹介した直線モデルは1次元モデルであり、それぞれ{\displaystyle w_0,w_1 }を求めることは難しくないです。しかしこれが2次元、3次元あるいはより高次元となった場合にも解くことは可能でしょうか?逐一解いてみても良いと思いますが本記事では高次元である{\displaystyle D }次元を想定します。

今回解く対象の{\displaystyle D }次元線形回帰モデルを示します。

{\displaystyle y(\boldsymbol{x})=w_0x_0+w_1x_1+・・・+w_{D-1}x_{D-1}+w_D }

{\displaystyle w_D }は切片を表します。今回は切片を省略し、以下の式を対象とします。

{\displaystyle y(\boldsymbol{x})=w_0x_0+w_1x_1+・・・+w_{D-1}x_{D-1} }

対象の式をより簡略化して書きたいと思います。行列表記を用いると

f:id:Parco1021:20200203155302p:plain

この{\displaystyle \boldsymbol{w} }が今回着目する文字です。所謂"重み"に似たやつです。

 

では早速解いてみましょう。今回、平均二乗誤差{\displaystyle J }で解きます。

f:id:Parco1021:20200203161319p:plain

ここで目的を明確にしておきます。目的は{\displaystyle y(\boldsymbol{x}) }を誤差の少ない関数とすることです。具体的には損失関数{\displaystyle J }を最小とする最適な{\displaystyle \boldsymbol{w} }を見つけることです。最小とする、つまりみんな大好き微分をします。

行列の計算に慣れていない方はここから紙とペンで実際に解きながら読むことをおすすめします。

 

解く

では早速{\displaystyle w_i }微分しましょう。

f:id:Parco1021:20200203180553p:plain

{\displaystyle w_i }微分すると{\displaystyle x_{n,i} }となることに注意すると

f:id:Parco1021:20200203180052p:plain

となります。注意ですが{\displaystyle x_{n,i} }のnはデータ数、iは(0~D-1)をとります。

{\displaystyle Jを最小にするwは、全てのw_iに対して傾きが0すなわち偏微分したら0となります。このwを求めます。 }

f:id:Parco1021:20200203181517p:plain

このまま{\displaystyle \boldsymbol{w} }について解いてしまいたいですが{\displaystyle x_{n,i} }が邪魔ですね。この方程式は全ての{\displaystyle i }において成り立つため、

f:id:Parco1021:20200203182027p:plain

 となります。ここからさらにわかりやすくするためにベクトル表現でまとめると、

f:id:Parco1021:20200203182555p:plain

簡略化すると、

f:id:Parco1021:20200203183045p:plain

分配法則を用いて、

f:id:Parco1021:20200203183346p:plain

f:id:Parco1021:20200203184353p:plain

このままではΣが邪魔で解きにくいですね。行列表現を用いてΣを消すように試みましょう。

f:id:Parco1021:20200204121601p:plain

f:id:Parco1021:20200204122042p:plain

新しく{\displaystyle \boldsymbol{X} }を導入することでΣを無くすことができました。

では、同様にして第2項も簡略化しましょう。

f:id:Parco1021:20200204123603p:plain

Σを消すことができたので元の方程式を置き換えてみます。

f:id:Parco1021:20200204124749p:plain

あとはこれを{\displaystyle \boldsymbol{w} }について解きます。まずは両辺転置を取ります。

f:id:Parco1021:20200204170848p:plain

これをガンガン解いていきます。

f:id:Parco1021:20200204172327p:plain

これがD次元線形回帰モデルの解です。この式を用いるとxが何次元であっても、すなわちDが何であっても最適な{\displaystyle \boldsymbol{w} }が得られます。お疲れさまでした。

切片を無視していましたね。あと少しです。

切片がある時

では、切片がある時を考えましょう。切片がある時ってどういう時でしょう?初めに示した式を再掲します。

{\displaystyle y(\boldsymbol{x})=w_0x_0+w_1x_1+・・・+w_{D-1}x_{D-1}+w_D }

これを以下のように見ます。

{\displaystyle y(\boldsymbol{x})=w_0x_0+w_1x_1+・・・+w_{D-1}x_{D-1}+w_Dx_D }

この{\displaystyle w_Dが切片ですね。このw_Dを常に出力させたいのでx_Dを常に1とすれば良いのです。このようにD+1次元目のxを常に1とすることで切片を実現させることが可能です。 }つまりD次元線形回帰モデルの解は変えなくて良いです。

 

さいごに 

行列の諸々を忘れていて理解に少し時間がかかってしまいました。しかし1つ1つ紐解いていくと徐々に理解ができて楽しかったです。

 

まとめ

D次元線形回帰モデル

{\displaystyle y(\boldsymbol{x})=w_0x_0+w_1x_1+・・・+w_{D-1}x_{D-1} }

f:id:Parco1021:20200203155302p:plain

の解は

f:id:Parco1021:20200204175037p:plain

但し、

f:id:Parco1021:20200204175133p:plain

 

参考文献

最小二乗法の解の導出 - 機械学習に詳しくなりたいブログ

 

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

 

 

 

 

スポンサーリンク