【入門】最小二乗法の初歩【数値計算】

【入門】最小二乗法の初歩【数値計算】 数値計算
【入門】最小二乗法の初歩【数値計算】

誤差関数の偏導関数を求める

1次関数に於ける最小二乗法の誤差関数は以下。【再掲】

\(
\begin{eqnarray}
L(a,b)&=&\displaystyle\sum_{i=0}^n\{y_i -(ax_i +b)\}^2 \\
&=&\displaystyle a^2\sum x_i^2+nb^2+\sum y_i^2-2a\sum x_i y_i -2b\sum y_i +2ab\sum x_i
\end{eqnarray}
\)

これの偏導関数を求める

偏導関数を頑張って求める

\(a\)による偏微分

\(
\begin{eqnarray}
\displaystyle\frac{\partial L(a,b)}{\partial a}
&=&
\displaystyle\frac{\partial (a^2 \sum x_i^2 + b^2\sum 1 + \sum y^2 -2a\sum x_i y_i-2b\sum y_i+2ab\sum x_i)}{\partial a} \\
&=&
\displaystyle 2a\sum x_i^2 -2\sum x_i y_i + 2b\sum x_i=0\\
\displaystyle 2a\sum x_i^2 + 2b\sum x_i &=& 2\sum x_i y_i
\end{eqnarray}
\)

\(b\)による偏微分

\(
\begin{eqnarray}
\displaystyle\frac{\partial L(a,b)}{\partial b}
&=&
\displaystyle\frac{\partial (a^2 \sum x_i^2 + b^2\sum 1 + \sum y^2 -2a\sum x_i y_i-2b\sum y_i+2ab\sum x_i)}{\partial a} \\
&=&
\displaystyle 2b\sum 1 -2b\sum y_i + 2a\sum x_i=0\\
\displaystyle 2a\sum x_i + 2b\sum 1 &=& 2\sum y_i
\end{eqnarray}
\)

項数が多いからややこしい部分有るが、一個一個はそれほど難しい感じではないだろう。
これは偏微分様様な点である。

誤差関数の偏導関数を行列形式へ

まず、先の偏導関数は全体を2で割れる。
そして、この2つの方程式を\(a,b\)に対しての連立方程式として、
行列形式に表現しなおすと以下になる。

\(
\begin{bmatrix}
\sum x_i^2 && \sum x_i \\
\sum x_i && \sum 1
\end{bmatrix}
\begin{bmatrix}
a \\
b
\end{bmatrix}=
\begin{bmatrix}
\sum x_i y_i \\
\sum y_i
\end{bmatrix}
\)

連立方程式の形にすれば、行列形式で表現できるのがポイント。
そして、\(a,b\)を求めたいので、以下に変形する。

\(
\begin{bmatrix}
a \\
b
\end{bmatrix}=
\begin{bmatrix}
\sum x_i^2 && \sum x_i \\
\sum x_i && \sum 1
\end{bmatrix}^{-1}
\begin{bmatrix}
\sum x_i y_i \\
\sum y_i
\end{bmatrix}
\)

これで、\(a,b\)が求まる式になった。

さらに変形

逆行列のままでもMATLAB等のツールとしては問題ないが、
C言語のような行列を扱えない言語を想定した場合、逆行列を解決する必要がある
ここでは以下の公式を使用する。

\(
\begin{bmatrix}
a && b \\
c && d
\end{bmatrix}^{-1}=
\displaystyle\frac{1}{ad-cb}
\begin{bmatrix}
d && -b \\
-c && a
\end{bmatrix}
\)

これに当てはめると以下になる。

\(
\begin{bmatrix}
a \\
b
\end{bmatrix}=
\displaystyle\frac{1}{\sum x_i^2 \sum 1-(\sum x_i)^2}
\begin{bmatrix}
\sum 1 && -\sum x_i \\
-\sum x_i && \sum x_i^2
\end{bmatrix}
\begin{bmatrix}
\sum x_i y_i \\
\sum y_i
\end{bmatrix}
\)

ここまで来たら、\(a,b\)は求まる。

\(
\begin{eqnarray}
\displaystyle a&=&\frac{n\sum x_i y_i – \sum x_i \sum y_i}{n\sum x_i^2 – (\sum x_i)^2} \\
\displaystyle b&=&\frac{-\sum x_i \sum x_i y_i + \sum x_i^2 \sum y_i}{n\sum x_i^2 – (\sum x_i)^2}
\end{eqnarray}
\)

まとめ

  • 最小二乗法の初歩として1次関数の最小二乗法を解説。
  • 誤差関数を特定し最小化したものが求めたい線となる。
    • 最小化方法は以下
      • 総当たり(現実的ではない)
      • 偏微分を使う
  • 連立方程式の形にできれば行列で表現でき逆行列が利用できる。

MATLAB、Python、Scilab、Julia比較ページはこちら

コメント

タイトルとURLをコピーしました