30分でできる分散レコメンデーション:パラメータを決定する。

先のログでは、Parallel ALS(Alternating Least Squares)による分散レコメンデーション環境を手っ取り早く用意して、チェコスロバキアの「Libimseti.czという出会い系サイト(http://www.libimseti.cz/)」の1700万件の評価データで、分散レコメンデーションを実行した。

Mahoutでの、Parallel ALSの実装には、2つのパラメータ(λと、フィーチャーの数)がある。実行用に用意したShellでは、λ=0.20、フィーチャーの数を20とした。これは、この2つのパラメータを変えて、簡単なシミュレーションをした結果から決定した。

Featuresの数

フィーチャーの数を20と50にし、RMSEを比較したところ以下の結果を得た。


フィーチャーの数は、縮約する次元を表しており、一見、多いほうがよい精度を得られるように感じられる。反面、以前のログに示したように、フィーチャーの次元は「行列積演算」と「掃出し法による逆行列計算」を単一ノードで動かす次数を意味しており、これを増やすことでフィーチャー数の3乗以上のオーダーで演算回数が増加する。
上の結果をみると、直感に反して、20の方がよい予測精度となっており、かつ、演算速度も速い。よって、フィーチャー数は20とした。

λの値

Mahoutで提供されているサンプル(factorize-movielens-1M.sh)では、λ=0.065とされており、この値は、原論文「Large-scale Parallel Collaborative Filtering for the Netflix Prize」でNetflix Prizeデータを使った場合の最適値である。
今回のサンプルデータで実験したところ、以下の結果を得た。

RMSEの評価

Mahoutイン・アクションの中で、Libimsetiのデータがユーザーベース・レコメンデーション、アイテムベース・レコメンデーション、Slope Oneレコメンデーションの3通りの方法で評価されている。
そこから引用すると、

  • ユーザーベースのレコメンダー(距離尺度=ユークリッド距離、近傍=2):平均絶対誤差=1.12
  • アイテムベースのレコメンダー(距離尺度=Pearsonの相関係数):平均絶対誤差=2.32
  • Slope Oneレコメンダー:平均絶対誤差=1.41

という精度が得られるとのこと。

これらは分散レコメンデーションではなく、1つのマシンで実行された結果であって、平均絶対誤差で評価されている。
これに対して、Parallel ALSは分散レコメンデーション・エンジンである。RMSEの方が、平均絶対誤差よりも大きくでることを考えれば、他の結果に見劣りしない結果と言えるだろう。

Mahoutイン・アクション

Mahoutイン・アクション