使用预测算法

Surprise 提供了一系列内置算法。所有算法都派生自 AlgoBase 基类,其中实现了一些关键方法(例如 predict, fittest)。可用的预测算法列表和详细信息可以在 prediction_algorithms 包的文档中找到。

每个算法都是全局Surprise命名空间的一部分,因此您只需要从Surprise包中导入它们的名称,例如:

from surprise import KNNBasic
algo = KNNBasic()

其中一些算法可能使用基线估计,一些可能使用相似性度量。我们将在这里回顾如何配置基线和相似性的计算方式。

基线估计配置

注意

本节仅适用于尝试最小化以下正则化平方误差(或等效项)的算法(或相似性度量):

\[\sum_{r_{ui} \in R_{train}} \left(r_{ui} - (\mu + b_u + b_i)\right)^2 + \lambda \left(b_u^2 + b_i^2 \right).\]

对于在另一个目标函数中使用基线的算法(例如 SVD 算法),基线配置的方式不同,并且是特定于 每个算法的。请参考它们各自的文档。

首先,如果你不想配置基线计算的方式, 你不需要这样做:默认参数就足够了。如果你确实想要 那么…这是为你准备的。

你可能想阅读[Kor10]的第2.1节,以了解基线估计是什么。

基线可以通过两种不同的方式进行估算:

  • 使用随机梯度下降(SGD)。

  • 使用交替最小二乘法(ALS)。

您可以通过在创建算法时传递的bsl_options参数来配置基线计算的方式。此参数是一个字典,其中键'method'指示要使用的方法。可接受的值是'als'(默认)和'sgd'。根据其值,可以设置其他选项。对于ALS:

  • 'reg_i': 项目的正则化参数。对应于 \(\lambda_2\)[Kor10] 中。默认值为 10

  • 'reg_u': 用户的正则化参数。对应于 \(\lambda_3\)[Kor10] 中。默认值为 15

  • 'n_epochs': ALS过程的迭代次数。默认为 10。 注意在 [Kor10] 中,描述的是一个单次 迭代的ALS过程。

From file examples/baselines_conf.py
bsl_options = {"method": "als", "n_epochs": 5, "reg_u": 12, "reg_i": 5}
algo = BaselineOnly(bsl_options=bsl_options)

对于SGD:

  • 'reg': 成本函数的正则化参数,对应于\(\lambda_1\)[Kor10]中。默认值为0.02

  • 'learning_rate': SGD的学习率,对应于 \(\gamma\)[Kor10] 中。默认值为 0.005

  • 'n_epochs': SGD过程的迭代次数。默认值为20。

From file examples/baselines_conf.py
bsl_options = {
    "method": "sgd",
    "learning_rate": 0.00005,
}
algo = BaselineOnly(bsl_options=bsl_options)

注意

对于这两种方法(ALS和SGD),用户和物品的偏差(\(b_u\)\(b_i\))都被初始化为零。

一些相似度度量可能会使用基线,例如 pearson_baseline 相似度。 配置工作方式相同,无论基线是否在实际预测 \(\hat{r}_{ui}\) 中使用:

From file examples/baselines_conf.py
bsl_options = {
    "method": "als",
    "n_epochs": 20,
}
sim_options = {"name": "pearson_baseline"}
algo = KNNBasic(bsl_options=bsl_options, sim_options=sim_options)

这引导我们进入相似度测量配置,我们现在将进行审查。

相似性度量配置

许多算法使用相似度度量来估计评分。它们的配置方式与基线评分类似:你只需要在创建算法时传递一个sim_options参数。这个参数是一个包含以下(全部可选)键的字典:

  • 'name': 使用的相似度名称,如similarities模块中所定义。默认值为'MSD'

  • 'user_based': 相似度是计算用户之间还是项目之间。这对预测算法的性能有巨大影响。默认值为True

  • 'min_support': 当 'user_based''True' 时,表示共同项目的最小数量;当 'user_based''False' 时,表示共同用户的最小数量,以确保相似度不为零。简单来说,如果 \(|I_{uv}| < \text{min_support}\),那么 \(\text{sim}(u, v) = 0\)。对于项目也是如此。

  • 'shrinkage': 应用的收缩参数(仅适用于 pearson_baseline 相似度)。 默认值为100。

使用示例:

From file examples/similarity_conf.py
sim_options = {
    "name": "cosine",
    "user_based": False,  # compute  similarities between items
}
algo = KNNBasic(sim_options=sim_options)
From file examples/similarity_conf.py
sim_options = {"name": "pearson_baseline", "shrinkage": 0}  # no shrinkage
algo = KNNBasic(sim_options=sim_options)

另请参阅

similarities 模块。