自分で実装した Factorization Machines による Bayesian Personalized Ranking を用いた implicit feedback の推定はうまくいった
Factorization Machines で Bayesian Personalized Ranking を用いた implicit feedback の推定を行いたかったけどうまくいかなかった - 糞ネット弁慶
Matrix Factorization で Bayesian Personalized Ranking を用いた implicit feedback の推定はうまくいった - 糞ネット弁慶
の続き.
要約
- Bayesian Personalized Ranking がまだまだ諦められない
- 前回の実装を発展させ, Factorization Machines を実装して推定したところ AUC が適切な値になった
- fastFM の使い方が本当に謎.
手法
Factorization Machines である.
入力が「誰が何を買ったか」の 0/1 のみであるとし,その他の特徴量を用いないとすると,
Matrix Factorization は の に対する評価は前回同様 となる.この時 は共に 次元の低次元表現ベクトル.
Factorization Machines の交互作用を色々と含んだ式をこれに当てはめると となる.ただ が加わっただけであwることがわかる. は 次元の行列であり, は 次元のベクトル.
実装
推定する際,本来は であるのだけど, となるため,勾配の計算時にが消えてしまう.そのため今回は は 次元で推定している.
実験
データセットは MovieLens 100K Dataset | GroupLens . 5-fold CV 用にデータが既に分かれているのでそれに従う.
元データは Rating だが, implicit feedback の状況を作りたいので,「ユーザが映画をレビューしたかどうか」とし,レビューしていた場合は '1' とする.
学習率は 0.01 ,正則化は V/W 共に = 0.01,行列分解の次元数を 10 とした時,SGD のステップ数とテストデータに対する AUC の平均値との関係を以下に記す.
ステップ数 | AUC |
---|---|
1 * 80000 | 0.5537658848362093 |
10 * 80000 | 0.7635102655525375 |
50 * 80000 | 0.8624333710084262 |
50 * 80000 (MF) | 0.8091419600355472 |
適切に学習できており,ナイーブな Matrix Factorization より改善している.やはり Factorization Machines は少なくともこのデータ,および限定された特徴量ではうまく動いていることがわかる.
ここからは特徴量を増やすことで精度が改善するか確認したい.
では何が問題か
GitHub - ibayer/fastFM: fastFM: A Library for Factorization Machinesの正しい使い方がわかっていない.
自分だけが勘違いしているのかもしれないが,他の人も同じように失敗しているし,そもそもこれで成功している人を見かけない.