• 登录
Skip to content

一起大数据-技术文章心得

一起大数据网由数据爱好者发起并维护,专注数据分析、挖掘、大数据相关领域的技术分享、交流。不定期组织爱好者聚会,期待通过跨行业的交流和碰撞,更好的推进各领域数据的价值落地。

Menu
  • 首页
  • 大数据案例
  • 数据&电子书
  • 视频
    • Excel视频
    • VBA视频
    • Mysql视频
    • 统计学视频
    • SPSS视频
    • R视频
    • SAS视频
    • Python视频
    • 数据挖掘视频
    • 龙星计划-数据挖掘
    • 大数据视频
    • Machine Learning with Python
  • 理论
    • 统计学
    • 数据分析
    • 机器学习
    • 大数据
  • 软件
    • Excel
    • Modeler
    • Python
    • R
    • SAS
    • SPSS
    • SQL
    • PostgreSQL
    • KNIME
  • 技术教程
    • SQL教程
    • SPSS简明教程
    • SAS教程
    • The Little SAS Book
    • SAS EG教程
    • R语言教程
    • Python3教程
    • IT 技术速查手册
    • Data Mining With Python and R
    • SAS Enterprise Miner
  • 问答社区
  • 我要提问
Menu

Python推荐系统库:Surprise

Posted on 2022年6月23日

Surprise简介

Surprise(Simple Python Recommendation System Engine)是一款推荐系统库,是scikit系列中的一个。surprise设计时考虑到以下目的:

  • 让用户完美控制他们的实验。为此,特别强调文档,试图通过指出算法的每个细节尽可能清晰和准确。
  • 减轻数据集处理的痛苦。用户可以使用内置数据集(Movielens, Jester)和他们自己的自定义数据集。
  • 提供各种即用型预测算法,例如基线算法,邻域方法,基于矩阵因子分解(SVD,PMF,SVD ++,NMF)等等。此外,内置了各种相似性度量(余弦,MSD,皮尔逊…)。
  • 可以轻松实现新的算法思路。
  • 提供评估,分析和比较算法性能的工具。使用强大的CV迭代器(受scikit-learn优秀工具启发)以及对一组参数的详尽搜索,可以非常轻松地运行交叉验证程序。

Surprise的主要特点是简单易用,同时支持多种推荐算法:

  • 基础算法/baseline algorithms
    • NormalPredictor: 根据训练集的分布特征随机给出一个预测值
    • BaselineOnly:给定用户和Item,给出基于baseline的估计值
  • 基于近邻方法(协同过滤)/neighborhood methods
    • KNNBasic:最基础的协同过滤
    • KNNWithMeans:将每个用户评分的均值考虑在内的协同过滤实现
    • KNNBaseline:考虑基线评级的协同过滤
  • 矩阵分解方法/matrix factorization-based
    • SVD:SVD实现
    • SVDpp:SVD++,即LFM+SVD
    • NMF:基于矩阵分解的协同过滤
    • SlopeOne:一个简单但精确的协同过滤算法
    • CoClustering:基于协同聚类的协同过滤算法

其中基于近邻的方法(协同过滤)可以设定不同的相似度度量标准:

  • Cosine:余弦相似度
  • msd:均方差异相似度
  • pearson:Pearson相关系数。
  • pearson_baseline:(缩小的)Pearson相关系数,使用基线进行居中而不是平均值。

支持不同的评估准则:

  • rmse:均方根误差
  • mae:平均绝对误差
  • fcp:协调对的分数

Surprise的使用

接下来,在surprise内置的数据集(movielens)上用协同过滤算法来构建一个简单的电影推荐系统。

利用协同过滤算法构建推荐系统,并测试效果

from __future__ import (absolute_import, division, print_function, unicode_literals)
import os
import io
 
from surprise import KNNBaseline
from surprise import Dataset
from evaluate, print_perf
 
# 定义read_item_names()函数,以获取电影名到电影id和电影id到电影名的映射
def read_item_names():
    file_name = (os.path.expanduser('~') + '/.surprise_data/ml-100k/ml-100k/u.item')
    rid_to_name = {}
    name_to_rid = {}
    with io.open(file_name, 'r', encoding='ISO-8859-1') as f:
        for line in f:
            line = line.split('|')
            rid_to_name[line[0]] = line[1]
            name_to_rid[line[1]] = line[0]
 
    return rid_to_name, name_to_rid
 
# 用KNNBaseline算法构建推荐系统,计算相似度
data = Dataset.load_builtin('ml-100k')
trainset = data.build_full_trainset()
sim_options = {'name': 'pearson_baseline', 'user_based': False}
algo = KNNBaseline(sim_options=sim_options)
algo.train(trainset)
# 用RMSE、MAE和FCP测试推荐系统效果
perf = evaluate(algo, data, measures=['RMSE', 'MAE', 'FCP'])
# 输出结果
print_perf(perf)

利用构建的电影推荐系统进行推荐

# 获取电影名到电影id 和 电影id到电影名的映射
rid_to_name, name_to_rid = read_item_names()
# 根据Toy Story这部电影来进行推荐
# 找到Toy Story这部电影对应的item id
toy_story_raw_id = name_to_rid['Toy Story (1995)']
toy_story_raw_id
toy_story_inner_id = algo.trainset.to_inner_iid(toy_story_raw_id)
toy_story_inner_id
# 找到相似度最近的10个电影
toy_story_neighbors = algo.get_neighbors(toy_story_inner_id, k=10)
toy_story_neighbors
# 从近邻的id映射回电影名称
toy_story_neighbors = (algo.trainset.to_raw_iid(inner_id)
                       for inner_id in toy_story_neighbors)
toy_story_neighbors = (rid_to_name[rid]
                       for rid in toy_story_neighbors)
 
print()
print('The 10 nearest neighbors of Toy Story are:')
for movie in toy_story_neighbors:
    print(movie)

参考链接:

  • http://surpriselib.com/
  • https://surprise.readthedocs.io/en/stable/

恭喜你,又看完一篇文章,扫码领个红包吧!图片

推荐访问

欢迎加入我们的付费交流社群,增长见识,互帮互助! 自2023-05-01起正式运营。
图片

数据分析交流:数据分析交流
Excel学习: Excel学习交流
Python交流:一起学习Python(数据分
SQL交流:一起学习SQL(数据分析
微博:一起大数据

最新提问

  • 统计方面的3个Python包
  • 更新R及Rstudio
  • TFP CausalImpact:一个Python包,用于估计设计干预对时间序列的因果效应
  • 根据公式的结构,写出计算的表达式,并结算结果
  • excel中提取超级链接公式中的链接地址
  • 用python解析公式并进行可视化
  • Python设置镜像源默认为清华的方法
  • VAR、VMA、VARMA 和 ARIMA
  • Python 的表达式解析库来解析公式
  • PandasAI:一个Python库,将生成式AI能力集成到Pandas中,允许进行高级数据分析任务,例如数据合成和增强

文章标签

AMOS CBC Excel GBDT KNN Modeler Mysql pandas PostgreSQL python python数据可视化 R SAS sklearn SPSS SQL SVM Tableau TensorFlow VBA 主成分分析 关联规则 决策树 协同过滤 可视化 因子分析 大数据 大数据分析 推荐系统 数据分析 数据可视化 数据挖掘 数据透视表 文本挖掘 时间序列 机器学习 深度学习 神经网络 结构方程 统计学 联合分析 聚类 聚类分析 逻辑回归 随机森林
©2023 一起大数据-技术文章心得 | Design: Newspaperly WordPress Theme