使用预测算法¶
Surprise 提供了一系列内置算法。所有算法都派生自
AlgoBase 基类,其中实现了一些关键方法(例如 predict, fit 和 test)。可用的预测算法列表和详细信息可以在
prediction_algorithms 包的文档中找到。
每个算法都是全局Surprise命名空间的一部分,因此您只需要从Surprise包中导入它们的名称,例如:
from surprise import KNNBasic
algo = KNNBasic()
其中一些算法可能使用基线估计,一些可能使用相似性度量。我们将在这里回顾如何配置基线和相似性的计算方式。
基线估计配置¶
注意
本节仅适用于尝试最小化以下正则化平方误差(或等效项)的算法(或相似性度量):
对于在另一个目标函数中使用基线的算法(例如
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过程。
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。
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 模块。