如何为基于 SVD 的推荐准备训练数据?

数据挖掘 机器学习 推荐系统
2022-02-16 10:03:04

我正在尝试构建一个基于 SVD 的推荐系统。根据我的理解,训练数据应该只包含至少购买m个商品的用户和n 个唯一用户购买的商品。否则,如果我使用所有用户和物品(包括低频用户和物品),我认为训练数据会很嘈杂。

然而,问题来了:为了构建 SVD 的训练数据,我首先从数据库中检索所有购买了至少m件商品的用户。但是有一些被这些用户购买的物品至少没有被n 个用户购买。但是在进一步从训练数据中过滤掉这些低频项后,剩下的一些用户将没有包含m个项目的项目集,因为有些项目被删除了。

我觉得我没有走在正确的轨道上。我应该如何为 SVD 构建训练数据?

1个回答

根据我的经验,我认为这个答案是为 CF 算法准备数据的一般方法。我不知道你的数据的具体情况。

在为 CF 准备数据时,我会注意这些事情:

  • 数据集大小和稀疏性- 有许多 CF 算法,它们根据数据集大小(用户和项目)及其数据密度给出不同的结果。简单的直觉:基于内存的 KNN 方法将遭受数据稀疏性的困扰,而在相同的设置下,MF 可以表现得更好。本文提供了很好的比较:协作过滤算法的比较研究. 此外,CF 方法可以不同地依赖于用户和项目的数量。为了减少稀疏性,您删除评级/点击次数低于所选阈值的项目/用户。这是一个迭代过程。正如问题中所说,当您删除特定项目/用户时,可能会发生不同的用户/项目分别低于阈值。出于研究目的,我什至准备了计算项目/用户阈值的函数,以便接收给定的稀疏度。
  • 过滤异常用户和项目的意义中的异常值。那些可以极大地影响你的模型,但以错误的方式。在我的案例(电子商务网站)中,它是这样的案例:真正的重度用户 - 其他商店、收集数据的机器人(抓取脚本)、内部流量(黑名单 IP)、竞价自动化工具、有趣的报价喜欢网页。有人可以说这可以通过用户/项目偏见来消除。是的,只要您的 CF 方法使用它 :-)
  • 数据集的正确切片由于某些原因(例如计算),您必须将您的数据划分为较小的部分。这是合理的。分而治之的方法。但是在这种情况下,在执行此操作之前,请检查您是否没有通过这种切片丢失大量信息。下面是一个例子:我们按类别对商品进行切片,类别形成一个类别树,因此同一个叶子可以是几个主要类别的一部分。因此,按主要类别进行切片可能导致整个用户-项目交互中只有一部分与此叶类别中的一起查看/购买的项目有关。

根据我的经验,这些只是一些提示。但我希望这会有所帮助。

我将不胜感激任何编辑和分享结果:-)