基于movie lens-100k数据集的协同过滤算法实现

基于movie lens-100k数据集的协同过滤算法实现

数据集处理
基于用户的协同过滤算法的实现
基于物品的协同过滤算法的实现

数据集处理

import pandas as pdu_data = pd.read_csv('D:/PyCharmWorkSpace/ml-100k/ml-100k/u.data')
u_genre = pd.read_csv('D:/PyCharmWorkSpace/ml-100k/ml-100k/u.genre')
u_info = pd.read_csv('D:/PyCharmWorkSpace/ml-100k/ml-100k/u.info')
# u_item = pd.read_csv('D:/PyCharmWorkSpace/ml-100k/ml-100k/u.item')
u_occupation = pd.read_csv('D:/PyCharmWorkSpace/ml-100k/ml-100k/u.occupation')
# u_user = pd.read_csv('D:/PyCharmWorkSpace/ml-100k/ml-100k/u.user')
u_user = pd.read_csv('D:/PyCharmWorkSpace/ml-100k/ml-100k/u.user', encoding='GBK', sep='|', names=['user_id', 'age', 'gender', 'occupation', 'zip_code'])# 加载评分数据集
u_ratings = pd.read_csv('D:/PyCharmWorkSpace/ml-100k/ml-100k/u.data', sep='\t', names=['user_id', 'item_id', 'rating', 'timestamp'])# 合并用户信息(u_user)和评分信息(u_ratings)
u_result = pd.merge(u_user, u_ratings, on='user_id')# 保存结果到u_result.csv文件
u_result.to_csv('D:/PyCharmWorkSpace/ml-100k/ml-100k/u_result_text1.csv', index=False)u_result_sorted = u_result.sort_values(by='user_id')# 保存结果到 u_result_sorted.csv 文件
u_result_sorted.to_csv('D:/PyCharmWorkSpace/ml-100k/ml-100k/u_result_sorted.csv', index=False)

文件结构
在这里插入图片描述

基于用户的协同过滤算法的实现

import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity# 加载处理好的文件
u_result = pd.read_csv('D:/PyCharmWorkSpace/ml-100k/ml-100k/u_result_text1.csv')# 构件用户-物品评分矩阵
ratings_matrix = u_result.pivot_table(index='user_id', columns='item_id', values='rating').fillna(0)
print("评分矩阵:", ratings_matrix)# 计算用户之间的相似度
user_similarity = cosine_similarity(ratings_matrix)
print("用户之间的相似度矩阵:", user_similarity)
rows = user_similarity.shape[0]
columns = user_similarity.shape[1]
print("矩阵的行数为:", rows)
print("矩阵的列数为:", columns)
def generate_recommendations(ratings_matrix, user_similarity, user_id, k, min_rating_threshold):# 找到目标用户已经评分的物品rated_items = ratings_matrix.loc[user_id]# 找到与目标用户相似度最高的k个邻居用户similarities = list(enumerate(user_similarity[user_id]))similarities.sort(key=lambda x: x[1], reverse=True)neighbors = [x[0] for x in similarities[1:k + 1]]print("邻居用户:", neighbors)# 汇总邻居用户的评分记录neighbor_ratings = ratings_matrix.loc[neighbors]# 根据邻居用户的评分记录和预测评分公式生成推荐列表recommendations = []for item_id, rating in neighbor_ratings.items():if rated_items[item_id] == 0:  # 只考虑目标用户未评分过的物品prediction = predict_rating(neighbor_ratings, user_similarity, user_id, item_id, k)if prediction > min_rating_threshold:  # 添加阈值条件recommendations.append((item_id, prediction))# print("第一次打印:", recommendations)recommendations.sort(key=lambda x: x[1], reverse=True)  # 按照预测评分降序排序return recommendations# 预测评分公式
def predict_rating(ratings_matrix, user_similarity, user_id, item_id, k):numerator = 0  # 分子denominator = 0  # 分母# 找到与目标用户相似度最高的k个邻居用户similarities = list(enumerate(user_similarity[user_id]))similarities.sort(key=lambda x: x[1], reverse=True)neighbors = [x[0] for x in similarities[1:k + 1]]for neighbor in neighbors:similarity = user_similarity[user_id][neighbor]rating = ratings_matrix.loc[neighbor, item_id]numerator += similarity * ratingdenominator += similarityif denominator != 0:prediction = numerator / denominatorelse:prediction = 0return predictionuser_id = 98  # 目标用户ID
k = 3  # 邻居数量
min_rating_threshold = 4.0  # 最小预测评分阈值recommendations = generate_recommendations(ratings_matrix, user_similarity, user_id, k, min_rating_threshold)
# print("预测物品列表:")
print(recommendations)

