2017-05-21 3 views
1

私は暗黙のフィードバックデータセットのためにSparkMLで協調フィルタリングを実行しています。Sparkでの協調フィルタリング

私のデータセットは以下のようになります。

User Item viewed 
1 A 1 
1 B 2 
2 A 3 
2 C 4 
3 A 3 
3 B 2 
3 D 6 

私には56Kユニークユーザーと8.5Kユニークアイテムがあります。ただし、各ユーザーには各アイテムの行がなく、この場合は評価/表示されたアイテムのみが表示されます。これは、暗黙的なフィードバックデータセットです。ここでは、[表示される列]は[いいえ]です。ユーザーがアイテムを閲覧した回数。

これは、SparkMLが期待する形式(userid、itemid、rating)です。

私の質問は、SparkML ALSアルゴリズムの場合と同じようにこのデータセットをフィードするだけですか、すべてのユーザーとアイテムのデカルト結合を作成する必要がありますか。なぜなら、このデータセットにはユーザーとアイテムのすべての組み合わせが存在しないため、ALSアルゴリズムはユーザーとアイテムのすべての組み合わせを表示しないため、これらのユーザーに対してNull値を与えることになります。

ユーザーがまだ見ていないアイテムについては、各ユーザーごとに行を作成してビューを0として表示する必要があります。以下のように?

User Item Viewed 
1 A 1 
1 B 2 
1 C 0 
1 D 0 
2 A 3 
2 C 4 
2 B 0 
2 D 0 
3 A 3 
3 B 2 
3 D 6 
3 C 0 

これが正しい場合は、56Kユニークユーザーと8.5Kユニークアイテムがあります。それは56 * 8.5K = 400MMの行を作るでしょう。

ユーザーが何百万人で、何百万人もいるとします。その場合、巨大なデータセットになります。

私はデカルトのことをしました。以前のように、Null値を持たない正しい予測を与えるようです。しかし、Spark Collaborativeフィルタリングのためにデータセットを準備する必要があるかどうかを確認したいと思いますか?

ここで正しいですか?

EDIT:デカルトはスパークMLの正しいデータセット形式で参加する場合

デカルトを作成する方法について尋ねられた他の質問には参加しません。だからそれは別の質問です。閉めないでください。

+0

ちょっと@baktaawarあなたの質問に明確な答えが見つかりましたか?私はかなり興味があります! – Duesentrieb

+0

@Duesentriebまあまあではありませんが、私がここに書いたものは正しいと思います。暗黙のフィードバックのためには、あなたがいくつかの推奨事項を持っていなくてもOKでない限り、デカルト結合をしなければならないでしょう。私はClouderaのSean Owenとこれに関する電子メールで長い議論を持ち、後に彼は私の言うことが意味をなされることに同意した。私はこれがスパークプラグインが実現していない、おそらくバグのようなものだと思います。 – Baktaawar

答えて

1

この仮定は明らかに間違っている:ユーザーとアイテムのすべての組み合わせは、このデータセットには存在しないので、ALSアルゴリズムは、ユーザとアイテムのすべての組み合わせは表示されませんので、ヌルを与えるということで

理由それらの予測値。

この質問は無効です。 ユーザーとアイテムのすべての組み合わせは必要ありません。必要なのは、各アイテムと各ユーザーのデータです。ユーザーや回答を見たことがない場合は、直感的に計算された要素には表示されません。その理由については判断できません。それでおしまい。このについて

ので、ユーザはまだ見ていない項目について、私たちは、それぞれのユーザーのために、あまりにもそのための行を作成する必要がありますし、0としてビューを与えますか?以下のように?

これは、暗黙的なフィードバックをある程度働くかもしれないが、明示的な1 でそれは明らかに間違ってです。格付けは可能な限り低い格付けと同じではありません。

+0

明示的には、ユーザがアイテムを見たことのないユーザとアイテムの行を作成する必要はありません。両方のフィードバックがあるので。しかし暗黙的には、すべてのユーザーとアイテムのデカルト結合を作成する必要があることを意味します。 – Baktaawar

関連する問題