【问题标题】:How to find similarity distance between user's preference vector and items description table (matrices that are not the same size) in python?如何在python中找到用户的偏好向量和项目描述表(大小不同的矩阵)之间的相似距离?
【发布时间】:2020-11-17 17:44:38
【问题描述】:

我有两个不同的数据集:

users's "taste" table:

+-------+---------+--------+---------+---------+-----+--
|user_id|  Action |Adventure|Animation|Children|Drama|
+-------+---------+---------+---------+--------+-----+--
|   100 |    0    |    1    |    2    |   1    |  0  |
|   101 |    1    |    4    |    0    |   3    |  0  |
+-------+---------+---------+---------+--------+-----+--

movie's genre table:

+--------+---------+---- ----+---------+---------+-----+--
|movie_id|  Action |Adventure|Animation| Children|Drama|
+--------+---------+---- ----+---------+---------+-----+--
|   1001 |    0    |    1    |    1    |    1    |  0  |
|   1001 |    0    |    1    |    0    |    1    |  0  |
+--------+---------+---------+---------+---------+-----+--

我正在尝试根据用户的口味向用户推荐最相似的 N 部电影。我的想法是测量用户和每部电影之间的相似度距离(余弦相似度/点积)并返回前 N 个最相似的电影。在python中实现它的正确方法是什么?

【问题讨论】:

    标签: python pandas numpy data-science


    【解决方案1】:

    这是一个简单的问题,但根据距离类型和数据大小,答案可能很复杂。我先给你一些钩子。

    Sklearn 实现了distance metrics,您可以立即使用它来计算项目之间的距离,例如在 argmax 的帮助下找到最佳匹配。这将是一种幼稚的方法,但在小型数据集上效果很好,并且您可以灵活地使用任何您想要的指标。 距离已实现pairwise,可轻松计算距离矩阵以快速找到最佳匹配。但是你可以想象,对于更大的数据集,这种策略将不再适用。

    当数据增长时,您可以使用BallTree 算法快速找到 (1) k-最近的,或 (2) 特定阈值内的所有电影。该算法在sklearn 中实现得很好,我建议从这种方法开始,因为它在快速和易于实现之间取得了很好的平衡。

    其他选项是使用专门的包,如faissann。两者都只会在上述数据的速度/大小失败时使用。

    【讨论】:

      猜你喜欢
      • 2020-11-18
      • 2020-03-13
      • 2020-11-19
      • 2015-08-28
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 2023-03-07
      相关资源
      最近更新 更多