- 最小二乗法の計算を解説.
最小二乗法の計算について紹介します.微分法による極値問題の一例としても良い題材です.
この記事では細かい部分を詰めることはせず,ざっくりとした計算の流れを整理することを目的とします.
【関連記事】
- 線形回帰 - Notes_JP:より詳細な話をまとめています.
- Excelで最小二乗法(近似曲線の求め方) - Notes_JP:「使う」ことをメインにした話です.Excel関数を使う方法です.
1次関数(直線)
$N$組のデータ点$(x_1,y_1),...,(x_N,y_N)$を最小二乗法で直線フィッティングすることを考えます.つまり,S(a,b)=\sum_{i=1}^N\bigl[y_i - (\underset{\text{直線の式}}{\underline{ax_i+b}} )\bigr]^2
\end{aligned}
【方針】
求める$a,b$は,$\displaystyle \frac{\partial S}{\partial a}(a,b)=0$, $\displaystyle \frac{\partial S}{\partial b}(a,b)=0$を満たします.したがって,この2式を連立して解くことで,$a,b$を計算できます.
【解】
偏微分は,合成関数の微分法を使うことで
\frac{\partial S}{\partial a}(a,b)
&=\sum_{i=1}^N 2\left[y_i - (ax_i+b)\right]\cdot (-x_i) \\
\frac{\partial S}{\partial b}(a,b)
&=\sum_{i=1}^N 2\left[y_i - (ax_i+b)\right]
\end{aligned}
\frac{\partial S}{\partial a}(a,b)&=0:\\
&\sum_{i=1}^N \left(x_i \right)^2 \cdot a +\sum_{i=1}^N x_i \cdot b = \sum_{i=1}^N x_i y_i\\
\frac{\partial S}{\partial b}(a,b)&=0: \\
&\sum_{i=1}^N x_i\cdot a+Nb=\sum_{i=1}^N y_i
\end{aligned}
ここで,それぞれ$\{x_i\}_i$, $\{y_i\}_i$を当確率で値にとる確率変数$X$, $Y$を導入しましょう(*2).すると
- $X$の平均値:$\displaystyle\langle X\rangle=\frac{1}{N}\sum_{i=1}^N x_i$
- $Y$の平均値:$\displaystyle\langle Y\rangle=\frac{1}{N}\sum_{i=1}^N y_i$
- $X$の分散:
\begin{aligned}
\sigma_X^2
&=\biggl\langle \bigl(X-\langle X\rangle\bigr)^2
\biggr\rangle \\
&=\langle X^2\rangle
-\langle X\rangle^2
\end{aligned} - $X,Y$の共分散:
\begin{aligned}
\mathrm{Cov}\left(\mathrm{X,Y}\right)
&=\biggl\langle \bigl(X-\langle X\rangle\bigr)
\bigl(Y-\langle Y\rangle\bigr)
\biggr\rangle \\
&=\langle XY\rangle
-\langle X\rangle\langle Y\rangle
\end{aligned}
\frac{\partial S}{\partial a}(a,b)&=0:\\
& \left(\sigma_X^2 +\langle X\rangle^2 \right) a +\langle X\rangle b \\
&\qquad =\mathrm{Cov}\left(\mathrm{X,Y}\right) + \langle X\rangle\langle Y\rangle \\
\frac{\partial S}{\partial b}(a,b)&=0: \\
& \langle X\rangle a+b=\langle Y\rangle
\end{aligned}
これら2式を連立させて解くことで
& y = ax + b \\
&
\begin{cases}
\, \displaystyle a =\frac{\mathrm{Cov}\left(\mathrm{X,Y}\right)}{\sigma_X^2} \\
\, \displaystyle b = -a\langle X\rangle+\langle Y\rangle
= \frac{\langle X^2\rangle \langle Y\rangle - \langle XY\rangle \langle X\rangle}{\sigma_X^2}
\end{cases}
\end{aligned}
【注意】
求めた直線は
y = a(x-\langle X\rangle) + \langle Y\rangle
\end{aligned}
多変数の線形回帰
(上の場合を含むような)一般化した問題として,複数のパラメータについて線形な関数によるフィッティングを考えます.フィッティング関数として
f(x^1,…,x^m)
=\sum_{i=1}^m \theta_m x^m
\end{aligned}
f(\boldsymbol{x})
=\boldsymbol{x} \cdot \boldsymbol{\theta}
\end{aligned}
それでは$N$組のデータ点$(\boldsymbol{x}_1,y_1),…,(\boldsymbol{x}_N,y_N)$のフィッティングを考えましょう.$N$組の式
y_i - \boldsymbol{x}_i \cdot \boldsymbol{\theta}
\end{aligned}
\boldsymbol{y} - A \boldsymbol{\theta}
\end{aligned}
したがって,二乗和は$\left\| \boldsymbol{y} - A \boldsymbol{\theta}\right\|^2$$={}^t(\boldsymbol{y} - A \boldsymbol{\theta})(\boldsymbol{y} - A \boldsymbol{\theta})$となります.ここでは,(データに相関がある場合にも扱えるよう)重み付きの二乗和
S(\boldsymbol{\theta})=
{}^t(\boldsymbol{y} - A \boldsymbol{\theta}) W (\boldsymbol{y} - A \boldsymbol{\theta})
\end{aligned}
1変数の場合と同じように$\displaystyle\frac{\partial S}{\partial \theta_i}(\boldsymbol{\theta})=0$$\,(i=1,...,m)$をみたす$\boldsymbol{\theta}$が求めるものです.これは簡単に計算することができ(*4)
\frac{\partial S}{\partial \theta_i}(\boldsymbol{\theta})&=0: \\
&-2\:{}^tA W (\boldsymbol{y} - A \boldsymbol{\theta})=0
\end{aligned}
\boldsymbol{\theta}=\left({}^tA WA \right)^{-1} \left( {}^tA W\boldsymbol{y} \right)
\end{aligned}
参考文献
*1:$g(x)=x^2$, $h_i(a,b)=y_i - (ax_i+b)$により,$S(a,b)=\sum_i g\left(h_i(a,b)\right)$と表されるので,合成関数の微分法より
*2:あるいは,
*3:$W=(w_{ij})$は重みを表す対称行列です.ベクトル$\boldsymbol{a}$に対して
*4:関数$f(\boldsymbol{\theta})=[{}^t\boldsymbol{a}(\boldsymbol{\theta})] W [\boldsymbol{b}(\boldsymbol{\theta})]$を考えましょう.ベクトル・行列の成分で表せば