私は暗黙のフィードバックデータセットのために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の正しいデータセット形式で参加する場合
デカルトを作成する方法について尋ねられた他の質問には参加しません。だからそれは別の質問です。閉めないでください。
ちょっと@baktaawarあなたの質問に明確な答えが見つかりましたか?私はかなり興味があります! – Duesentrieb
@Duesentriebまあまあではありませんが、私がここに書いたものは正しいと思います。暗黙のフィードバックのためには、あなたがいくつかの推奨事項を持っていなくてもOKでない限り、デカルト結合をしなければならないでしょう。私はClouderaのSean Owenとこれに関する電子メールで長い議論を持ち、後に彼は私の言うことが意味をなされることに同意した。私はこれがスパークプラグインが実現していない、おそらくバグのようなものだと思います。 – Baktaawar