使用余弦计算项目到项目的相似性

数据挖掘 推荐系统 相似 余弦距离
2022-02-22 11:20:17

我有一个“用户 x 项目”矩阵,如下所示:

user item1 item2 item3
u1   2     0     3
u2   1     2     0
u3   4     3     1
u4   0     2     2

我想根据用户计算项目之间的相似性。例如,为了计算项目 i1 和 i2 之间的相似度,我只选择对这两个项目都赋值的用户。

两项(i1 和 i2)之间的余弦相似度如下:

cos(v1,v2) = (1*2 + 4*3)/sqrt[(1 + 4)*(16+9)] 

我的问题是关于项目与项目的相似性,我应该考虑所有用户,还是只考虑为项目分配值的普通用户?

1个回答

过滤用户会在您的训练数据中产生偏差。这可能是好是坏,取决于您的数据和目标。对于您的特定系统,最好的找出方法是尝试和测试这两种方法,优化您选择的最佳指标。

老实说,我认为您应该考虑所有用户。假设您有一个推荐电影的系统。在这个系统中,i1 代表一部儿童电影,由用户 u1 到 u5 评分,u5 是父母,u1、u2、u3 和 u4 是孩子。类似地,i2 代表恐怖电影,由用户 u5 到 u9 评分,都是成年人。在这样的系统中,u5 是 i1 和 i2 之间唯一的共同点,如果这个用户对两者都给予正面评价而你只考虑它们,那么你的项目之间会有很高的相似度;但是,如果您考虑对任何一部电影评分的所有用户,您的相似度就会非常低。

或者换句话说,我认为直觉上最好将缺失的评级视为错误/负面评级。无论如何,排除两个评级都为零的项对余弦相似度没有影响。但同样,您应该运行并测试它。