2016-04-14 19 views
1

私は<user, item>のデータセットを持っています。各エントリはどのユーザがどのアイテムを購入したかを記録します。推奨タスクでPythonのFastFMライブラリ(分解マシン)を使用するには?

<u1, i1> 
<u1, i4> 
<u2, i2> 
<u3, i2>... 

Iは

no_of_features = no_of_users + no_of_items 

で符号化されたデータセットを作成し、これらのエントリの各々は、その特定のアイテムを購入したユーザを表すように、1に出力変数yを設定しています。

注:この場合、すべてのyの値は1です。

エンコードされたデータセットには、次のようになります。

user1 user2 user3 .... item1 item2 item3 item4 .... y 
    1  0 0 .... 1  0  0  0 .... 1 
    1  0 0 .... 0  0  0  1 .... 1 
    0  1 0 .... 0  1  0  0 .... 1 
    0  0 1 .... 0  1  0  0 .... 1 

を今、私は、任意のユーザxと任意の項目y用ケース<x, y>ための推奨事項を生成するためにfastFMを使用する方法を知っていただきたいと思いますか?

明らかにregressionは画像のとおりです。だからclassificationまたはrankingのアプローチをfastFMにする必要がありますか?またどのように?例えばclassificationを使用する場合、y=0でインスタンスを生成する必要がありますか?私がrankingのアプローチを使用している場合、ランキングアプローチの出力によってアイテムを並べ、より高い値を持つものを推奨しますか?

+0

私は[Data Science Exchange](http://datascience.stackexchange.com/)がこれのために良い場所になると思います。しかし、私はstackexchangeのプロユーザーではありません:-) –

答えて

0

問題の直感は良いです - 今、私たちは肯定的な例だけを保存しています。これは、ユーザーが実際にアイテムを購入した状況です。

この場合、ランキング機能を使用する必要があります。特にfastFMにベイジアンパーソナライズランキング(BRP)が実装されている場合。さらに、ほとんどの場合、結果が推奨される順序付きリストでユーザーに提示される場合、推奨事項をランキング関連の問題として準備することを検討する必要があります。 Netflix Prizeのように、評価(星)は予測しません。

BPRは本当に簡単な方法です。しかし、それを理解するために重要なことが1つあります。yの推定値は気にしません。 は、この出力を使用して推定例を並べ替える順序が重要です。

したがって、学習フェーズでは、正と負の例を用意する必要があります。 fastFMのドキュメントからfit methodをご覧ください。あなたの否定的な例を得るために、最も簡単な方法は、利用可能なすべての項目セットからランダムなものを(一様に配布する)取得することです。このランダムな例が実際に正でないかどうかだけを確認することができます(正規化以外のこの例からは何も学ばないでしょう;-))。あなたが準備したポジティブな入力データは、しばしば非常に疎である(例:密度< 1%)ので、無作為抽出は、ほとんどの場合、均一なサンプリングがうまくいっています。しかし、経験的なアイテムの配布を使用するなど、ネガティブな例に対してさまざまなサンプリングを試みることができます。それはいくつかの設定でうまくいくかもしれませんが、あなたの "長い尾"がそのまま残されている可能性が高いです(これは私の経験でした)。あるいは、あなたはあなたのデータについてもっと知っているかもしれません:-)

+0

私はあなたの答えを理解するので、ランダムに ''のペアを作成します(ユーザー 'u'は**アイテム' i'を購入していません) 'y = 0'とし、出力に応じてランキングとソートを適用しますか? – Sangram

+1

ほとんど;-) yの値を忘れてしまった。この場合のyはです。まず、あなたが言ったように - ユーザーがこのアイテムを購入/クリックした。 2番目はランダムサンプルです。残りの部分は、出力ごとに細かくフィット&ソートされます。あなたのケースでうまくいくかどうかを教えてください:-) –

関連する問題