k-NN 启发式算法¶
这些算法直接源自基本的最近邻方法。
注意
对于这些算法中的每一个,用于计算估计的实际邻居数量必然小于或等于 \(k\)。首先,可能没有足够的邻居;其次,集合 \(N_i^k(u)\) 和 \(N_u^k(i)\) 只包含相似度度量为正的邻居。聚合来自负相关的用户(或物品)的评分是没有意义的。对于给定的预测,实际的邻居数量可以在 prediction
的 details
字典的 '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
字段。
- 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
字段。
- 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。
- 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。