最小二乗法(理論編)
今回は最小二乗法について解説します。
まず解説の前に私が機械学習の勉強をする際に意識していることをお伝えします。
それは自分が今学んでいる技術・仕組みはアイデアなのかプロセスなのかということを明確にすることです。
「アイデア」は問題をどのように数学的に解くかの方針を立てることになります。
それに対し「プロセス」は実際にその問題の解をどのように探索するかという手順になります。
今回取り扱う最小二乗法は「アイデア」です。
機械学習においては最終的にプログラムに書き起こす必要性が出てきます。
すると、我々が普段使っている人間に分かりやすい形の演算・記号が一部使えなくなる場合があります。そのため、数式の上では簡単に表せる問題でも答えの導出が面倒だったり実装の際に混乱したりします。
逆にコンピュータは人間よりも圧倒的に計算スピードが早いので面倒で地道な探索問題も高速で処理してくれます。
つまり人間が導いた数学的アイデアとコンピュータの計算リソースが武器になるということです。
さて、本題の最小二乗法ですが、必要となる数学の知識は以下の通りです。
高校〜大学の数学についての解説ページも別途作成予定なのでしばらく待っていてください。
前回、「機械学習とは?」で出した具体例をそのまま利用して話を進めていきます。
下図は10人の人の身長と体重をデータにしたものです。(本当は乱数で適当に作った。)
この10人の身長と体重にどのような(数値的な)関係があるのかを考えます。
それが分かっていると11人目の身長が与えられた時点で、その人の体重を予測することができそうです。
そこで右側の図のようにそれっぽい直線(青)を引きます。すると、データ(赤)がそれにしたがって変動しているかのように見えます。
では、そのそれっぽい直線はどのように「それっぽい」と判断すれば良いのでしょうか?
それは各点と直線との差が最小になるような直線が「それっぽい」のではないでしょうか。
課題:「各点と直線との差」が最小になるような直線のパラメータ(a,b)を求める。
「各点と直線との差」は正負どちらの値も取り得るため、符号を揃えるためにそれぞれ2乗したあと総和を取ります。
よって今回考える「各点と直線との差」はaとbをパラメータとする2変数関数であることが分かります。
※符号を揃えるためなら4乗でも6乗でも良さそうなのですが、2乗が1番便利です。
という点から2乗以外を使うことはオススメしません。
まして絶対値は線形的に表すと微分不可能なので数学的にも扱いづらくなります。
この2変数関数を立体的にプロットするとお椀のように底が丸まった図になります。このお椀型は誤差の大きさを表しているので誤差が最小になる(a,b)の組はお椀の底の位置になるわけです。
このお椀型はa軸を正面に眺めても、b軸を正面に眺めても放物線を描いているのが分かります。よって偏微分をした値が0になるような(a,b)の組み合わせを考えます。
※偏微分とは…
ある変数(今回はaかb)だけが文字、それ以外は全て数字として扱い、微分を行う作業のこと。→aまたはbに着目して微分すること。
それぞれ偏微分した値を連立させるとaが導出できます。(上図の青く囲まれている部分)
この時aはXとYの共分散とXの分散を用いて表せることが分かり、非常にシンプルな式になりました。
ちなみに誤差を求める時に2乗を使わないとこのような綺麗な式にはなりません。
このように誤差を小さくすることで新たに入手したデータについて推論する武器を揃えることができました。
直線の式が分かってしまえばコンピュータにも11人目の人の身長から体重を推理することができます。