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

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

バックナンバーはこちら。
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

誤差関数の最小値を求めるには?

フクさん
フクさん

前回は、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,b)\)を求める必要があると思うんだけど、
どうやって求めるの?総当たり

フクさん
フクさん

まぁ、総当たりで求めるというのも一つの考え方だな。
求めたい一次関数於いて、\(a\)が傾き、\(b\)が切片なので、
適当にプロットした点に対して、それぞれを動かした場合の誤差関数\(L\)の値を見てみよう。

最小二乗法 傾き切片を動かす、傾きを動かす、切片を動かす、傾きを動かした際の誤差二乗和、切片を動かした際の誤差二乗和
太郎くん
太郎くん

中々、おもしろい動きをするねー。

誤差関数を総当たりしてる雰囲気

フクさん
フクさん

先ほどの動画は、傾きだけを動かした場合、切片だけを動かした場合で、
実際の総当たりは、もっと大量の検査をすることになる。
ここでは切片をちょっと動かして、それに対して、傾きを総当たり。
を繰り返す画像を見せよう。

最小二乗法 切片を動かす毎に傾きを動かす、傾きを動かす、切片を動かす、傾きを動かした際の誤差二乗和、切片を動かした際の誤差二乗和
太郎くん
太郎くん

これも、おもしろい動きするね。

フクさん
フクさん

ちなみに、右下の傾きの誤差の最小値に対してプロットするようにしている。
全体を通して、最小値になるプロットだけを赤くしている。

太郎くん
太郎くん

つまり、完全に総当たりを行った後の赤いプロットが求めたい\((a,b)\)がわかるってことか。

太郎くん
太郎くん

でも、これって結構時間かからない?
あと、\(a\)と\(b\)をちょっとずつ動かしているといっても、その「ちょっと」って適正な値なのかな?

フクさん
フクさん

中々鋭いね。
太郎くんの危惧するように、総当たりの場合、時間の問題、精度の問題がネックになり、現実的な手法とは言い難い

太郎くん
太郎くん

じゃーどうるすの?!!!

フクさん
フクさん

偏微分を使う。

太郎くん
太郎くん

は?

フクさん
フクさん

へ・ん・び・ぶ・ん

太郎くん
太郎くん

なんか偏頭痛がしてきた・・・。

フクさん
フクさん

偏微分は、別に複雑なものじゃないよ。
言葉の響きが「変な微分」って聞こえるからアレルギー反応をしめしちゃうのかもしれないけど、
どちらかというと、複雑で難しいものを簡単にするためのテクニックだな。
まぁ確かにその性質から、「複雑で難しいもの」を対象とするから、その印象で難しいものと認識しちゃうかもね。

太郎くん
太郎くん

とりあえず、解説はしてくれるんだよね・・・?

フクさん
フクさん

まぁ必要最低限の解説はするよ。

太郎くん
太郎くん

それを期待するか・・・。

まとめ

フクさん
フクさん

まとめだよ。

  • 誤差関数の最小値を求める方法として総当たりがある。
    • しかし、時間がかかったり、精度の設定の適切性が問えないなどの問題があり現実的な手法とは言い難い。
  • 誤差関数の最小値を求めるには偏微分を使用するのが王道。
    • 偏微分は「変な微分」ではない。
    • 偏微分自体は複雑なものではなく、複雑なものをシンプルに扱うためのもの。

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

コメント

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