推荐引擎指标

时间:2016-04-06 14:25:58

标签: recommendation-engine collaborative-filtering

我一直致力于通过基于隐式反馈的建议来实施推荐系统。因此,我使用元组(用户,项目,计数)来创建我的用户项目矩阵。

我使用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保持不变。

任何想法或方向都会非常感激!

谢谢

1 个答案:

答案 0 :(得分:1)

(1) MovieLens数据集是一个学术数据集,可以清楚地选择如何生成数据集,使其与现实生活推荐系统数据集完全不同。在数据集的README上,作者指定:

Each user has rated at least 20 movies. 

因此,他们的低RMSE仅适用于具有此特征的用户。

我建议使用两个指标:

  1. 将您的数据拆分为训练和测试集,并将您的预测与测试集进行比较,看看您是否预测了测试集中的(用户,电影)对;
  2. 将您与基线进行比较,例如用户平均值和电影平均值。
  3. (2)我觉得你对冷启动问题有点困惑:  这是影响没有关于用户或电影的数据的推荐系统(RS)的问题。例如,如果没有人看过电影,你就无法对谁会喜欢它做出可靠的预测。对于用户来说,同样的方式,对于没有看过任何电影的人,你无法预测他们会喜欢什么电影。

    克服这个问题的一种方法是根据电影和用户的特征(性别,年龄,用户和类型的国家,电影的日期和语言)创建电影之间和用户之间的相似性度量。有了这个,您可以根据最相似的用户和电影提出建议。据说这些类型的RS是混合型的。

    推荐论文: