回归前的聚类 - 推荐系统

时间:2016-11-02 20:39:42

标签: python machine-learning scikit-learn k-means

我有一个名为train.dat的文件,其中包含三个字段 - userIDmovieIDrating

我需要根据此预测test.dat文件中的rating

我想知道如何使用scikit-learn的KMeans对类似用户进行分组,因为我只有一个功能 - rating。 这甚至有意义吗?在聚类步骤之后,我可以进行回归步骤以获得test.dat中每个用户 - 电影对的评级

编辑:我有一些额外的文件,其中包含每部电影中的演员,导演以及电影所属的类型。我不确定如何使用这些开始,我问这个问题,因为我想知道是否可以让一个简单的模型只使用评级,然后用其他数据增强它。我读到这称为基于内容的推荐。对不起,我也应该写下其他数据文件。

2 个答案:

答案 0 :(得分:0)

scikit-learn 不是用于推荐系统的库,kmeans也不是用于群集此类数据的典型工具。您尝试做的事情处理图表,通常要么在图表级别进行分析,要么使用各种矩阵分解技术进行分析。

特别是kmeans只适用于欧几里德空间,你在这里没有这样的东西。你可以做的是使用DBScan(或任何其他接受任意相似性的聚类技术,但这个实际上是scikit-learn)并根据他们的口味确定两个用户之间的相似性,例如:< / p>

sim(user1, user2) = # movies both users like / # movies at least one of them likes

,其被称为二元向量之间相似性的Jaccard系数。你有评价,不只是“喜欢”,但我在这里给出了一个最简单的例子,而你可以提出其他几十种尝试。关键是 - 对于最简单的方法,您所要做的就是定义每用户相似性的概念并应用接受这种设置的聚类(如提到的DBScan)。

答案 1 :(得分:-1)

群集用户是有道理的。但如果您的唯一功能是评级,我认为它不会产生有用的预测模型。以下是我的假设:

  • 电影的质量应该以高分配分发。
  • 如果我们查看普通用户的评级分布,它应该像高斯一样。
  • 我不排除少数用户在看到不好的电影时会给出评分的可能性(因此评分都很低);反之亦然。但对于大量用户来说,这应该是不寻常的行为。

因此,我可以想象在聚类之后,在两种极端情况下会得到一小组用户;并且大多数用户处于中间位置(因为他们共享类似高斯的评级行为)。使用此模型,您可能会在两个小(极端)组中获得良好的结果;但是对于大多数用户来说,你不能期待良好的预测。