推荐系统:通过surprise近邻查找相似用户和相似项目

简介: 推荐系统:通过surprise近邻查找相似用户和相似项目

实现结果:

1、找到和用户A相似的N个用户

2、找到和项目A相似的N个项目

数据下载(1 MB):https://grouplens.org/datasets/movielens/

数据格式:data/ratings.csv

userId,movieId,rating,timestamp
1,1,4.0,964982703
1,3,4.0,964981247
1,6,4.0,964982224
1,47,5.0,964983815
1,50,5.0,964982931
1,70,3.0,964982400
1,101,5.0,964980868
...

简单查看数据数量

# -*- coding: utf-8 -*-
import pandas as pd
file_path = 'data/ratings.csv'
data_frame = pd.read_csv(file_path)
print(len(data_frame.groupby("userId")))
print(len(data_frame.groupby("movieId")))
# 610  9724

查找相似用户 和 相似项目

# -*- coding: utf-8 -*-
from surprise import KNNBasic, Dataset, Reader
# 数据读取
file_path = 'data/ratings.csv'
reader = Reader(line_format='user item rating timestamp', sep=',', skip_lines=1)
data = Dataset.load_from_file(file_path, reader=reader)
train_set = data.build_full_trainset()
# 训练模型:基于用户相似度
user_knn_basic = KNNBasic(k=10, min_k=3, sim_options={'user_based': True})
user_knn_basic.fit(train_set)
def get_similar_users(top_k, user_id):
    """
    找到相似用户
    Args:
        top_k(int): 相似用户数量
        user_id(str): 用户id
    Returns:
        list generator
    """
    user_inner_id = user_knn_basic.trainset.to_inner_uid(user_id)
    user_neighbors = user_knn_basic.get_neighbors(user_inner_id, k=top_k)
    user_neighbor_ids = (user_knn_basic.trainset.to_raw_uid(inner_id) for inner_id in user_neighbors)
    return user_neighbor_ids
print(list(get_similar_users(5, '610')))
# ['429', '508', '545', '53', '463']
# 训练模型:基于项目相似度
item_algo = KNNBasic(k=10, min_k=3, sim_options={'user_based': False})
# sim_options={'name': 'cosine','user_based': True} cosine/msd/pearson/pearson_baseline
item_algo.fit(train_set)
def get_similar_items(top_k, item_id):
    """
    相似项目
    Args:
        top_k(int): 相似项目数量
        item_id(str): 项目id
    Returns:
        list generator
    """
    item_inner_id = item_algo.trainset.to_inner_iid(item_id)
    item_neighbors = item_algo.get_neighbors(item_inner_id, k=top_k)
    item_neighbor_ids = (item_algo.trainset.to_raw_iid(inner_id) for inner_id in item_neighbors)
    return item_neighbor_ids
print(list(get_similar_items(5, '761')))
# ['423', '1009', '1804', '2099', '2899']

通过找到的相似用户计算他们的相似度

# -*- coding: utf-8 -*-
import pandas as pd
file_path = 'data/ratings.csv'
data_frame = pd.read_csv(file_path)
def get_user_movie(user_id):
    return data_frame[data_frame.userId == user_id].movieId.tolist()
user_movies = get_user_movie(610)
set_movies = set(movies)
similar_user_ids = [429, 508, 545, 53, 463]
for similar_user_id in similar_user_ids:
    movies = get_user_movie(similar_user_id)
    set_user_movies = set(user_movies)
    similar_score = len((set_user_movies & set_movies)) / len((set_user_movies | set_movies))
    print("{:.2f}".format(similar_score), end="\t")
    # 0.00  0.00  0.00  0.00  0.01

相似度很低…

参考

3分钟学会使用Python推荐系统库Surprise

相关文章
openpyxl 一行代码批量修改单元格属性、修改全部单元格属性 、设置自动换行、修改全部单元格style为自动换行
openpyxl 一行代码批量修改单元格属性、修改全部单元格属性 、设置自动换行、修改全部单元格style为自动换行
432 0
|
存储 关系型数据库 MySQL
mysql数据库突然不见的原因之一
mysql数据库突然不见的原因之一
411 0
|
对象存储
阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)
阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)
800 0
|
12月前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
1436 11
|
前端开发 JavaScript 搜索推荐
Next.js 适合什么类型的项目开发?
【8月更文挑战第4天】Next.js 适合什么类型的项目开发?
516 3
|
10月前
|
前端开发 JavaScript
Bootstrap5 消息弹窗(Toasts)1
Bootstrap5 弹窗(Toasts) 是一种轻量级通知组件,适用于页面角落或底部显示临时信息。使用 .toast 类创建,包含 .toast-header 和 .toast-body 分别定义标题和内容。默认关闭状态,通过 .show 显示,利用 data-bs-dismiss="toast" 关闭。支持通过 JavaScript 初始化和控制显示。
|
JavaScript 前端开发 C++
vscode编辑器中如何调试nextjs代码
代码可调式的重要性不言而喻。 对于Programer来说,自己编写的程序能够被优雅调试是一件幸福的事情,特别是习惯了后端程序调试的开发者... 在折腾Nextjs项目的日子里,我走了很多弯路才弄明白在vs code中如何优雅的调试代码。
992 1
vscode编辑器中如何调试nextjs代码
|
Java 关系型数据库 MySQL
在线租房|基于Springboot+Vue实现前后端分离的租房系统
在线租房|基于Springboot+Vue实现前后端分离的租房系统
335 0
|
并行计算 TensorFlow 算法框架/工具
Windows10下CUDA9.0+CUDNN7.0.5的完美安装教程
该文介绍了如何在Windows 10上安装CUDA 9.0和cuDNN 7.0.5以支持Tensorflow-gpu 1.10.0。首先,解释了安装CUDA的原因,然后详细步骤包括:从NVIDIA官网下载CUDA 9.0,选择自定义安装并关闭不必要的组件,检查显卡驱动版本以决定是否安装Display Driver,最后确认安装成功。接着,下载cuDNN需要注册NVIDIA账户,解压后将文件复制到CUDA安装目录。整个过程旨在确保与Tensorflow-gpu 1.10.0的兼容性。
1016 2
|
关系型数据库 Java MySQL
从0开始部署阿里云服务器(萌新必看)
搭建阿里云服务器涉及购买、控制台介绍及配置。购买时可选择免费试用或直接购买,根据需求选择计费方式和地区。在服务器控制台,可找到实例并进行远程连接。配置包括Java环境,卸载OpenJDK,下载安装Java,配置环境变量。接着配置Tomcat,下载对应版本,解压并启动,确保防火墙允许8080端口。最后配置MySQL,安装,设置密码,更新远程访问权限。整个过程旨在提供一个基础的云服务器配置指南。
2388 0