我一直致力于通过基于隐式反馈的建议来实施推荐系统。因此,我使用元组(用户,项目,计数)来创建我的用户项目矩阵。
我使用Insight数据科学博客上的这个非常好的示例实现了我的推荐系统:http://insightdatascience.com/blog/explicit_matrix_factorization.html
然而,与电影镜头数据集相比,我的数据集非常稀疏。在这个例子中,6.3%的数据集被填满,而这个数字对我来说是0.30%。因此,我的数据集中有很多未知值。我有大约2900个用户和5000个项目。
我一直在训练我的模型,训练MSE拒绝下来。我试过优化参数,但无济于事。我有以下问题:
(1)MSE不是一个可靠的指标吗?我经历了这个讨论:https://www.quora.com/How-do-you-measure-and-evaluate-the-quality-of-recommendation-engines
但是,A / B测试对我来说不是一个选择。我对机器学习模型的经验总是告诉我,如果训练MSE陷入困境,那么这是一件非常糟糕的事情(出于很多原因)
那么,我没有正确评估事情吗?
(2)冷启动问题?我正在初始化我的用户向量和项目向量,如下所示:
self.user_vectors = np.random.normal(size=(self.num_users,self.num_factors))
self.item_vectors = np.random.normal(size=(self.num_items,self.num_factors))
我可以在这里更改一下吗?
我对下一步做什么很困惑。矩阵的稀疏性非常高,我知道我的算法正在预测大量零的值。我觉得这让我的MSE保持不变。
任何想法或方向都会非常感激!
谢谢
答案 0 :(得分:1)
(1) MovieLens数据集是一个学术数据集,可以清楚地选择如何生成数据集,使其与现实生活推荐系统数据集完全不同。在数据集的README上,作者指定:
Each user has rated at least 20 movies.
因此,他们的低RMSE仅适用于具有此特征的用户。
我建议使用两个指标:
(2)我觉得你对冷启动问题有点困惑: 这是影响没有关于用户或电影的数据的推荐系统(RS)的问题。例如,如果没有人看过电影,你就无法对谁会喜欢它做出可靠的预测。对于用户来说,同样的方式,对于没有看过任何电影的人,你无法预测他们会喜欢什么电影。
克服这个问题的一种方法是根据电影和用户的特征(性别,年龄,用户和类型的国家,电影的日期和语言)创建电影之间和用户之间的相似性度量。有了这个,您可以根据最相似的用户和电影提出建议。据说这些类型的RS是混合型的。
推荐论文:
Collaborative Filtering for Implicit Feedback Datasets,它涵盖了隐式反馈和冷启动问题。
Hybrid Recommender Systems: Survey and Experiments - 关于混合型RS。