しんさんのブログ

科学や技術のこと読書のことなど

機械学習を勉強してみる:「ITエンジニアのための機械学習理論入門」: 2章を読んでみた。最小二乗法は理系出身者にはなつかしい。

2章のテーマは最小二乗法です。
最小二乗法と聞いて理系出身者なら実験データのフィッテングを思い出すのではないでしょうか。
実験データを直線フィッテングすることで、ある物理量の推定を行うなど学生実験でやったことあるという方もおられると思います。
この章で解説されているのは、そういう手法と大きく変わるものではないのですが、機械学習という観点から、注意すべき点や間違いやすい点を丁寧に説明しています。

まず最初はデータの多項式近似ということで、あたえられたデータセットに対してそれらの点を一番うまく近似できる曲線を求めてみようということをやってみます。
いわゆるこんな図を書いてみるということです。(点は与えられたデータで、実線が推測された曲線。サンプル02-square_error.pyを実行した結果)
f:id:wshinya:20160128123735p:plain
この曲線を求める方法が、最小二乗法なのです。
いろんな曲線の可能性がある中で、誤差が最小になるという条件を課すとこういう曲線が決まります。
とここでちょっと待てよと、そもそも多項式近似というからには何次の多項式か決めてから推定する曲線を決めないといけないですよね。
それに関しては、本書で詳しく述べられています。
ちなみに上のグラフのMが展開の次数で、0, 1, 3, 9次の多項式近似となります。
本書にしばしば出てくる「数学徒の小部屋」というコラムには、最小二乗法での近似多項式の次数とデータセットの個数の満たすべき条件が、数式の変形も飛ばすことなく詳細に述べられています。
この本を読むときには、コラム欄だからと読み飛ばさずコラム欄をきちんと把握することで、機械学習の理論的なバックグラウンドを正しく取得できますし、さらに深い学習の手がかりを得ることもできます。ただし、大学で線形代数を学んでいないと結構難しい内容ですしあくまでコラムですので説明を端折っている部分もありますから、このあたりは別の資料の解説を参照した方が分かりやすいかもしれません。
ここの部分の解説は以下の著者のブログにあります。
enakai00.hatenablog.com
ここまで見ると、この最小2乗モデルは解析的に解けるわけで、逆に解析的に解けるから最小2乗法を採用したともいえるのですが、著者はこれに関して簡単で明確な数学モデルを採用する理由として、データサイエンスにおいてモデルの数学的性質がよくわかっていれば得られた結果の意味を深く理解でき、現実のビジネスに役立つ判断指標へより適切に変換できると述べています。

さて、上の4つのグラフの右下をみると、赤い曲線が入力データセットの青い点を全部踏んでいますが、見るからに無理やり通っている感じがします。
例えばデータが2点だけの場合、直線y=ax + bはaとbを両方(M=2)動かすことができればこの2点を通る直線は必ず引くことができます。これがオーバーフィッテイングです。
このオーバーフィッティングをどうやって検出し解析するかについても述べられています。
ここまで読んで初めて、多項式の何次までの近似がいいのかが、分かるわけです。
いいかどうかの基準を決めるにも、仮説・検証という科学的な手法が重要になります。
これを簡単に言ってしまえば、曲線を決めるのに使ったのと別のデータを用意しておいて、曲線がその別のデータにもうまくフィットしているかどうか調べるといいよ、ということです。

最後にデータが多ければオーバーフィッテングが起きにくいんじゃないかという当たり前の疑問に対して実際にコードを走らせて確かにその通りだよ、と解説しています。

2章は以上です。この章を読めば、最小2乗法の最小限のしかしもっとも重要なエッセンスのすべてを習得できます。