最小二乗法の導出とイメージ
今回は最小二乗法について,Loss(損失関数,評価関数)を意識しながら説明をしていきます.
私が初めて最小二乗法を知った時,数式処理はわかったけど,何をやってるのかいまいちわからなくて,機械学習や統計としてもう一度学んだ時,なんとなくイメージができた記憶があります.ということで,私以外にも同じようなことで悩んでいる人がいる気がするので記事にしておこうと思います.
1.最小二乗法における仮定
下図のように,何かしらのデータ点を持ってきて,Excelかなんかで二次元のグラフ(散文図)にしたとします.この図ではデータ点を真の値として緑点で表しています.
ここで,真の値の傾向を察するに,あるがに対してなんとなく一次関数の形で変化している気がします*1
これを数式で表すと,
の仮定をすることに相当します.
ここで,a,bは定数であり,は一次関数を仮定した時のデータの予測値,はデータ点であり真の値です.
データを一次関数で精度よく予測したいということは,うまいことa,bの値を決めてやることに相当します.できればデータ点を全て通るような線がひけるとベストですが,今回は一次関数を仮定しているのでデータの点の間を通るような線が限界な気がします.
あるモデル(今回は一次関数)から出力された予測値と真の値のズレを測る為に登場するのがLoss(損失関数)です.評価関数とも呼ばれます.
一般的に最小二乗法において定義するLossは予測値と真の値のズレを用いて,簡単に書くと以下のようになります.
ここで,LはLossであり,二乗することで,めんどくさい絶対値を外しています.は微分した時に計算が楽になるからつけておきます.
機械学習の分野では二乗損失だったり,Squared lossとか言われています.
正確にはデータの点が複数こあると仮定すると,
となります.この式から,Lは予測と真の値のズレが小さくなるほど,言い換えるとモデルがうまくデータを予測できるようになればなるほど小さくなって行くことがわかります.
ここで,重要なのがL=L(a,b)であるということです.
つまり,
ですね.
混乱すると思うので重ねていうと,モデルが完成した時,a,bは定数ですが,モデル作成段階では変数です.
与えられているのはデータ点の組であり,データ自体は変えられませんからは定数です.
a,bをうまいこと決めてLを小さくすることで,より精度の良い一次関数モデルを作っていくというのが最小二乗法の考え方です.
モデルを作ろう
下図にLがa,bの値によって減少して行くイメージを載せておきます.本当はLはa,bの関数なので三次元のグラフになりますが,簡単のために二次元にしました.
最初にa,bを適当に決めて,Lを計算した時,図内の初期値のところにいたとします.ここから,Lが小さくなるようにa,bを変化させてやると(このグラフではa,b,を4に近づけることに相当)いつかLが最小になることがわかります.
このLが小さくなるようにa,bを決めて行く過程は最適化や学習と呼ばれており,話がそれてしまうので,ここでは踏み込みません.
色々難しそうですが,実は最小二乗法の場合,Lの最小値=極小値であることが知られています.
つまり,
の条件を満たすa,bを用いれば,Lossを下げるための難しい理論等を全く意識することなく,最小二乗法における最高精度のモデルが作れることを示しています.
初等最小二乗法の記事や教科書では,このようなLossを意識する説明が少ないと思いますが,一歩統計や機械学習の勉強に進む際には重要であると感じています.
あとは計算
ではゴリゴリ計算していきましょう.
\begin{align}
L &= \frac{1}{2} \sum (y_i - t_i)^2 \\
&= \frac{1}{2} \sum (ax_i + b - t_i)^2 \\
&= \frac{1}{2} \sum (a^2 x_i^2 + b^2 + t_i^2 + 2abx_i - 2bt_i -2ax_i t_i) \\
&= \frac{1}{2} \left(a^2 \sum x_i^2 + nb^2 +\sum t_i^2 + 2ab\sum x_i -2b\sum t_i -2a \sum x_i t_i \right)
\end{align}
ここで,
としました.
から,
\begin{align}
\frac{\partial L}{\partial a} &= a \sum x_i^2 + b \sum x_i - \sum x_i t_i =0 \\
\frac{\partial L}{\partial b} &= nb + a \sum x_i - \sum t_i = 0
\end{align}
であり,
\begin{align}
b &= \frac{1}{\sum x_i} \left( \sum x_i t_i - a\sum x_i^2 \right) \\
a &= \frac{1}{\sum x_i} \left( \sum t_i - nb \right)
\end{align}
bについて,aを代入して,
\begin{align}
b\sum x_i &= \sum x_i t_i - a\sum x_i^2 \\
&= \sum x_i t_i -\frac{1}{\sum x_i} \left( \sum t_i - nb \right) \sum x_i^2 \\
&= \sum x_i t_i - \frac{\sum t_i}{\sum x_i} \sum x_i^2 + \frac{\sum x_i^2}{\sum x_i} nb\\
b \left( \sum x_i - \frac{\sum x_i^2}{\sum x_i}n \right) &= \sum x_i t_i - \frac{\sum x_i^2}{\sum x_i}\sum t_i \\
\frac{b}{\sum x_i} \left( n\sum x_i^2 - \left(\sum x_i \right)^2\right) &= \frac{1}{\sum x_i} \left(\sum t_i \cdot \sum x_i^2 - \sum x_i \cdot \sum x_i t_i \right) \\
\end{align}
すなわち
\begin{align}
b = \frac{\sum t_i \cdot \sum x_i^2 - \sum x_i \cdot \sum x_i t_i}{ n\sum x_i^2 - \left(\sum x_i \right)^2}
\end{align}
aについて,
\begin{align}
a \sum x_i &= \sum t_i - nb \\
&= \sum t_i - n \left( \frac{\sum t_i \cdot \sum x_i^2 - \sum x_i \cdot \sum x_i t_i}{ n\sum x_i^2 - \left(\sum x_i \right)^2} \right) \\
a &= \frac{1}{ n\sum x_i^2 - \left(\sum x_i \right)^2} \cdot \frac{1}{\sum x_i} \left( n \sum t_i \cdot \sum x_i^2 - \sum t_i \cdot \left( \sum x_i \right)^2 - n \sum x_i^2 \cdot \sum t_i + n \sum x_i t_i \cdot \sum x_i \right)
\end{align}
すなわち,
\begin{align}
a = \frac{n \sum x_i \cdot \sum t_i - \sum x_i \cdot \sum t_i }{n\sum x_i^2 - \left(\sum x_i \right)^2}
\end{align}
まとめると,
\begin{align}
a &= \frac{n \sum x_i \cdot \sum t_i - \sum x_i \cdot \sum t_i }{n\sum x_i^2 - \left(\sum x_i \right)^2} \\
b &= \frac{\sum t_i \cdot \sum x_i^2 - \sum x_i \cdot \sum x_i t_i}{ n\sum x_i^2 - \left(\sum x_i \right)^2}
\end{align}
となります.
まとめ
1,
最小二乗法ではLossの形が簡単なため,最適化手法などを意識することなく,Lossの最小値を解析的に求めることができる.
2,
Lossの形を二乗損失と仮定している.場合によっては自分の好きなようにLossを決められるので,同じ最小二乗法を用いていても仮定したLossによって異なる結果が得られる
3,
係数a,bの詳細な導出を頑張って書いたので参考にどうぞ
一般化線形モデルとかはまた気が向いたら書こうと思います.