この記事はエイチームブライズ/エイチームコネクト/エイチーム引越し侍 Advent Calendar 2018 16日目の記事です。
#概要
私は業務ではPHPとRubyを使っており、
pythonも機械学習もまったくやっておりませんでした。
遅ればせながら、私もここで初挑戦してみたいと思います。
私の趣味がサッカー観戦なのですが、試合データを機械学習しているこんな記事を発見しました。
http://www.football-lab.jp/column/entry/670/
こちらにあるようなSOM(自己組織化マップ)の図をつくってみたい!
ということで、2018年のデータでこんなふうに、
プレースタイルが似ているチームが可視化できる図を自分で作るのが今回のゴールです。
SOMについて詳しく知りたい方はこちらを参考に
http://gaya.jp/spiking_neuron/som.htm
http://www.brain.kyutech.ac.jp/~furukawa/data/SOMtext.pdf
#環境構築
Anacondaをこちらからインストールします。
Anacondaにはpython、モジュールやエディタがパッケージになって入っているものです。
なのでこれさえインストールしてしまえば環境は整います。やったね!
#データ
もととなるデータはfootball-labに載っている、チームスタイル指標を使わせていただきます。
項目は、攻撃セットプレー、左サイド攻撃、中央攻撃、右サイド攻撃、ショートカウンター、ロングカウンター、敵陣ポゼッション、自陣ポゼッションの8項目です。
#実装
参考にしたのはこちら!
https://codesachin.wordpress.com/2015/11/28/self-organizing-maps-with-googles-tensorflow/
tensourflowがインストールされなかったのでいれてみたらそのままでは動かず・・・
バージョン違い等の問題があるみたいなので一部修正しました。
参考:https://qiita.com/shu223/items/ef160cbe1e9d9f57c248
#問題発生
今回のデータは18チーム×8項目で、18行×8列の行列ですが、
このプログラムでは8次元のデータは可視化できず、次元圧縮をする必要があることがわかりました。
(見本は3次元のため、色で表現可能)
次元圧縮する方法もいろいろ調べましたが、タイムオーバーで間に合わず・・・・
今回は4項目に減らして4次元で行うことにします。(4次元なら可視化できるため)
ちなみに項目は、攻撃セットプレー、中央攻撃、ロングカウンター、自陣ポゼッションにしました。
#実行結果
実行結果
こうなりました。
なんか・・・・・・・・・・・・微妙ではw・・・・・?
あまり近くになってるチームがいない気がします。
左上の川崎&名古屋と左下の横浜&柏くらい・・・・。
そこで学習回数を変えて試してみました。
10回 100回
400回(初期値) 1000回
回数を重ねるごとにとチーム間の距離が等間隔に開いていっています。
今回は初期値の400回がちょうど良さそうだと感じますが、
分析するデータによってちょうどいい回数も変わってきそうなのが難しそうだと感じました。
#まとめ
- かろうじて目的のグラフは完成しました。
- しかし、クオリティーには満足行ってない&今度は8次元で実現させたいです。
- 他の手法もいろいろ試してみたいです。
#お知らせ
エイチームグループでは一緒に活躍してくれる優秀な人材を募集中です。
興味のある方はぜひともエイチームグループ採用ページ(Webエンジニア詳細ページ)よりお問い合わせ下さい。
#明日
明日は新卒エンジニアの@anneauが書いてくれますよー!楽しみですね!