気になっていた O'REILLY 「実践 機械学習システム」をやっと買った。




これからちょっとずつ読み進めていこう。
まずは「第1章 Pythonではじめる機械学習」 から。

この本は、Pythonのライブラリである Numpy、Scipyを用い、scikit-learn で機械学習を学びます。 

準備として、


ソースコードを利用

この ch01 配下の .py をダウンロードして使う。

 ch01/
  data/
    web_traffic.tsv 
  gen_webstats.py
  analyze_webstats.py
  performance_test.py 


現状(2015/4/27時点)、このweb_traffic.tsv は、
1.5.1 データを読み込む で紹介されている不適切な値 nan は含んでいない。

サンプルプログラムの .py ファイル内の __file__ は、実際の環境に合わせて編集するべきものと、勝手に思い込んでいたが、実際には .py を実行するディレクトリに data フォルダを作ってやれば、そのまま実行できた。


analyze_webstats.py の実行中に、polyfitで warning が出たが、とりあえず実行は終わり png ファイルも生成された。

>>> f100 = sp.poly1d(sp.polyfit(x, y, 100))
/usr/lib/pymodules/python2.7/numpy/lib/polynomial.py:560: RankWarning: Polyfit may be poorly conditioned
  warnings.warn(msg, RankWarning)
>>> 

SciPyの numpy.polyfit

に、この原因について、
High-order polynomials may oscillate wildly:
と書かれている。

境目となるのは、コマンドラインから確認すると、

>>> f33 = sp.poly1d(sp.polyfit(xp, y, 33))
>>> f34 = sp.poly1d(sp.polyfit(xp, y, 34))
>>> f35 = sp.poly1d(sp.polyfit(xp, y, 35))
/usr/lib/pymodules/python2.7/numpy/lib/polynomial.py:560: RankWarning: Polyfit may be poorly conditioned
  warnings.warn(msg, RankWarning)
>>> 

であった。analyze_webstats.py の f100 の 100 を 30 に下げて、.py を実行。 あれ? 変わらず。
30 をさらに下げていくと、結局、後半の polyfit は 10 でも引っかかるようだ。


で、肝心の最適なモデルを決めることについて、本では 次数 2 のモデルが誤差が最小となっているが、analyze_webstats.py を実行する毎に変化する。次数 1 のときもあれば、次数 10 のときもある。

あれ? なんか変だな。

とりあえず、ひと通り進めてから考えよう。第1章でコケてるわけにはいかない。