基于物品的协同过滤算法的实现

import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity# 加载处理好的文件
u_result = pd.read_csv('D:/PyCharmWorkSpace/ml-100k/ml-100k/u_result_text1.csv')
# 构件物品-用户评分矩阵
ratings_matrix = u_result.pivot_table(index='item_id', columns='user_id', values='rating').fillna(0)
print("评分矩阵:", ratings_matrix)
# 计算物品之间的相似度
item_similarity = cosine_similarity(ratings_matrix)
print("物品之间的相似度矩阵:", item_similarity)def generate_recommendations(ratings_matrix, item_similarity, user_id, k, min_rating_threshold):# 找到目标用户已经评分的物品rated_items = ratings_matrix.transpose().loc[user_id]# 找到与目标物品相似度最高的k个邻居物品similarities = list(enumerate(item_similarity[user_id]))similarities.sort(key=lambda x: x[1], reverse=True)neighbors = [x[0] for x in similarities[1:k + 1]]print("邻居物品:", neighbors)# 根据邻居物品的评分记录和预测评分公式生成推荐列表recommendations = []for neighbor in neighbors:neighbor_ratings = ratings_matrix[neighbor]for user, rating in neighbor_ratings.items():if rated_items[user] == 0:  # 只考虑目标用户未评分过的物品prediction = predict_rating(ratings_matrix, item_similarity, user, neighbor, k)if prediction > min_rating_threshold:  # 添加阈值条件recommendations.append((user, prediction))recommendations.sort(key=lambda x: x[1], reverse=True)  # 按照预测评分降序排序return recommendations# 预测评分公式
def predict_rating(ratings_matrix, item_similarity, user_id, item_id, k):numerator = 0  # 分子denominator = 0  # 分母# 找到与目标物品相似度最高的k个邻居物品similarities = list(enumerate(item_similarity[item_id]))similarities.sort(key=lambda x: x[1], reverse=True)neighbors = [x[0] for x in similarities[1:k + 1]]for neighbor in neighbors:similarity = item_similarity[item_id][neighbor]rating = ratings_matrix[neighbor][user_id]numerator += similarity * ratingdenominator += similarityif denominator != 0:prediction = numerator / denominatorelse:prediction = 0return prediction
user_id = 98  # 目标用户ID
k = 3  # 邻居数量
min_rating_threshold = 3.3  # 最小预测评分阈值
recommendations = generate_recommendations(ratings_matrix, item_similarity, user_id, k, min_rating_threshold)
print(recommendations)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/138331.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何批量为文件夹命名

如果你想要命名一些这样名字具有规律性的文件夹,当文件的数量增多,一个一个命名是非常耗费时间的。很容易想到,如果使用EXCEL,只需往下拉,就能很轻松的拉出1到5。那么,我们如何利用EXCEL来对文件夹进行快速…

LazadaAPI接口解析,实现获得lazada商品评论列表

Lazada是一个流行的跨境电商平台,它提供了API接口供开发者使用。要获取Lazada商品评论列表,您需要使用Lazada API接口并进行相应的请求。 以下是使用Lazada API接口获取商品评论列表的示例代码(使用Python编写): pyth…

【Linux】系统编程线程互斥与同步(C++)

目录 【1】线程互斥 【1.1】进程线程间的互斥相关背景概念 【1.2】互斥量mutex 【1.3】互斥量实现原理探究 【1.4】RAII的加锁风格 【2】可重入VS线程安全 【2.1】概念 【2.2】常见的线程不安全的情况 【2.3】常见的线程安全的情况 【2.4】常见不可重入的情况 【2.5…

