パーセプトロン作った

3年生後期の授業でパターン認識を受講していたんだけど、話聞いているうちに実際に作って試したくなったので作った。 まずは一番簡単そうなパーセプトロンから。

せっかくだしScalaの勉強にもなるようにScalaでやるかーと思って始めたけど、Scala線形代数の問題やるのキビシイ気がする。 ScalaNLPのbreezeっていう線形代数向けライブラリがあったので使ってみたけれど、Scalaっぽく書こうとすると型がNothingになってしまってキビシイ。 mapとかfor式が使えないのでforとrangeみたいなの使って添字で部分行列にアクセスしたりしないといけない。

それから、列ベクトルをtoDenseMatrix拡張メソッドで行列に変換すると1行の行列になってしまうという仕様?バグ?に悩まされた。 僕のイメージだと1列の行列になる気がするんだけど良く分からないので使わないようにした。

エクセルで適当に作った線形分離可能なデータ突っ込んだらこんな感じで分離できた。 f:id:yuki_tkd:20160214164631p:plain

マージン最大化とかしてないので、ランダムで生成される重みベクトルの初期値によって毎回結果が変わる。 f:id:yuki_tkd:20160214164636p:plain

機械学習面白い!!!