ChunPom’s diary

数学、物理、機械学習に関する話題。あと院試、資格、大学入試まで。

xlearnでFFMを動かす(備忘録)

FM(Factorization Machines)はRendleが2010年に提案したレコメンダ向けアルゴリズムである(https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf)。

これの表現力をさらに向上させたFFM(Field-aware Factorization Machines)が2017年にYuchin Juanらにより提案された。

https://www.csie.ntu.edu.tw/~cjlin/papers/ffm.pdf

 その名の通り,カテゴリごとに異なる潜在ベクトルを用意して使い分けるFMアルゴリズムである。同著者のlibFFMなどでCのソースコードが公開されているが,Pythonで動かしたかったため,xlearn(https://xlearn-doc.readthedocs.io/en/latest/index.html)を導入することにした。xlearnではFFMだけでなく通常のFMなども使用でき,FM関係の計算環境構築に便利。以下,導入手順をまとめておく(Windows/anaconda/pythonを想定)。

 

①WSL構築,VScode,anaconda導入

 https://penyoo.hatenablog.com/entry/2019/11/30/002503の手順でOK。

②xlearn導入

2-1 cmakeインストール

 Ubuntuのterminalを開き,sudo apt install cmake

2-2 xlearnのインストール

git clone https://github.com/aksnzhy/xlearn.git

cd xlearn
mkdir build
cd build
cmake ../
make

2-3 インストール状況が100%になったら,初期動作確認。

 ./run_example.shを実行。xlearnのAAが表示されればOK。

③FFMデモコード動作確認

3-1 python開く

cd python-package

python

3-2 デモ実行

import xlearn as xl

ffm_model = xl.create_ffm() 

ffm_model.setTrain("/home/user/xlearn/demo/classification/criteo_ctr/small_train.txt") ffm_model.setValidate("/home/user/xlearn/demo/classification/criteo_ctr/small_test.txt")

param = {'task':'binary', 'lr':0.2, 'lambda':0.002, 'metric':'acc'}

ffm_model.fit(param, './model.out')

*「user」はひとそれぞれ。上記のアドレスは訓練データとテストデータのデフォルトの保存場所にしましたが,人によっては異なるかも。その場合は,windows側から保存場所を確認したいなら,適当なフォルダを開いて「\\wsl$\Ubuntu\」のおまじないを入力し,xlearnのフォルダ場所を地道に探してみてください。