相似度模块

similarities 模块包含用于计算用户或项目之间相似度指标的工具。您可能需要参考符号标准,参考文献页面。另请参阅用户指南中的相似度度量配置部分。

可用的相似度度量方法:

cosine

计算所有用户(或物品)对之间的余弦相似度。

msd

计算所有用户(或物品)对之间的均方差相似度。

pearson

计算所有用户(或物品)对之间的皮尔逊相关系数。

pearson_baseline

计算所有用户(或物品)对之间的(缩小的)皮尔逊相关系数,使用基线而不是均值进行中心化。

surprise.similarities.cosine(n_x, yr, min_support)

计算所有用户(或物品)对之间的余弦相似度。

仅考虑普通用户(或项目)。余弦相似度定义为:

\[\text{cosine_sim}(u, v) = \frac{ \sum\limits_{i \in I_{uv}} r_{ui} \cdot r_{vi}} {\sqrt{\sum\limits_{i \in I_{uv}} r_{ui}^2} \cdot \sqrt{\sum\limits_{i \in I_{uv}} r_{vi}^2} }\]

\[\text{cosine_sim}(i, j) = \frac{ \sum\limits_{u \in U_{ij}} r_{ui} \cdot r_{uj}} {\sqrt{\sum\limits_{u \in U_{ij}} r_{ui}^2} \cdot \sqrt{\sum\limits_{u \in U_{ij}} r_{uj}^2} }\]

取决于sim_optionsuser_based字段(参见 相似度度量配置)。

有关余弦相似度的详细信息,请参见Wikipedia

surprise.similarities.msd(n_x, yr, min_support)

计算所有用户(或物品)对之间的均方差相似度。

仅考虑普通用户(或项目)。均方差异定义为:

\[\text{msd}(u, v) = \frac{1}{|I_{uv}|} \cdot \sum\limits_{i \in I_{uv}} (r_{ui} - r_{vi})^2\]

\[\text{msd}(i, j) = \frac{1}{|U_{ij}|} \cdot \sum\limits_{u \in U_{ij}} (r_{ui} - r_{uj})^2\]

取决于sim_optionsuser_based字段(参见 相似度度量配置)。

MSD相似度定义如下:

\[\begin{split}\text{msd_sim}(u, v) &= \frac{1}{\text{msd}(u, v) + 1}\\ \text{msd_sim}(i, j) &= \frac{1}{\text{msd}(i, j) + 1}\end{split}\]

\(+ 1\) 这一项只是为了避免除以零。

有关MSD的详细信息,请参见Wikipedia上的第三个定义。

surprise.similarities.pearson(n_x, yr, min_support)

计算所有用户对(或项目对)之间的皮尔逊相关系数。

仅考虑普通用户(或项目)。皮尔逊相关系数可以看作是均值中心化的余弦相似度,其定义如下:

\[\text{pearson_sim}(u, v) = \frac{ \sum\limits_{i \in I_{uv}} (r_{ui} - \mu_u) \cdot (r_{vi} - \mu_{v})} {\sqrt{\sum\limits_{i \in I_{uv}} (r_{ui} - \mu_u)^2} \cdot \sqrt{\sum\limits_{i \in I_{uv}} (r_{vi} - \mu_{v})^2} }\]

\[\text{pearson_sim}(i, j) = \frac{ \sum\limits_{u \in U_{ij}} (r_{ui} - \mu_i) \cdot (r_{uj} - \mu_{j})} {\sqrt{\sum\limits_{u \in U_{ij}} (r_{ui} - \mu_i)^2} \cdot \sqrt{\sum\limits_{u \in U_{ij}} (r_{uj} - \mu_{j})^2} }\]

取决于sim_optionsuser_based字段(参见 相似度度量配置)。

注意:如果没有共同的用户或项目,相似度将为0(而不是-1)。

有关皮尔逊系数的详细信息,请参见Wikipedia

surprise.similarities.pearson_baseline(n_x, yr, min_support, global_mean, x_biases, y_biases, shrinkage=100.0)

使用基线而非均值来计算所有用户(或项目)对之间的(缩小的)皮尔逊相关系数。

收缩参数有助于在只有少量评分可用时避免过拟合(参见相似性度量配置)。

皮尔逊基线相关系数定义为:

\[\text{pearson_baseline_sim}(u, v) = \hat{\rho}_{uv} = \frac{ \sum\limits_{i \in I_{uv}} (r_{ui} - b_{ui}) \cdot (r_{vi} - b_{vi})} {\sqrt{\sum\limits_{i \in I_{uv}} (r_{ui} - b_{ui})^2} \cdot \sqrt{\sum\limits_{i \in I_{uv}} (r_{vi} - b_{vi})^2}}\]

\[\text{pearson_baseline_sim}(i, j) = \hat{\rho}_{ij} = \frac{ \sum\limits_{u \in U_{ij}} (r_{ui} - b_{ui}) \cdot (r_{uj} - b_{uj})} {\sqrt{\sum\limits_{u \in U_{ij}} (r_{ui} - b_{ui})^2} \cdot \sqrt{\sum\limits_{u \in U_{ij}} (r_{uj} - b_{uj})^2}}\]

然后定义缩小的皮尔逊基线相关系数为:

\[ \begin{align}\begin{aligned}\text{pearson_baseline_shrunk_sim}(u, v) &= \frac{|I_{uv}| - 1} {|I_{uv}| - 1 + \text{shrinkage}} \cdot \hat{\rho}_{uv}\\\text{pearson_baseline_shrunk_sim}(i, j) &= \frac{|U_{ij}| - 1} {|U_{ij}| - 1 + \text{shrinkage}} \cdot \hat{\rho}_{ij}\end{aligned}\end{align} \]

显然,收缩参数为0意味着完全没有收缩。

注意:再次说明,如果没有共同的用户/项目,相似度将为0(而不是-1)。

这种相似性度量的动机可以在推荐系统手册的第5.4.1节中找到。