Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Factorization machines with r

3,214 views

Published on

I introduced the Factorisation Machines and how to use it with R.

Published in: Data & Analytics
  • Be the first to comment

Factorization machines with r

  1. 1. Factorization Machines with R Shota Yasui @housecat442
  2. 2. Factorization Machines(FMs)とは? ● ちゃんと知りたい人は下記の論文を参照 ○ Factorization machines ○ S Rendle ○ 2010 IEEE International Conference on Data Mining, 995-1000 ○ http://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf ● Regression, Classification, Rankingに使える機械学習モデル。 ● 感覚的には「投入した特徴全ての組合せを加味してくれるモデル」。 ● Kaggleの”Display Advertisment Challenge”で優勝したチームがGBDTとスタッキ ングさせて使った。
  3. 3. Factorization Machinesのモデル global bias 普通の回帰式での intercept 普通の回帰部分 n個の特徴。 全パターン交互作用項 の近似部分 Wがpositive definiteなmatrixであれば、十分な サイズのkを持つmatrix,Vによって以下の様に分 解できる。 W = V・V^t 分解してモデルに代入すると求めるパラメーター の数がn*kへと減るので計算が楽になる。
  4. 4. Rでの扱い方 ● libFMexeパッケージが利用可能 ● c++で実装されたlibFMをRから使うためのパッケージ。 ● 基本的な使い方は以下の流れ。 a. libFMをインストール b. libFMexeパッケージをgithubからインストール c. R内でlibFMの場所を指定して、libFM関数を使う。
  5. 5. libFMのインストール ● http://www.libfm.org/ へ行きダウンロード ○ macであれば解凍して、cd ./解凍したディレクトリ/libfm-1.43.srcでディレクトリ を移動してから make all ○ windowsは解凍したらそのまま使える。 ● libFMexeのインストール ○ devtoolsがインストールされたRで以下を実行する。 ○ devtools::install_github("andland/libFMexe") ● 準備は一旦これでおk
  6. 6. 競馬の予測をしてみる ● データ:2014/3-2016/3のデータを地方中央問わず。 ○ あるサイトからスクレイピングしました汗 ● 1, 2着を1とし、それ以降を0とした分類問題として解く。 ● オッズの人気による予測をベースラインとして、オッズ予測よりも精度の高い分類 器を作りたい。 ● FMはデータ上で起きていなかった変数の組み合わせに対してもパラメーターが近 似されている。 ● なので、今までに起きていなかった馬の組み合わせでのレースにもちゃんと予測値 を出せる。。。ハズ。
  7. 7. データの準備 sparseMatrix形式でデータを準備。 今回はあらかじめ整形してある。 labelにしたいデータだけ取り出して、 データセットからは削る。 sampleを使ってテストデータのフラグ を立てる。 sp_matrix_libFMでsparseMatix形式の データをlibFMで読み取り可能な形式に変 換する。 data.frameからも変換できる関数がある が圧倒的に遅い。
  8. 8. 学習 pathを通すのが面倒なので、 exe_locを 使ってlibFMの場所を指定。 kの大きさの指定 学習時のiteration 学習taskの種類 regression = “r” ● libFMの結果としてtest_setに対する予測値が帰ってくる。
  9. 9. 結果 オッズの人気上位2位が勝つと想定した時の結果 precision = 3337/(3555+3337) = 0.48 FMで予測し、閾値をtraining_dataでのlabelの平均と した場合の結果。 precision = 8965/(8965+5911) = 0.6 AUROCだと0.6程度。。。泣 ● ベースラインとなる戦略よりはマシな戦略を立てられそう。 ● でもしょぼい。 ● ちなみにxgboostでやったらAUROCは0.7程度。。。orz ● 実際に馬券を買う事を考えるとこの評価では正直微妙。
  10. 10. まとめ ● libFMはRからでも使える。 ● まだ起きてない組み合わせへの予測は魅力的。 ● けどとりあえずやってみたからといって何か良い結果が出るわけでもない。 ● あと、競馬で儲けようと思ったら予測を当てるだけでなく、当たった時にリターンが 大きくなるような買い方も考えなければいけない。 ● 人生は困難でいっぱい。
  11. 11. (参考) ● libFMexeを動かすまで ○ http://qiita.com/siero5335/items/8a8eb8de8633041d865a ● Rで競馬予想をやってみた ○ https://drive.google.com/file/d/0BzS0JN_XV85MVzFzSWszdTlwckk/view ● libFMexe(github) ○ https://github.com/andland/libFMexe
  12. 12. Enjoy!

×