最小二乗法 (least squares method) |
2017-03-04 - 2018-05-30 (update) |
|
|
*最小二乗法 とは
いくつか得られた観測値から,その背後にあるモデルのパラメータを推定する方法の1つです.
例えば,図1に示すような観測値{$(p_1, \cdots, p_i, \cdots, p_n)$}が得られたとして,この観測値にできるだけ合うようなモデルのパラメータ(1次関数{$y=ax + b$}の{$a$}と{$b$})を推定したいとします.最小二乗法では,この”できるだけ合う”の考え方として,モデルと観測値との誤差の二乗和に注目し,それを最小化するパラメータを推定します.
[img:vl5c]
{{small:図1 観測値(点群)と1次関数のモデル(青破線)}}
最小二乗法について詳しく学びたい場合,[1]の文献が参考になります.
{{small:[1]金谷健一, "これなら分かる最適化数学―基礎原理から計算手法まで", 共立出版, 2005}}
{{small:[link:https://www.amazon.co.jp/これなら分かる最適化数学-基礎原理から計算手法まで-金谷-健一/dp/4320017862] }}
*サンプルコード (C++)
ライブラリ:[link:simplesp]
サンプルコード:simplesp/sample/sp/lsm
シミュレーションで生成した観測値から直線のパラメータを推定します.
*最小二乗法の解き方
ここでは,図1の直線のパラメータを推定する例を問題として,最小二乗法の解き方を説明します.
**問題設定
モデルと観測値{$p_i$}との誤差は,今回はグラフのY軸についての誤差と定義します(図2の赤線).{{small:差の定義によって,解も変わります.その具体例は文献[1]を参考にしてください.}}
[img:dh1k]
{{small:図2 観測値とモデルとの誤差}}
具体的に,各観測値{$p_i$}についての誤差{$e_i$}は次の式で定義できます.{{small:({$x_i$}と{$y_i$}は観測値{$p_i$}の各軸の数値です)}}
{$$ e_i = y_i - (ax_i + b) $$}
そうすると,誤差の二乗和{$E$}は次の式で定義できます.
{$$ E = \sum{e_i^2} = \sum{(y_i - (ax_i + b))^2} $$}
最小二乗法では,この{$E$}を最小化するパラメータ{$a,b$}を求めることが目的です.
**解き方
一般化して考えられるように,パラメータ{$a, b$}に関連する部分は行列で表現します.
{{small:行列で表現しておけば,パラメータの数が増えた場合でも行列の要素が増えるだけで,以降の式は変えずに考えることができます.}}
{$$ e_i = y_i - (ax_i + b)
= y_i - \begin{bmatrix} x_i&1 \end{bmatrix} \begin{bmatrix} a \\ b \end{bmatrix} = y_i - A_i X $$}
ここで,{$X$}が求めるべきパラメータを表します.そうすると,{$E$}は次の式で表現できます.
{$$ E = \sum{(y_i - A_i X)^2} $$}
ここで,{$B = (y_1, ..., y_n)^\mathrm{T}$}, {$A = (A_1^\mathrm{T}, ..., A_n^\mathrm{T})^\mathrm{T}$}と置くと,{$E$}は次の式で表現できます.
{$$ E = \sum{(y_i - A_i X)^2} = \|B - A X\|^2 $$}
この式を展開すると,
{$$\begin{align*}
\|B - A X\|^2 &= (B - A X)^\mathrm{T}(B - A X) \\
&= X^\mathrm{T}A^\mathrm{T}AX - 2X^\mathrm{T}A^\mathrm{T}B + B^\mathrm{T}B
\end{align*}$$}
{$E$}は,{$X$}について下に凸の2次関数です.その最小値は極値(微分が0)になることから,{$E$}を最小化する{$X$}を求める問題は,{$E$}の微分を0にする{$X$}を求める問題に置き換えることができます.そう考えると,次の式が得られます.
{$$ \frac{dE}{dX} =2A^\mathrm{T}AX - 2A^\mathrm{T}B = 0 $$}
{$$ A^\mathrm{T}AX = A^\mathrm{T}B \tag{1}$$}
ここで,式(1)は正規方程式と呼ばれています.
最後に,{$$(A^\mathrm{T}A)$$}の逆行列を計算しそれを両辺に掛けることで,パラメータ{$X$}を求めることができます.
{$$ X = (A^\mathrm{T}A)^{-1} A^\mathrm{T}B $$}
ここで,行列{$A$},{$B$}の各要素は観測値{$p_i=(x_i, y_i)$}から設定できます.
**結局覚えておけば良いこと
{{small:理屈は無視した問題を解くためだけの覚え方です.その点,注意してください.}}
モデルとして考える式(今回の場合{$y = ax + b$})に観測値を代入すると,連立方程式が得られます.
{$$
a x_1 + b = y_1\\
\vdots\\
a x_n + b = y_n\\
$$}
この式は,パラメータを表す行列{$X$}とその係数を表す行列{$A$},それ以外の項を表す行列{$B$}を使うと次の式で表現できます.
{$$ AX = B$$}
式(1)の正規方程式は,この式の左に{$A^T$}を掛けると得ることができます.
後は正規方程式を解けば,パラメータ{$X$}を求めることができます.
>> ご意見・ご質問など お気軽にご連絡ください.info