k-NN 启发式算法

这些算法直接源自基本的最近邻方法。

注意

对于这些算法中的每一个,用于计算估计的实际邻居数量必然小于或等于 \(k\)。首先,可能没有足够的邻居;其次,集合 \(N_i^k(u)\)\(N_u^k(i)\) 只包含相似度度量为的邻居。聚合来自负相关的用户(或物品)的评分是没有意义的。对于给定的预测,实际的邻居数量可以在 predictiondetails 字典的 'actual_k' 字段中检索到。

您可能想阅读关于如何配置 sim_options 参数的 用户指南

class surprise.prediction_algorithms.knns.KNNBasic(k=40, min_k=1, sim_options={}, verbose=True, **kwargs)[source]

基类: SymmetricAlgo

一个基本的协同过滤算法。

预测值 \(\hat{r}_{ui}\) 的设置如下

\[\hat{r}_{ui} = \frac{ \sum\limits_{v \in N^k_i(u)} \text{sim}(u, v) \cdot r_{vi}} {\sum\limits_{v \in N^k_i(u)} \text{sim}(u, v)}\]

\[\hat{r}_{ui} = \frac{ \sum\limits_{j \in N^k_u(i)} \text{sim}(i, j) \cdot r_{uj}} {\sum\limits_{j \in N^k_u(i)} \text{sim}(i, j)}\]

取决于 sim_options 参数的 user_based 字段。

参数:
  • k (int) – 聚合时考虑的(最大)邻居数量(参见 此注意)。默认值为 40

  • min_k (int) – 聚合时考虑的最小邻居数量。如果邻居数量不足,预测将设置为所有评分的全局平均值。默认值为 1

  • sim_options (dict) – 相似度度量的选项字典。有关可接受的选项,请参见 相似度度量配置

  • verbose (bool) – 是否打印偏差估计、相似度等的跟踪消息。默认值为 True。

class surprise.prediction_algorithms.knns.KNNWithMeans(k=40, min_k=1, sim_options={}, verbose=True, **kwargs)[source]

基类: SymmetricAlgo

一个基本的协同过滤算法,考虑了每个用户的平均评分。

预测值 \(\hat{r}_{ui}\) 的设置如下

\[\hat{r}_{ui} = \mu_u + \frac{ \sum\limits_{v \in N^k_i(u)} \text{sim}(u, v) \cdot (r_{vi} - \mu_v)} {\sum\limits_{v \in N^k_i(u)} \text{sim}(u, v)}\]

\[\hat{r}_{ui} = \mu_i + \frac{ \sum\limits_{j \in N^k_u(i)} \text{sim}(i, j) \cdot (r_{uj} - \mu_j)} {\sum\limits_{j \in N^k_u(i)} \text{sim}(i, j)}\]

取决于 sim_options 参数的 user_based 字段。

参数:
  • k (int) – 聚合时考虑的(最大)邻居数量(参见 此注意)。默认值为 40

  • min_k (int) – 聚合时考虑的最小邻居数量。如果邻居数量不足,邻居聚合将设置为零(因此预测最终等同于平均值 \(\mu_u\)\(\mu_i\))。默认值为 1

  • sim_options (dict) – 相似度度量的选项字典。有关可接受的选项,请参见 相似度度量配置

  • verbose (bool) – 是否打印偏差估计、相似度等的跟踪消息。默认值为 True。

class surprise.prediction_algorithms.knns.KNNWithZScore(k=40, min_k=1, sim_options={}, verbose=True, **kwargs)[source]

基类: SymmetricAlgo

一个基本的协同过滤算法,考虑了每个用户的 z-score 归一化。

预测值 \(\hat{r}_{ui}\) 的设置如下

\[\hat{r}_{ui} = \mu_u + \sigma_u \frac{ \sum\limits_{v \in N^k_i(u)} \text{sim}(u, v) \cdot (r_{vi} - \mu_v) / \sigma_v} {\sum\limits_{v \in N^k_i(u)} \text{sim}(u, v)}\]

\[\hat{r}_{ui} = \mu_i + \sigma_i \frac{ \sum\limits_{j \in N^k_u(i)} \text{sim}(i, j) \cdot (r_{uj} - \mu_j) / \sigma_j} {\sum\limits_{j \in N^k_u(i)} \text{sim}(i, j)}\]

取决于 sim_options 参数的 user_based 字段。

如果 \(\sigma\) 为 0,则在这种情况下使用整体的 sigma。

参数:
  • k (int) – 聚合时考虑的(最大)邻居数量(参见 此注意)。默认值为 40

  • min_k (int) – 聚合时考虑的最小邻居数量。如果邻居数量不足,邻居聚合将设置为零(因此预测最终等同于平均值 \(\mu_u\)\(\mu_i\))。默认值为 1

  • sim_options (dict) – 相似度度量的选项字典。有关可接受的选项,请参见 相似度度量配置

  • verbose (bool) – 是否打印偏差估计、相似度等的跟踪消息。默认值为 True。

class surprise.prediction_algorithms.knns.KNNBaseline(k=40, min_k=1, sim_options={}, bsl_options={}, verbose=True, **kwargs)[source]

基类: SymmetricAlgo

一个考虑了基准评分的基本协同过滤算法。

预测值 \(\hat{r}_{ui}\) 的设置如下

\[\hat{r}_{ui} = b_{ui} + \frac{ \sum\limits_{v \in N^k_i(u)} \text{sim}(u, v) \cdot (r_{vi} - b_{vi})} {\sum\limits_{v \in N^k_i(u)} \text{sim}(u, v)}\]

\[\hat{r}_{ui} = b_{ui} + \frac{ \sum\limits_{j \in N^k_u(i)} \text{sim}(i, j) \cdot (r_{uj} - b_{uj})} {\sum\limits_{j \in N^k_u(i)} \text{sim}(i, j)}\]

取决于 sim_options 参数的 user_based 字段。为了获得最佳预测,请使用 pearson_baseline 相似度度量。

此算法对应于 [Kor10] 第 2.2 节中的公式 (3)。

参数:
  • k (int) – 聚合时考虑的(最大)邻居数量(参见 此注意)。默认值为 40

  • min_k (int) – 聚合时考虑的最小邻居数量。如果邻居数量不足,邻居聚合将设置为零(因此预测最终等同于基准值)。默认值为 1

  • sim_options (dict) – 相似度度量的选项字典。有关可接受的选项,请参见 相似度度量配置。建议使用 pearson_baseline 相似度度量。

  • bsl_options (dict) – 基准估计计算的选项字典。有关可接受的选项,请参见 基准估计配置

  • verbose (bool) – 是否打印偏差估计、相似度等的跟踪消息。默认值为 True。