无线定位中TDOA时延估计算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...................................................................figure; plot(P1x,P1y…

【Graph Net学习】LINE实现Graph Embedding

一、简介 LINE (Large-scale Information Network Embedding,2015) 是一种设计用于处理大规模信息网络的算法。它主要的目标是在给定的大规模信息网络中学习高质量的节点嵌入,并尽量保留网络中信息的丰富性。其具体的表现为在一个低 维空间里以向量形式表示网络中的…

华为云云耀云服务器L实例评测|华为云上安装监控服务Prometheus三件套安装

文章目录 华为云云耀云服务器L实例评测|华为云上试用监控服务Prometheus一、监控服务Prometheus三件套介绍二、华为云主机准备三、Prometheus安装四、Grafana安装五、alertmanager安装六、三个服务的启停管理1. Prometheus、Alertmanager 和 Grafana 启动顺序2. 使用…

mysql workbench常用操作

1、No database selected Select the default DB to be used by double-clicking its name in the SCHEMAS list in the sidebar 方法一:双击你要使用的库 方法二:USE 数据库名 2、复制表名,字段名 3、保存链接

折线图geom_line()参数选项

往期折线图教程 图形复现| 使用R语言绘制折线图折线图指定位置标记折线图形状更改 | 绘制动态折线图跟着NC学作图 | 使用python绘制折线图 前言 我们折线的专栏推出一段时间,但是由于个人的原因,一直未进行更新。那么今天,我们也参考《R语…

Kafka-UI

有多款kafka管理应用,目前选择的是github上star最多的UI for Apache Kafka。 关于 To run UI for Apache Kafka, you can use either a pre-built Docker image or build it (or a jar file) yourself. UI for Apache Kafka is a versatile, fast, and lightweight…

关于ABB机器人的IO创建和设置

首先要链接网线,请求写权限 关于ABB机器人的默认地址位10有的是63.31看你硬接线 ABB机器人分配好信号机器人控制柜要重启 可以把机器人分配的信号导出为EIO 类似与发那科机器人IO

Spring底层原理之 BeanFactory 与 ApplicationContext

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 Spring底层原理 一、 BeanFactory 与 Appli…

ChatGPT追祖寻宗:GPT-3技术报告要点解读

论文地址:https://arxiv.org/abs/2005.14165 往期相关文章: ChatGPT追祖寻宗:GPT-1论文要点解读_五点钟科技的博客-CSDN博客ChatGPT追祖寻宗:GPT-2论文要点解读_五点钟科技的博客-CSDN博客 本文的标题之所以取名技术报告而不是论文…

无法删除目录(设备或资源忙)

文章目录 无法删除目录(设备或资源忙)问题原因解决方案步骤一:首先找到挂载的位置步骤二:取消挂载步骤三:查看挂在情况 无法删除目录(设备或资源忙) 问题 原因 网络共享挂载导致无法删除 解决…

C++实现观察者模式(包含源码)

文章目录 观察者模式一、基本概念二、实现方式三、角色四、过程五、结构图六、构建思路七、完整代码 观察者模式 一、基本概念 观察者模式(又被称为模型(Model)-视图(View)模式)是软件设计模式的一种。在…

Twitter图片数据优化的细节

Twitter个人数据优化:吸引更多关注和互动 头像照片在Twitter上,头像照片是最快识别一个账号的方法之一。因此,请务必使用公司的标志或与品牌相关的图片。建议尺寸为400x400像素。 为了建立强大的品牌形象和一致性,强烈建议在所有…

Spring MVC常见面试题

Spring MVC简介 Spring MVC框架是以请求为驱动,围绕Servlet设计,将请求发给控制器,然后通过模型对象,分派器来展示请求结果视图。简单来说,Spring MVC整合了前端请求的处理及响应。 Servlet 是运行在 Web 服务器或应用…

Xcode 15 运行<iOS 14, 启动崩溃问题

如题. Xcode 15 启动 < iOS 14(没具体验证过, 我的问题设备是iOS 13.7)真机设备 出现启动崩溃 解决方案: Build Settings -> Other Linker Flags -> Add -> -ld64

第八天:gec6818arm开发板和Ubuntu中安装并且编译移植mysql驱动连接QT执行程序

一、Ubuntu18.04中安装并且编译移植mysql驱动程序连接qt执行程序 1 、安装Mysql sudo apt-get install mysql-serverapt-get isntall mysql-clientsudo apt-get install libmysqlclient-d2、查看是否安装成功&#xff0c;即查看MySQL版本 mysql --version 3、MySQL启动…

STP生成树协议基本配置示例---STP逻辑树产生和修改

STP是用来避免数据链路层出现逻辑环路的协议&#xff0c;运行STP协议的设备通过交互信息发现环路&#xff0c;并通过阻塞特定端口&#xff0c;最终将网络结构修剪成无环路的树形结构。在网络出现故障的时候&#xff0c;STP能快速发现链路故障&#xff0c;并尽快找出另外一条路径…

Selenium-介绍下其他骚操作

Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器&#xff08;如 Chrome、Opera 和 Microsoft Edge&#xff09;中的工具&#xff0c;用于帮助开发人员调试和研究网站。 借助 Chrome DevTools&#xff0c;开发人员可以更深入地访问网站&#xf…