crewfanqのlog

いろんな備忘録的な

機械学習初学者がLinearRegressionを試して遊んだ


諸事情で2ヶ月間、田舎に幽閉された。
その暇を持て余す間に、以前から興味があった機械学習について勉強したので
備忘録 and 恥さらしとして残したい。

■やってみたこと

couresera機械学習コースをひと通りやった。

f:id:crewfanq:20151217194902p:plain

全体的にかなり丁寧に説明してもらえるので、難易度はそこまで高く感じない。

コースは講義(日本語字幕)+演習(matlab)の形式になってるので、手を動かして講義の内容を理解できる。

courseraを経由することでmatlabのライセンスを買わなくても一定期間利用できる。 無料のOctaveを利用することも推奨していたが、抵抗がないならmatlabでいいと思う。 pythonで書くのが今の流れに乗っていると思うけど、残念ながら未対応。

正直実装より、各セクションの最後の5問クイズのほうが難しいと思う。(英語だし)

■つくったもの

ひと通り講義+演習をしたので、何かしらのアウトプットが必要なのかなあと思った。

その結果→LinearRegressionしてみた

実装力が低いので、シンプルな線形回帰を使ってみた。

線形回帰の学習パラメータをいじることで、結果が変わっていく様子を見ることができる。

■簡単な解説

赤の座標を緑の座標に射影する関数fを線形回帰で求める。

下の数値を変えることで、学習のパラメータを変えることができる。

学習効率や最急降下法のリトライ回数を変化させることで、学習結果がどのように変わるのかグラフィカルに知ることができる。

学習が終了した後、座標をクリックすることで学習に基づいた射影座標(紫)と、正しい射影座標(橙)が表示される。 橙の点が大きいのは、正しい座標と学習結果の座標がどの程度離れているか視覚的に見せる意図があったが、正直イマイチ。

■レシピ

流行ってるという噂を聞いてMEANスタックというものに手を出した。

paizaのMEANスタックに関する記事が大変参考になった。

というかほぼこのままでインフラを整えた。

client側のcontrollerに線形回帰のコードを書いている。 けど、これMVCモデル的に正しいのかな? どこにどういう風に拡張するのが作法に則っているのかも疑問だったりするから、後日調べる。(誰か教えて)

heroku上で公開してる。 公開も4コマンド程度で実現できるから、yoすごい。 mongoDBのアドオンを導入するために、クレジットカードを登録するのが微妙に抵抗があったけどしょうがない。

■雑感と後悔

頑張って作った割にサンプルそのものみたいなものができてしまった。

次があるならもう少し面白いものが作れるといいなあ。