推荐算法 Surprise(三)

本文介绍了Surprise推荐系统中预测算法的使用,包括内置算法的来源和预测方法。讨论了基线估计配置,如SGD和ALS,并详细说明了相关参数。此外,还提到了相似度度量的配置选项,如Pearson基线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预测算法的使用

Surprise提供很多内置算法。所有算法都来源于AlgoBase这个基础类,这其中包括一些关键方法(例如predictfittest)可供使用的预测算法的种类与细节可以在prediction_algorithms文档中查阅。

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

from surprise import KNNBasic
algo = KNNBasic()

一些算法可能使用baseline estimates,一些算法可能使用similarity measure。我们在这里回顾 baseline与 similarities的计算方式。

Baselines estimates configuration:

注意

本节仅适用于那些最小化以下正则化平方误差的算法(或similarity measures):
在这里插入图片描述
对于其他使用baseline目标函数的算法(例如SVD算法),配置是完全不同的,请查阅它们自己的文档进行了解。

首先,如果你不想了解baseline是如何计算的,默认的参数完全可以供您直接使用。如果您想深入了解,那请继续阅读。

你可能想阅读2.1节的Kor10来对baseline estimates有更深的了解。

我们可以通过两种不同的方式计算baseline:

1. Stochastic Gradient Descent (SGD)。
2. Alternating Least Squares (ALS)。

您可以使用在创建算法时使用参数bsl_options来设置baseline的计算方式,此参数由一个字典表示,其键method确定要使用的方法,可允许接受的值为als(默认)和sgd。根据你所选择的值,可以进一步设置其他参数。

对于ALS:
reg_i:物品的正则化参数,对应Kor10中的参数λ2 ,默认值为10。
reg_u:用户的正则化参数,对应Kor10中的参数λ3,默认值为15 。
n_epochs:ALS程序迭代的次数,默认值为10,注意Kor10所描述的是单次ALS的过程。

对于SGD
reg:代价函数的正则化项,对应Kor10中的λ1与 λ5,默认值为0.02。
learning_rate:SGD的学习率,对应Kor10中的γ ,默认值0.005。
n_epochs:SGD的迭代次数,默认值为20。

注意对于ALD与SGD,用户和物品的偏置(bu和bi)初始化为都为0

ALS:

print('Using ALS')
bsl_options = {'method': 'als',
               'n_epochs': 5,
               'reg_u': 12,
               'reg_i': 5
               }
algo = BaselineOnly(bsl_options=bsl_options)

SGD:

print('Using SGD')
bsl_options = {'method': 'sgd',
               'learning_rate': .00005,
               }
algo = BaselineOnly(bsl_options=bsl_options)

Similarity measure configuration:

许多算法使用相似度来估计评分的算法,配置方法和baseline rating类似,在调用算法时,只需传递sim_options参数进行配置,这个参数的形式必须是字典,介绍关键的参数如下:

name:相似度度量方法名称, 这些方法定义在similarities中,默认是MSD
user_based: 用户或者物品间相似度的度量。默认为True(基于用户)。
min_support:(没搞懂,待补充)
shrinkage:此参数仅在使用pearson_baseline相似度时设置,默认100。

举例:

sim_options = {'name': 'cosine',
               'user_based': False  # compute  similarities between items
               }
algo = KNNBasic(sim_options=sim_options)
sim_options = {'name': 'pearson_baseline',
               'shrinkage': 0  # no shrinkage
               }
algo = KNNBasic(sim_options=sim_options)

详情请参考similarities模型。

### Surprise 库中的协同过滤推荐算法 #### 什么是协同过滤? 协同过滤是一种常用的推荐技术,通过分析用户的行为或物品的特征来预测用户可能感兴趣的项目。它主要包括两类方法:基于用户的协同过滤(User-Based Collaborative Filtering)和基于物品的协同过滤(Item-Based Collaborative Filtering)。这些方法的核心在于计算用户之间或物品之间的相似度,并利用这种相似性来进行推荐[^4]。 #### Surprise 库简介 Surprise 是一个专门用于构建和评估推荐系统的 Python 库,支持多种协同过滤算法以及评价指标。它的设计目标是简单易用,同时提供灵活的功能扩展能力。开发者可以通过该库快速实现并测试不同的推荐策略[^1]。 --- #### 安装 Surprise 库 在使用之前,需要先安装 Surprise 库及其依赖项: ```bash pip install scikit-surprise ``` --- #### 基于 KNN 的协同过滤实现 Surprise 提供了 `KNNBasic` 类以及其他变体(如 `KNNWithMeans`, `KNNBaseline`),可以用来实现基于邻域的方法。以下是具体实现步骤: ##### 示例代码:基于用户的协同过滤 下面是一个完整的例子,展示如何使用 Surprise 构建基于用户的协同过滤推荐系统[^3]。 ```python from surprise import Dataset, Reader, KNNBasic from surprise.model_selection import train_test_split from surprise import accuracy # 加载数据集 reader = Reader(line_format='user item rating timestamp', sep=',', skip_lines=1) data = Dataset.load_from_df(df[['userID', 'itemID', 'rating']], reader) # 划分训练集和测试集 trainset, testset = train_test_split(data, test_size=0.2, random_state=42) # 初始化基于用户的协同过滤模型 model = KNNBasic(sim_options={'name': 'cosine', 'user_based': True}) # 训练模型 model.fit(trainset) # 测试模型 predictions = model.test(testset) # 输出 RMSE 结果 rmse_score = accuracy.rmse(predictions) print(f'RMSE Score: {rmse_score}') ``` 上述代码中,我们选择了余弦相似度作为距离度量标准,并设置了 `user_based=True` 来启用基于用户的协同过滤模式。如果希望切换到基于物品的方式,则只需将参数改为 `user_based=False`。 --- #### SVD 算法的应用 除了传统的 KNN 方法外,Surprise 还实现了奇异值分解(SVD)这一高效且广泛使用的隐语义模型。相比 KNN,SVD 能够更有效地捕捉潜在因素间的复杂关系。 ##### 示例代码:SVD 推荐算法 以下是如何使用 SVD 实现推荐的一个实例: ```python from surprise import SVD from surprise.model_selection import cross_validate # 初始化 SVD 模型 svd_model = SVD() # 执行交叉验证 cross_validation_results = cross_validate(svd_model, data, measures=['RMSE'], cv=5, verbose=True) # 查看平均 RMSE 性能 mean_rmse = cross_validation_results['test_rmse'].mean() print(f'Mean Cross-Validation RMSE (SVD): {mean_rmse}') ``` 此部分展示了如何借助 Surpris 中的 `SVD` 类完成模型训练与性能评估工作流。 --- #### 数据预处理的重要性 无论采用哪种具体的协同过滤算法,在实际开发过程中都需要重视原始数据的质量控制环节。这通常涉及以下几个方面的工作: - 清洗噪声数据; - 处理缺失值; - 对稀疏矩阵进行优化存储等操作[^2]。 例如,Pandas 和 NumPy 可以为这类任务提供强有力的支持工具集合。 --- #### 监控与维护建议 当部署好生产环境下的推荐服务之后,还需要持续关注其运行状况以确保长期稳定性。为此可引入 Prometheus 或其他类似的 APM 平台跟踪 API 请求耗时及失败比例等相关指标;另外定期安排计划作业重新拟合最新版本的数据也是必不可少的一环[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值