Mahout in ActionのChapter2についての自分の理解をメモ。
推薦の定義
ユーザベース
・ユーザとアイテムの関連に基づく推薦。
・嗜好の似ている人が好きそうなものを推薦する。
・属性は考慮しない。
・Mahoutで適切に表現可能アイテムベース
・ユーザとアイテムの関連に基づく推薦。
・好きなアイテムに似ているアイテムを推薦する。
・属性は考慮しない。
・Mahoutで適切に表現可能コンテンツベース
・アイテムの属性に基づく推薦。
・Mahoutはあまりサポートしない。
・Mahoutと組み合わせて実現可能。
初めての推薦エンジン
- ここではユーザベースの推薦アルゴリズムを使用
- MahoutのインプットデータのIDは常に数字(整数)。嗜好度は大きい値がより嗜好度が強いことを意味すればどのような値でもよい。
CSV形式でインポートデータを用意。
Recommende
rの作成
・DataModel:データの保持、データへのアクセス
・UserSimilarity:ユーザ間の類似度
・UserNeighborhood:ユーザの類似グループ
・Recommender:上記コンポーネントを元に推薦アイテムを抽出 結果の分析
・現実はデータ量が膨大でノイズも含んでいる
・膨大なデータから正しい結果を素早く抽出することは重要
Recommende rの評価
- 実際のデータの一部を元にシミュレート可能
- 評価された結果と実際のデータの間での平均値の違いを計算可能
- 上記評価の値は小さいほど良い
- 上記値が0.0の場合、評価された値と本番データの差はないということ
- Recommende
rEvaluator はデータを評価用に分割し、DataModelとRecommende rを生成し、評価された値を実際のデータと比較する - 例でevaluate()メソッドにRecommende
rが渡されていないのは、メソッド内部で新たに作られたDataModelについてRecommende rを生成する必要があるため - メソッドの呼び出し元からDataModelからRecommende
rを生成するためのRecommende rBuilderを渡す必要がある。 - ここではこの章で前出の実装と同じものが生成される
- RandomUtil
s.useTestS eed()では毎回同じランダム値を取得する。本番コードで使ってはいけない。 - プログラム2.3の例では実行結果は1.0が返ってくるが、この値の意味は実装に寄って異なり、ここではAverageAbs
oluteDeffe renceRecom menderEval uatorが使われている。 - 実行結果が異なるかもしれないが、それはデータセットの分割がランダムであり、実行の度にトレーニングセットの内容が異なることによるもの。
- root-means
-square(二乗平均平方根)によるスコアリングに変更する場合は、AverageAbs oluteDiffe renceRecom menderEval uatorをRMSRecomme nderEvalua torに置き換える - evaluate()メソッドにnullの代わりにDataModelB
uilderを渡すことができ、それによってトレーニングデータからどのようにDataModelが作られるかを制御することが出来る。通常はデフォルトが良い。 - 例でevaluate()メソッドに渡されている1.0という値は入力データのどれぐらいの割合が使われるかということで、ここでは100%とという意味。
正確さと再現度の評価
- 正確さは上位の推薦結果の中の良い推薦の割合。
- 再現度は良い推薦の中の上位の推薦結果に含まれる割合。
- Mahoutはこれらの計算を極めて簡潔な方法で行うことが出来る。
- RandomUtil
s.useTestS eed()を使わない場合、ここではデータセットが小さいので、結果はデータセットのランダムな抽出に大きな影響を受ける。 - 推薦結果の良し悪しを分ける明確な境界が与えられていない場合、フレームワークがユーザごとに嗜好の平均に標準偏差を加算したものを使用する。
GroupLensのデータセットを評価する
- GroupLensとは実際のユーザの映画に対する評価のリサーチプロジェクトで、いくつかの種類の大きさのデータセットを提供している
- ここでは 100Kデータセットを使用 http://www
.grouplens .org/node/ 73 - ダウンロードしたファイルを解凍した中に含まれている ua.base はタブ区切りのユーザID、アイテムID、評価、その他の追加の情報のファイル
- FileDataMo
delで扱うことができる。前出のintro.csvの代わりに使用 - Slope One Recommende
rを使用してみる - Recommende
rBuilderでSlopeOneRe commenderを使用するようにすることで利用可能 - サンプルを実行すると非常に高速だが、Slope Oneアルゴリズムが常に高速というわけではない
- 計算の前処理に非常に時間がかかる場合がある
- この違いは実際のデータでテスト・評価することの大切さと、Mahoutを使うと比較的簡単に行えることを示している
posted by
akanuma
on Sun 6 Nov 2011
at 22:18
with
2 comments
初めての推薦エンジンのところ 「属性データはどんなものでも可能。」 は preference value だから属性ではなく好みの強さですね。嗜好度? 大きな値がより好きであれば、なので実際は数値しかダメなんじゃないかなあ。(試していません)
ご指摘ありがとうございます。「嗜好度は大きい値がより嗜好度が強いことを意味すればどのような値でもよい。」という感じに修正してみました。