使用预测算法¶
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'
:物品的正则化参数。对应于[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
模块。