【機械学習】よくわかる線形回帰

はじめに

今回は、前回までに取り上げた、「単回帰分析」と「重回帰分析」をより一般的にした「線形回帰」について解説していきます。

>>【機械学習】よくわかる単回帰分析

>>【機械学習】よくわかる重回帰分析

 

 

今回の内容は、少し理論的なところまで踏み込むため、前回よりは難しく感じるかもしれません。

 

しかし、理論までわかっていた方が納得感が増すと思うので、是非最後まで読んでみてください。

 

※線形代数の基礎部分を履修済みであることを前提としています。

 

 

この記事でわかること

  • 線形回帰とは何なのか
  • 単回帰分析や重回帰分析とのつながり
  • 数式の導出過程

 

線形回帰とは

では、はじめに線形回帰とはなんなのか、ということから説明していきます。

 

その前に、「単回帰分析」と「重回帰分析」が何をしていたのか、ということから簡単におさらいしてみましょう。

 

「単回帰分析」は、データをプロットして得られたグラフに、もっとも当てはまりの良い直線の式を求める分析でした。

一方、「重回帰分析」は、単回帰分析よりも入力変数の数が増えた分析でした。

 

$$単回帰分析 : \hat{y} = w_{0} + w_{1}x_{1} $$

$$重回帰分析 : \hat{y} = w_{0} + w_{1}x_{1} + w_{2}x_{2} + … + w_{M}x_{M}$$

 

双方に共通していたことと言えば、適切なパラメータを決定することでしたよね。

(上の式でいうところの\(w_{0}, w_{1}, …\)の値)

 

ずばり、線形回帰は、このように適切なパラメータを決定する回帰分析の一種です。

ただし、線形回帰という名前であっても、求める式は直線や平面だけではなく、曲線も扱うことができます。

これに関しては、下の方でもう一度触れます。

 

では、さっそく線形回帰の数式を見てみましょう。

それがこちら!

 

$$f(x) = w_{0}\Phi_{1}(x) + w_{1}\Phi_{2}(x) + … + w_{M}\Phi_{M}(x) = \boldsymbol{w^{\mathrm{T}}\Phi}$$

 

ただし、ベクトル\(\boldsymbol{w, \Phi}\)を以下のようにする。

 

\(\boldsymbol{w} = \left( \begin{array}{cc} w_{0}\\ w_{1}\\ \vdots\\ w_{M} \end{array} \right), \boldsymbol{\Phi}(x) = \left( \begin{array}{cc} \Phi_{0}(x)\\ \Phi_{1}(x)\\ \vdots\\ \Phi_{M}(x) \end{array} \right)\)

 

\(\boldsymbol{w}\)は、パラメータ\(w_{0}, w_{1}, \dots, w_{M}\)からなるベクトルで、\(\boldsymbol{\Phi}(x)\)は基底関数と呼ばれる\(\Phi_{0}(x), \Phi_{1}(x), \dots, \Phi_{M}(x)\)からなるベクトルです。

ここでは、\(f(x)\)という表記をしていますが、\(\hat{y}\)と同じものだと考えて大丈夫です。

 

ちょっとややこしくなってきましたね。

少し具体例を出してみましょう。

まずは、上のベクトルの\(M = 2\)の場合で具体例を出してみます。

こういうこと。

\(\boldsymbol{w} = \left( \begin{array}{cc} w_{0}\\ w_{1} \end{array} \right), \boldsymbol{\Phi}(x) = \left( \begin{array}{cc} \Phi_{0}(x)\\ \Phi_{1}(x) \end{array} \right)\)

 

見ての通り、\(\Phi(x)\)は\(x\)の関数となっています。

ここで、\(\Phi_{0}(x) = 1、\Phi_{1}(x) = x_{1}\)とすると、\(f(x)\)は、

 

$$f(x) = w_{0} + w_{1}x_{1}$$

 

となりますね。

これはまさに、単回帰分析の式です。

 

では、次に\(M = 3\)の場合で具体例を見てみます。

\(\boldsymbol{w} = \left( \begin{array}{ccc} w_{0}\\ w_{1}\\ w_{2} \end{array} \right), \boldsymbol{\Phi}(x) = \left( \begin{array}{ccc} \Phi_{0}(x)\\ \Phi_{1}(x)\\ \Phi_{2}(x) \end{array} \right)\)

 

今度は、\(\Phi_{0} = 1、\Phi_{1} = x_{1}、\Phi_{2} = x_{2}\)としてみましょう。

すると、\(f(x)\)は

 

$$f(x) = w_{0} + w_{1}x_{1} + w_{2}x_{2}$$

 

となります。

これは、重回帰分析の式になりますね。

 

では、最後は、\(M=3\)はそのままで、基底関数の値を変えてみましょう。

\(\Phi_{0} = 1、\Phi_{1} = x_{1}、\Phi_{2} = x_{1}^2\)としてみます。

すると、\(f(x)\)はこうなります。

 

$$f(x) = w_{0} + w_{1}x_{1} + w_{2}x_{1}^2$$

 

これは、\(x_{1}\)に関して2次関数となりますね。

 

このように、線形回帰では、基底関数の選び方次第で、直線だけではなく曲線も表現できます

