RでFactorization Machinesを動かす(備忘録)
FM(Factorization Machines)はRendleが2010年に提案したレコメンダ向けアルゴリズムである。
レコメンダ向けといえど、より一般的な回帰や分類問題にも使用することができ,その汎用性の高さや小規模データでも高精度なモデルを構築できる点で人気の手法である。本記事は,すでにGitHubでソフト化されているFMツール「libFM」を,R上で動かす際の備忘録。OSはWindowsを想定。なお,元のlibFMはC++ベースで構築されている。
筆者自身RもFMも初心者であったため,導入にいろいろと嵌ってしまった...このようなことが起こらないよう,初心者向けに以下の導入手順をまとめておく。
①Rインストール
1-1 CRAN(The Comprehensive R Archive Network)にアクセス。
1-2 Download R for Windowsに行き,「base」をインストール
1-3 続いて「Rtools」もインストール。
これがないと,後述するdevtoolコマンドが起動しない
②libFM exe インストール
2-1 Rendleのサイトにアクセス。
2-2 「libfm-1.40.windows.zip」をダウンロード。適当な場所に解凍しておく。
③ PATH設定
3-1 「システム環境変数」→「環境変数」→ユーザーの環境変数から「Path」の編集
3-2 2-2の保存場所をPathに追加
④R起動とlibFMの立ち上げ
4-1 Rを起動しコンソール開く
4-2 Sys.getenv("PATH") を打ち込み、2-2のPathが有効になってることを確認
4-3 getwd() で現在のディレクトリを確認した上で,「ファイル」→「ディレクトリの変更」から,所望のディレクトリに移動(デフォルトのonedrive直下がキモいので)。
4-4 下記資料7P目に従ってそのディレクトリに書き込み権限を付与。
4-5 install.packages("devtools", type = "win.binary") でdevlopパッケージをインストール
4-6 library(devtools)でdevlopを呼び出し,devtools::install_github("andland/libFMexe")
⑤R上でlibFMの基本動作確認
5-1 Rコンソール上で,以下のサンプルコードを入力
library(libFMexe)
data(movie_lens)
set.seed(1)
train_rows = sample.int(nrow(movie_lens), nrow(movie_lens) * 2 / 3)
train = movie_lens[train_rows, ]
test = movie_lens[-train_rows, ]
predFM = libFM(train, test, Rating ~ User + Movie,task = "r", dim = 10, iter = 500)
mean((predFM - test$Rating)^2)
5-2 予測誤差が出てきたか確認!
以上の手順で,R上でlibFMが動かせるようになった。FMに関する情報は書籍化もされている。興味のある方はドウゾ。
参考文献を示す。
<R導入手順>
<libFM導入手順>
<R初期設定>