使用基于感知器的推荐系统时如何处理稀疏矩阵?

数据挖掘 机器学习 推荐系统 感知器
2021-09-28 20:43:59

我被限制使用基于感知器的方法。我有一个用户项目矩阵,其中填充了 1 到 5 的评分数据,如下所示,大约 50% 的矩阵没有数据:

r<- matrix(c(2,4, NA,5,NA,3, NA,5,NA,1,NA,3,NA,5,NA,4,4,NA,NA,NA,1,1,2,NA,1,1,1,1,NA,NA,NA,NA,2,3,4,2,NA,NA,NA,NA,3,4,5,1,NA,NA,2,3,NA), nrow=7).
#one row represents one user, hile one column represents one item
r
    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    2    5   NA    1   NA    2    5
[2,]    4   NA    4    2   NA   NA    1
[3,]   NA    1    4   NA   NA   NA   NA
[4,]    5   NA   NA    1   NA   NA   NA
[5,]   NA    3   NA    1    2   NA    2
[6,]    3   NA   NA    1    3    3    3
[7,]   NA    5    1    1    4    4   NA

我将 NA 重新编码为 0,这使得感知器只给出 2 个类(一个包含所有 1 和 0,另一个包含所有 2、3、4 和 5。我猜这是可以理解的。)怎么做我处理这个?我尝试了平均插补,但结果不好(20% 准确率)

(由于这是我公司的专有代码,我无法给出确切的代码,但任何基于感知器的方法都适用于本示例)

1个回答

将 NA 重新编码为 0 不是您想要的。想一想这意味着什么:特定用户的某个项目上的缺失值意味着该用户没有看到、听过或购买(取决于您拥有的数据类型)该项目,而零值意味着该用户不喜欢那个项目;因此它们具有完全不同的含义。

推荐系统的目标基本上是以“有意义”的方式填充这些 NA 值。在推荐系统中使用稀疏矩阵是很常见的。我不确切知道您正在使用哪种方法或为什么要使用感知器,但我建议您检查推荐系统的矩阵分解是如何工作的(Robert Bell、Chris 的“推荐系统的矩阵分解” Volinsky 和 ​​Yehuda Koren 是一篇很好的论文),看看这种方法是否适用于您的问题。

您也可以先尝试一个简单的基线模型,该模型考虑了用户的偏见和项目的偏见;Bell、Volinsky 和 ​​Koren 的论文是一个好的开始。