また、線形回帰の解き方は、基底関数の選び方に依存しません

ちなみに、2次以上の項が存在する場合を多項式回帰といいます。

 

では、次の章からは、この線形回帰の数式に対するアプローチの仕方を見ていきます。

 

スポンサーリンク

 

ちなみに、線形回帰の「線形」というのは、\(f(x)\)が線形結合によって表現されることから由来しています(まっすぐっていう意味とはちょっと違う)。

 

線形結合を知らない人のために簡単に説明すると、線形結合とは、ベクトル\(\boldsymbol{a_{1}, a_{2}}\)\(,\dots,\)\(\boldsymbol{a_{n}}\)と、スカラー\(c_{1}, c_{2}, \dots, c_{n}\)によって表される、

$$c_{1}\boldsymbol{a_{1}} + c_{2}\boldsymbol{a_{2}} + \dots + c_{n}\boldsymbol{a_{n}} $$

の形をしたベクトルのことです。

 

誤差関数を求める

では、この章では、誤差関数の導出方法と、それに対するアプローチの仕方を解説していきます。

 

誤差関数は、これまでと同様に、実際の値と予測値との残差の二乗を足し合わせることでできます。

 

N+1個あるデータのうち、n個目のデータに対する誤差関数を\(E_{n}(\boldsymbol{w})\)とすると、\(E_{n}(\boldsymbol{w})\)は次のように表すことができます。

 

$$E_{n}(\boldsymbol{w}) = (y_{n} – f_{n}(x))^2$$

 

すべてのデータに関しての誤差関数は、上の式の総和になります。

 

$$E(\boldsymbol{w}) = \sum_{n = 0}^{N}E_{n}(\boldsymbol{w}) = \sum_{n = 0}^{N}(y_{n} – f_{n}(x))^2$$

 

この式からわかるように、誤差関数は二乗の和を取っているため、常に正の値を取ります。

また、展開することで必ず\(w_{m}\)に関しての二次関数となります。

 

このことから、誤差関数は下に凸の関数であるということが言えます。

つまり、誤差関数を最小にするパラメータ\(\boldsymbol{w}\)は、各パラメータについて偏微分することで求めることができるとわかるわけです。

また、勾配降下法が使えるということもわかりました。

 

$$\frac{d E(\boldsymbol{w})}{d\boldsymbol{w}} = \boldsymbol{O}$$

 

言い換えると、

 

\(\left( \begin{array}{cccc} \frac{\partial E(\boldsymbol{w})}{\partial w_{0}}\\ \frac{\partial E(\boldsymbol{w})}{\partial w_{1}}\\ \vdots \\ \frac{\partial E(\boldsymbol{w})}{\partial w_{M}} \end{array} \right) = \left( \begin{array}{cccc} 0\\ 0\\ \vdots \\ 0 \end{array} \right)\)

 

を満たす\(\boldsymbol{w}\)が、誤差関数\(E(\boldsymbol{w})\)を最小にする値ということになります。

 

この行列の計算過程についても書こうか悩んだのですが、計算が複雑なため別の記事にまとめることにします。

 

結論だけ言うと、\(\boldsymbol{w}\)の値は、

 

$$\boldsymbol{w} = (\boldsymbol{\Phi^{\mathrm{T}}}\boldsymbol{\Phi})^{-1}\boldsymbol{\Phi^{\mathrm{T}}}\boldsymbol{y}$$

 

となります。

\(\boldsymbol{\Phi}\)を新しく定義し直しているため、それぞれの文字についての説明だけしておきます。

 

$$\boldsymbol{\Phi} = \left( \begin{array}{ccccc} \Phi_{00} & \dots & \Phi_{0m} & \dots & \Phi_{0M} \\ \vdots & \ddots & & & \vdots  \\ \Phi_{n0} & & \Phi_{nm} & &\Phi_{nM} \\ \vdots & & & \ddots & \vdots \\ \Phi_{N0} & \dots & \Phi_{Nm} & \dots & \Phi_{NM}  \\ \end{array} \right)$$

 

この行列は、n行目にn番目のデータの基底関数が並んでいます。

基底関数は全部でM+1個あることになります。

 

$$\boldsymbol{y} = \left( \begin{array}{ccc} y_{0}\\ y_{1}\\ \vdots \\ y_{N} \end{array} \right)$$

 

このベクトルは、n個目のデータの実際の値です。

 

誤差関数を最小にする適切なパラメータが得られたので、これで線形回帰の学習が終了します。

3×3行列ぐらいまでなら手計算でも計算可能ですので、実際に計算して確認してみてください。

 

スポンサーリンク

おわりに

今回の線形回帰に関する内容はいかがだったでしょうか。

上で紹介したパラメータは解析的に求めた値ですが、実際にプログラム上で適切なパラメータを求める際には、行列計算は行わず、勾配降下法を用いて値を求めます。

 

勾配降下法の詳しい解説はこちらの記事にまとめています。

関連記事

はじめに 今回は、機械学習によく使われるアルゴリズムの1つである、勾配降下法について解説していきます。 今回の記事の流れは以下のようになります。   今回の記事の流れ そもそも勾配降下法とは何か 勾配降下法[…]

 

では、今回はここまでとします。

お疲れさまでした。