2

MovieLensデータセットは、列を含むテーブルを提供します。

userid | movieid | tag | timestamp

次の場所で使用されているMovieLensデータセットを整理する方法を再現するのに問題があります。

タグ情報に基づく協調フィルタリング、Zhen、Li、Young

上記の論文の4.1データセットには、「タグ付け情報については、少なくとも3つの異なる映画に追加されたタグのみを保持します。ユーザーに関しては、少なくとも3つの異なるタグを使用したユーザーのみを保持します。タグ付けの履歴。映画の場合、少なくとも3つの異なるタグで注釈が付けられた映画のみを保持します。」

データベースにクエリを実行しようとしました:

select TMP.userid, count(*) as tagnum
from (select distinct T.userid as userid, T.tag as tag from tags T) AS TMP 
group by TMP.userid
having tagnum >= 3;

3つの異なるタグにラベルを付けた1760人のユーザーのリストを取得しました。ただし、一部のタグは、少なくとも3つの異なる映画に追加されていません。

どんな助けでも大歓迎です。

4

1 に答える 1

0

タグごとの映画をどこにも制限していません。少なくとも 3 つの映画で 3 人のユーザーによって使用されていないタグを最初に破棄する必要があるようです。次に、タグ付けを 3 回行ったユーザーに限定します。

このクエリは、3 人以上のユーザーによってタグ付けされたタグと、3 つ以上の映画でタグ付けされたタグを提供するはずです。

select T1.tag,
       (select count( distinct T2.movieid ) from tags T2 where T2.tag = T1.tag) as mcount,
       (select count( distinct T3.userid ) from tags T3 where T3.tag = T1.tag) as ucount
from tags T1
having mcount >= 3 and ucount >= 3;

代わりにユーザーごとにクエリを実行し、全体をサブクエリとして使用すると、3 回もタグ付けしたユーザーを確認できるはずです。

select T4.user, count(*) as ucount from
 (select T1.userid as user,
         (select count( distinct T2.movieid ) from tags T2 where T2.tag = T1.tag) as mcount,
         (select count( distinct T3.userid ) from tags T3 where T3.tag = T1.tag) as ucount
  from tags T1
  having mcount >= 3 and ucount >= 3) as T4
group by user
having ucount > 3;
于 2011-08-17T10:10:20.453 に答える