相关文章推荐
帅呆的帽子  ·  洪亮课题组·  6 月前    · 
大气的薯片  ·  import tushare ...·  1 年前    · 
礼貌的炒饭  ·  Docker ...·  1 年前    · 

Surprise 是scikit系列中的一个推荐系统算法库。

官网: http://surpriselib.com/ ;Conda指令: https://anaconda.org/nicolashug/scikit-surprise

文档: http://surprise.readthedocs.io/en/stable/

一、基本模块

1. 推荐算法分类

可分为基于用户行为的推荐算法和基于内容(物品属性)的推荐算法。

基于用户行为数据的推荐算法一般称为协同过滤算法,主要方法有基于邻域的方法(neighborhood-based)、隐语义模型(latent factor model,LFM)、基于图的随机游走算法(random walk on graph)等。

在业界得到最广泛应用的算法是基于邻域的方法,主要包含下面两种算法:基于用户的协同过滤算法 UserCF,给用户推荐和他兴趣相似的其他用户喜欢的物品;基于物品的协同过滤算法 ItemCF,给用户推荐和他之前喜欢的物品相似的物品。

2. 基于邻域的CF算法的可设定度量准则,surprise.similarities 模块

余弦相似度 cosine、均方差相似度 msd、皮尔逊相关系数 pearson、基线皮尔逊相关系数 pearson_baseline。

3. 评价指标模块,surprise.accuracy

均方根误差 rmse、平均绝对误差 mae、fcp。

4. 数据集 surprise.dataset 模块

包含了 movielens-100k、movielens-1m、Jester 数据集。还可读取 pandas.DataFrame 格式及其他文件格式的数据集。

5. surprise.model_selection 模块

提供了用于交叉验证所需要的数据集切分、自动CV、网格搜索 GridSearchCV 等。

二、实现推荐算法

1. surprise.prediction_algorithms.algo_base

该模块定义了 类AlgoBase,每个单独的预测算法都继承自该类。

2. surprise.prediction_algorithms.predictions,定义了预测结果类。

3. Basic algorithms 基本算法

(1)prediction_algorithms.random_pred. NormalPredictor

从训练集估计得到一个正态分布(均值和标准差),基于该正态分布进行随机预测。

(2)prediction_algorithms.baseline_only. BaselineOnly

4. k-NN inspired algorithms kNN算法

(1)prediction_algorithms.knns. KNNBasic ,即基本的协同过滤算法。

  • k,kNN 算法中的 k 参数;
  • min_k,需考虑的最小邻居数,当邻居数不足时,使用全局平均进行预测;
  • sim_options,该参数接收一个 dict,如
    • sim_options = {'name': 'cosine',

'user_based': False # compute similarities between items}

(2)prediction_algorithms.knns. KNNWithMeans ,考虑了每个用户的平均打分值。

(3)prediction_algorithms.knns. KNNWithZScore ,考虑了每个用户的 z-score 标准化。

(4)prediction_algorithms.knns. KNNBaseline ,包含可学习参数,可使用 SGD 和 ALS 算法进行参数估计。推荐使用 pearson_baseline 度量方式。

  • bsl_options,接收一个 dict,说明配置信息。
    • bsl_options = {'method': 'sgd', 'learning_rate': .00005, }

5. Matrix Factorization-based algorithms

SVD 、RSVD 、ASVD 、SVD++ 详解

(1)prediction_algorithms.matrix_factorization. SVD

(2)prediction_algorithms.matrix_factorization. SVDpp

引入隐式反馈,可以是打分动作(谁对某个商品打过分),或者是浏览记录等,隐式回馈的原因比较复杂,专门用一部分参数空间去建模,每个 item 对应一个向量 yi ,通过 user 隐含回馈过的 item 的集合来刻画用户的偏好。

(3)prediction_algorithms.matrix_factorization. NMF

NMF 非负矩阵分解,与 SVD 算法类似,用户和物品因子都必须是正值。

6. prediction_algorithms.slope_one. SlopeOne

通过计算物品之间的平均差异来进行预测。

7. prediction_algorithms.co_clustering. CoClustering

Surprise,是scikit系列中的一个推荐系统算法库。官网:http://surpriselib.com/;Conda指令:https://anaconda.org/nicolashug/scikit-surprise文档:http://surprise.readthedocs.io/en/stable/一、基本模块1. 推荐算法分类可分为基于用户行为的推荐算法和基于内容... Surprise 是一个用于简单快速构建 推荐 系统 Python ,其底层基于 Python Scikit 构建。       官方文档地址:https:// surprise .readthedocs.io/en/stable       安装方式:(1)通过pip安装,需具有Microsoft C++ Build Tools 环境。
Surprise is an easy-to-use Python scikit for recommender systems. 帮助文档 https:// surprise .readthedocs.io/en/stable/ 安装方法:pip install surprise 可能会出现安装失败:error: Microsoft Visual C++ 14.0 is required. Ge...
两种最普遍的 推荐 系统 的类型是基于内容和协同过滤(CF)。协同过滤基于用户对产品的态度产生 推荐 ,基于内容的 推荐 系统 基于物品属性的相似性进行 推荐 。CF可以分为基于内存的协同过滤和基于模型的协同过滤。 我们将使用MovieLens数据集,它是在实现和测试 推荐 引擎时所使用的最常见的数据集之一,包含来自943个用户以及精选的1682部电影的评分。数据下载地址 导入numpy和pandas imp...
许多人把 推荐 系统 视为一个神秘的存在,他们觉得 推荐 系统 似乎知道我们的想法是什么。Netflix向我们 推荐 电影,还有亚马逊向我们 推荐 该买什么样的商品。 推荐 系统 从早期发展到现在,已经得到了很大的改进和完善,以不断提高用户体验。尽管 推荐 系统 中许多都是非常复杂的 系统 ,但其背后的基本思想依然十分简单。 推荐 系统 是什么 推荐 系统 是信息过滤 系统 的一个子类,它根据用户的偏好和行为,来向用户呈现可能感兴趣的物品。 推荐 ...
def semantic_similarity(data): # 将评分矩阵转换为稀疏矩阵 ratings = sparse.csr_matrix((data['rating'], (data['user_id'], data['item_id']))) # 计算物品相似度矩阵 item_similarity = cosine_similarity(ratings.T) return item_similarity 然后,使用 surprise 提供的KNNBaseline 算法 计算 推荐 结果: ``` python from surprise import KNNBaseline # 计算物品相似度矩阵 item_similarity = semantic_similarity(data) # 使用KNNBaseline 算法 计算 推荐 结果 algo = KNNBaseline(sim_options={'user_based': False, 'name': 'cosine', 'min_support': 5}, verbose=False) algo.fit(data.build_full_trainset()) 最后,可以使用predict函数进行 推荐 : ``` python # 预测用户对某个物品的评分 user_id = 1 item_id = 1 rating = algo.predict(user_id, item_id) print(rating.est) 需要注意的是,以上代码仅为示例,实际应用中需要根据数据集和需求进行相应的调整。