2

MovieLens 数据集提供了一个包含列的表:

userid | movieid | tag | timestamp

我无法重现他们修剪 MovieLens 数据集的方式:

Tag Informed Collaborative Filtering,作者:Zhen、Li 和 Young

在上述论文的 4.1 Data Set 中,它写道“对于标签信息,我们只保留那些添加在至少 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;

我得到了一个包含 1760 个用户的列表,他们标记了 3 个不同的标签。但是,某些标签未添加到至少 3 部不同的电影上。

任何帮助表示赞赏。

4

1 回答 1

0

您不会在任何地方限制每个标签的电影。似乎您应该首先丢弃至少三部电影和三个用户未使用过的标签。然后限制为已标记 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 回答