如何按频率修剪数据集以符合论文的描述

Posted

技术标签:

【中文标题】如何按频率修剪数据集以符合论文的描述【英文标题】:How to prune data set by frequency to conform to paper's description 【发布时间】:2011-02-28 08:34:18 【问题描述】:

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

userid | movieid | tag | timestamp

我无法重现他们修剪以下中使用的 MovieLens 数据集的方式:

Tag Informed Collaborative Filtering, by Zhen, Li and 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 部不同的电影中。

感谢任何帮助。

【问题讨论】:

您使用的是什么关系型数据库?效果是累积的还是独立的?例如如果一个标签因为不在至少 3 个不同的电影上而被丢弃,这种删除是否会影响那些在标签历史中使用至少 3 个不同标签的用户的计算? (独立似乎更有意义) 我正在使用 mysql。如果一个标签因为不在至少 3 个不同的电影上而被丢弃,我认为删除应该会影响那些在标签历史中使用至少 3 个不同标签的用户的计算。该论文的作者得到了一个包含 757 个用户的列表。如果它是独立的,使用我在第一篇文章中键入的 SQL 查询应该得到 1760。 【参考方案1】:

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

【讨论】:

以上是关于如何按频率修剪数据集以符合论文的描述的主要内容,如果未能解决你的问题,请参考以下文章

如何使用外键连接两个数据集以创建新数据集?

如何在谷歌 colab 中读取图像数据集以进行深度学习?

如何将图像转换为数据集以进行语义分割

如何修复重塑我的数据集以进行交叉验证?

如何从 .csv 文件中拆分数据集以进行训练和测试?

如何拆分自己的数据集以在 Tensorflow CNN 中进行训练和验证