使用预测算法

Surprise 提供了许多内置算法。所有算法都派生自 AlgoBase 基类,其中实现了一些关键方法(例如 predictfittest)。可在 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':物品的正则化参数。对应于[Kor10]中的\(\lambda_2\)。默认值为10

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

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

来自文件 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':被优化的成本函数的正则化参数,对应于[Kor10]中的\(\lambda_1\)。默认值为0.02

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

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

来自文件 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}\)

来自文件 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。

使用示例:

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

另请参阅:

similarities 模块。