MATLAB,Python,Scilab,Julia比較 第2章 その7【最小二乗法⑥】

MATLAB,Python,Scilab,Julia比較 第2章 その7【最小二乗法⑥】 数値計算
MATLAB,Python,Scilab,Julia比較 第2章 その7【最小二乗法⑥】

バックナンバーはこちら。
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の逆行列の公式を使用。
    • 逆行列を扱えない言語の場合は、この公式を使用して逆行列を解決する必要がある。

バックナンバーはこちら。

コメント

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