我正在按照一个教程学习如何在BigQueryML中创建推荐系统。该教程首先使用矩阵分解来计算用户和物品的因子。最终,我得到一个可以用用户ID或物品ID查询以获取推荐的模型。
下一步是将这些因子以及额外的物品和用户特征输入到一个线性回归模型中,以纳入更多的上下文信息。
“基本上,我们有关于电影的一些属性,对应电影的产品因子数组,关于用户的一些属性,以及对应用户的用户因子数组。这些构成了我们‘混合’推荐模型的输入,该模型建立在矩阵分解模型的基础上,并添加了关于用户和电影的元数据。”
我只是不明白为什么线性回归的数据集中排除了用户和物品ID:
SELECT p.* EXCEPT(movieId), u.* EXCEPT(userId), rating FROM productFeatures p, userFeatures u JOIN movielens.ratings r ON r.movieId = p.movieId AND r.userId = u.userId
我的问题是:当模型中没有用户或物品ID时,我如何从线性模型中为用户获取推荐?
您可以在这里找到完整的代码:
回答:
在您分享的例子中,目标是将线性回归拟合到发现的因子值上,以便可以使用一组新的因子值来预测评分。在这种设置中,您不希望知道使用了哪些样本;唯一关键的信息是训练特征(因子得分)和评分(训练/测试标签)。有关此主题的更多信息,请查看“使用非负矩阵分解进行信息检索的维度降低”。
如果您将电影ID和用户ID作为特征包含在内,您的回归将试图在这些ID上进行学习,这要么会给模型增加噪声,要么会学习到低ID=低分等。这是有可能的,尤其是如果这些ID以某种您不知道的顺序排列,比如按时间顺序或按类型排序。
注意:您可以使用特定电影或特定用户的信息来构建模型,但您将拥有许多、许多维度的数据,这往往会创建表现不佳的模型。这里的想法是通过首先降低问题空间的维度来避免维度问题。矩阵分解只是其中一种方法,还有其他方法,例如PCA、LDA和word2vec。