バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia2-backnumber/
はじめに
まずは最もシンプルな回帰分析である、
1次関数の最小二乗法についての説明の続き。
誤差関数の偏導関数の変形について。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
【再掲】誤差関数の偏導関数

前回求めた誤差関数の偏導関数をMATLAB等のツールで扱いやすいように変形するんだっけ?

そうそう。
と言っても、方程式の形から行列形式にするだけなんだけど。

行列形式に?どうやって?

まずは前回算出した、誤差関数の偏導関数を再掲しよう。
\(
\begin{eqnarray}
\displaystyle 2a\sum x_i^2 + 2b\sum x_i &=& 2\sum x_i y_i \\
\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 \\
c
\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}
\)

OK!正解だ。
まとめ

まとめだよ。
- 誤差関数の偏導関数を連立方程式に。
- 連立方程式になったので、行列形式に表現を変えらえる。
- 行列形式で逆行列を解決させるために2×2の逆行列の公式を使用。
- 逆行列を扱えない言語の場合は、この公式を使用して逆行列を解決する必要がある。
バックナンバーはこちら。
コメント