基于用户的最近邻推荐

mapreduce实现推荐系统(UserCF-基于用户的协同过滤算法) 博客说明: 博客内容用于学习与分享,有问题欢迎大家讨论留言。 关于作者: 程序员:杨洪(ellende) blog: http://blog.youkuaiyun.com/ellende email: yangh.personal@qq.com 转载请注明出处,引用部分网上博客,若有侵权还请作者联系与我。 用户推荐协同过滤算法(UserCF)原理说明 阅读详情


课程 Python代码:

__author__ = 'LiFeiteng(Email: lifeiteng0422@gmail.com)'
# -*- coding: utf-8 -*-
import numpy as np

class	UserUserRec:
	def __init__(self):
		self.U = 0  # user number
		self.M = 0  # movie number
		self.user_dict = {}
		self.movie_dict = {}
		self.movie_title = {}
		self.user_ratings = np.matrix([])

	def GetRatingData(self, ratings_file):
		for line in open(ratings_file):
			user, movie, rating = line.split(",")
			if not self.user_dict.has_key(user):
				self.user_dict[user] = self.U
				self.U += 1
			if not self.movie_dict.has_key(movie):
				self.movie_dict[movie] = self.M
				self.M += 1
		print self.U, self.M
		self.user_ratings = np.matrix(np.zeros([self.U, self.M]))
		for line in open("ratings.csv", "r"):
			user, movie, rating = line.split(",")
			self.user_ratings[self.user_dict[user], self.movie_dict[movie]] = np.double(rating)

	def GetMovieTitles(self, movie_titles_file):
		for line in open(movie_titles_file):
			movie, title = line.split(",")
			#delete '\n'
			self.movie_title[movie] = title[:-1]

	def CosineUserSim(self, user1, user2): 
		'''用户相似性计算 useri 为评分矩阵对应的行号'''
		user_rat = self.user_ratings[user1,:].copy()
		u1 = user_rat - np.mean(user_rat[user_rat>0.0])
		u1 = np.array(u1)*np.array(np.where(user_rat>0, 1, 0))

		user_rat = self.user_ratings[user2,:].copy()
		u2 = user_rat - np.mean(user_rat[user_rat>0.0])
		u2 = np.array(u2)*np.array(np.where(user_rat>0, 1, 0))

		if (np.linalg.norm(u1[0,:])*np.linalg.norm(u2[0,:])) == 0:
			sim = 0.0
		else:
			sim = np.dot(u1[0,:],u2[0,:])/(np.linalg.norm(u1[0,:])*np.linalg.norm(u2[0,:]))
		return np.double(sim)

	def MovieScore4User(self, user, movie):
		'''基于用户的推荐,根据user最相似的30位其他用户预测user对movie的rating'''
		rating4movie = self.user_ratings[:, self.movie_dict[movie]]
		Temp = []
		userID = 0
		for rating in rating4movie:
			if rating != 0.0:
				Temp.append([userID, rating, self.CosineUserSim(self.user_dict[user], userID)])
			userID += 1
		Temp = sorted(Temp, key=lambda e:e[2], reverse=True)
		n = 0
		sim_add = 0.0
		score4movie = 0.0
		for data in Temp:
			if n >= 30:
				break
			userID = data[0]
			rat = data[1]
			if userID != self.user_dict[user] and rat != 0.0:
				sim = data[2]
				user_rat = self.user_ratings[userID,:].copy()
				mu = np.mean(user_rat[user_rat > 0.0])
				score4movie += (rat-mu) * sim
				sim_add += np.abs(sim)
				n += 1

		score4movie /= sim_add
		user_rat = self.user_ratings[self.user_dict[user],:].copy()
		score4movie += np.mean(user_rat[user_rat > 0.0])
		score4movie = np.double(score4movie)
		print ",".join([user, movie, format(score4movie,".4f"), self.movie_title[movie]])
		return score4movie
# end of class UserUserRec


if __name__ == '__main__':
	#### PA3
	user_user_rec = UserUserRec()
	user_user_rec.GetRatingData("ratings.csv")
	user_user_rec.GetMovieTitles("movie-titles.csv")

	outfile = open("outfile.txt","w")
	for line in open("input.txt"):# input
		user, movie = line.split(":")
		movie = str(int(movie))
		score = user_user_rec.MovieScore4User(user, movie)
		str1 = ",".join([user, movie, format(score, ".4f"), user_user_rec.movie_title[movie]])
		outfile.write(str1+"\n")
	outfile.close()

代码数据连接:https://www.dropbox.com/s/78ifrycp9x1238i/UserUserRec.rar





【推荐系统】协同过滤之基于用户的最近邻推荐 1.算法简介 协同过滤(collaborative filtering)的核心思想:利用其他用户的行为来预测当前用户。协同过滤算法是推荐系统中最基本的,同时在业界广为使用。根据使用的方法不同,可以分为基于用户(user-based)、基于物品(item-based)的最近邻推荐。 基于用户的最近邻推荐的主要思想:对于一个给定的评分集,找出与当前用户u口味相近的k个用户;然后,对 阅读详情

相关推荐

movie_data.csv

国外排名前100名电影名称及内容简介,可用于python数据分析等应用。

推荐系统开发实战笔记(二)——数据集

搭建推荐系统的一般步骤: 1.准备数据 2.选择算法 3.模型训练 1.效果评估 1.准备数据 数据是推荐按系统的基础,无论是简单的推荐系统还是大型的推荐系统,都需要一定的基础数据。这些数据不仅要包含进行推荐的商品,还要包含用户的行为日志。 Netflix数据集 ...

weixin_44338928的博客 664

基于用户最近邻模型的协同过滤算法的Python实现

基于用户最近邻模型的协同过滤算法的Python代码实现,用户相似度用Pearson相关系数进行计算。

Java推荐系统-基于用户的最近邻协同过滤算法

基于用户的最近邻算法(User-Based Neighbor Algorithms),是一种非概率性的协同过滤算法,也是推荐系统中最最古老,最著名的算法,我们称那些兴趣相似的用户为邻居,如果用户n相似于用户u,我们就说n是u的一个邻居。起初算法,对于未知目标的预测是根据该用户的相似用户的评分作出预测的 本文中以电影推荐为例: 假设有7个人像向你分别推荐了电影,你是其中的小明,你自己也看过一些电...

天下武功唯CODING不破 3万+

netflix_titles.csv

TV Shows and Movies listed on Netflix This dataset consists of tv shows and movies available on Netflix as of 2019. The dataset is collected from Flixable which is a third-party Netflix search engine. In 2018, they released an interesting report which shows that the number of TV shows on Netflix has nearly tripled since 2010. The streaming service’s number of movies has decreased by more than 2,000 titles since 2010, while its number of TV shows has nearly tripled. It will be interesting to explore what all other insights can be obtained from the same dataset. Integrating this dataset with other external datasets such as IMDB ratings, rotten tomatoes can also provide many interesting findings. Inspiration Some of the interesting questions (tasks) which can be performed on this dataset - Understanding what content is available in different countries Identifying similar content by matching text-based features Network analysis of Actors / Directors and find interesting insights Is Netflix has increasingly focusing on TV rather than movies in recent years.

movie_reviews.csv

这是一份情感分类数据,movie_review.csv,可以用于情感分类的学术研究,因为数据下载速度比较慢,特此分享

Jupyter notebook数据导入和简单可视化

Jupyter notebook可视化入门操作。

sophie17的博客 1436

基于用户相似度和社会关系和地理位置三个因素的POI推荐系统(Foursquare数据和python代码)

最经典的基于用户相似度和社会关系和地理位置三个因素的POI推荐系统,压缩包里有3个python2.7的代码文件和3个数据文本,分别是foursquare签到数据,爬下来的用户好友关系数据,和POI的经纬度数据。代码可以直接运行【python filename.py】

电影推荐系统代码详细解释

先说句不太好听的: 电影推荐这种东西,除非是在电商或者大公司类的等相关的公司工作,或者学习研究需要,否则这种代码就不要看了,浪费时间。 道理很简单,一般小公司就那么可怜巴巴的一小堆客户,手指头数的过来的产品种类,推荐个啥?公司用不到,也就没必要学。 各种书籍中,凡是涉及推荐系统,除非你目标的公司是做这种岗位的,否则请直接跳过。 注:代码不是我写的,我只是尽可能多的做了注释,所以这...

微电子学与固体电子学-俞驰 1万+

dify工作流的原理

摘要: Dify 工作流是一个基于有向无环图(DAG)的智能任务编排系统,支持多节点(如LLM调用、API工具、条件分支等)的可视化拖拽与流程编排。其核心原理包括执行引擎(解析DAG并管理节点依赖)、上下文变量传递(类Jinja模板的变量引用机制)和状态持久化(存储执行日志与中间结果)。工作流通过事件驱动执行,支持异步任务调度,并与RAG知识库、LLM服务等模块深度集成,最终可发布为API或对话应用。技术栈基于Python(FastAPI+Celery)和PostgreSQL,实现低代码化的AI应用开发。

nbspzs的专栏 2188

ComfyUI实战:AnimateDiff与ControlNet结合,打造无缝风格化视频转绘

本文详细介绍了如何利用ComfyUI平台,结合AnimateDiff与ControlNet插件,实现高质量的视频风格化转绘。通过搭建节点工作流、调整关键参数,有效解决画面闪烁与失真问题,并分享了进阶玩法与常见问题解决方案,帮助用户轻松打造流畅、风格统一的动态视觉效果。

weixin_29039773的博客 339

协同过滤推荐算法:基于用户的最近邻推荐

基于用户的最近邻推荐 如何判断用户喜欢什么东西?我们可以利用与该用户相似的人群,看看他们喜欢什么商品,然后推荐给该用户。 1.计算用户相似度:Pearson相关系数 下面表格给出了一个用户-物品评分矩阵。 表1 协同推荐的评分数据库 物品1 物品2 物品3 物品4 物品5 Alice 5 3 4 4 ? 用户1 3 1 2 3 3 用户2 4 3 4 3 5 用户3 ...

程序猿视角 3392

【开源训练数据集2】10个最适合机器学习的股票市场数据集

​随着加密货币在世界各地的兴起,人们现在有比以往更多的投资方式。然而,这并不像低买高卖那么简单。如果你能准确预测股市,你就会成为地球上最富有的人之一。因此,之前已经有关于如何利用情绪分析来预测股市的研究。对于那些希望构建类似预测模型的人,本文将介绍 10 个用于机器学习的股票市场和加密货币数据集。

u010542847的博客 2139

协同过滤之 一、基于用户最近邻的推荐算法

1、协同过滤则是推荐系统中较为广泛使用的推荐技术之一,其实质是对用户的历史评分矩阵数据进行建模分析从而为用户推荐合适的产品。 协同过滤在学术界和工业界已经得到了广泛的研究并提出了很多算法。其中比较常见的有基于最近邻方法(包括基于用户最近邻和基于项目最近邻的方法)、Slope One、隐因子模型(主要包括受限玻尔兹曼机模型和矩阵分解技术)、贝叶斯模型、聚类技术和决策树方法等等。其中最常用也最有效的

u013414741的专栏 9213

TensorRT(C++)部署 Pytorch模型

众所周知,python训练pytorch模型得到.pt模型。但在实际项目应用中,特别是嵌入式端部署时,受限于语言、硬件算力等因素,往往需要优化部署,而tensorRT是最常用的一种方式。本文以yolov5的部署为例,说明模型部署在x86架构上的电脑端的流程。(部署在Arm架构的嵌入式端的流程类似)。

女神sha手的博客 5407

目标检测中回归损失函数(L1Loss,L2Loss,Smooth L1Loss,IOU,GIOU,DIOU,CIOU,EIOU,αIOU ,SIOU)

为了解决CIoU的问题,有学者在CIOU的基础上将纵横比拆开,提出了EIOU Loss,并且加入Focal聚焦优质的预测框,与CIoU相似的,EIoU是损失函数的解决方案,只用于训练。在错误率小的地方,梯度的值也应当小,反之在错误率大的地方,梯度也应当大,因为这时候我们需要对错误率小的情况进行微调,而错误率大的地方进行大刀阔斧的调整;如下图所示,三种情况IoU都相等,但看得出来他们的重合度是不一样的,左边的图回归的效果最好,右边的最差。DIoU的作者考虑到,在两个框中心点重合时,c与d的值都不变。

zyw2002的博客 6631

推荐系统-基于用户的最近邻协同过滤算法(MovieLens数据集)

基于用户的最近邻算法(User-Based Neighbor Algorithms),是一种非概率性的协同过滤算法,也是推荐系统中最最古老,最著名的算法。 我们称那些兴趣相似的用户为邻居,如果用户n相似于用户u,我们就说n是u的一个邻居。起初算法,对于未知目标的预测是根据该用户的相似用户的评分作出预测的。 本文中运用的是MovieLens数据集,关于这个数据集的介绍可以参看http:/

书读的太少,想的太多 2万+

PX4无人机-Gazebo仿真实现动态目标追踪的视觉控制方案

本文详细介绍了PX4无人机在Gazebo仿真环境中实现动态目标追踪的视觉控制方案。从PX4与Gazebo仿真环境搭建、动态目标追踪核心技术栈、仿真环境深度定制技巧到追踪算法的优化实践,提供了全面的技术指导和常见问题排查方法,帮助开发者高效实现无人机视觉追踪功能。

weixin_29196315的博客 451

《推荐系统》002 基于用户的最近邻推荐

协同过滤: 利用已经存在的用户群体,对当前的用户的喜好进行推测。 基于用户的最近邻推荐: 先找出与当前用户喜好相似的用户信息,然后根据他们的评价体系对当前用户对未知物品的评价等级。 前提假设: 1.用户过去喜好相似,将来他们的喜好也会很相似 2.用户的喜好不会随着时间而改变 案例: 上表所示为Alice和其他四位用户对五类物品的评价分数,1表示不喜...

『程序员·小李』的博客 1185

【WorkBuddy专栏52】Codex与WorkBuddy生态适配、用户争夺与未来走向(下)

【WorkBuddy专栏52】Codex与WorkBuddy在中国大陆的发展——生态适配、用户争夺与未来走向(下)

AI人人懂 679

YOLO26涨点改进 | 全网独家创新、检测头Head改进篇 | AAAI 2026 | 使用StripConvHead改进YOLO26的检测头,处理小目标、遮挡小目标检测有效涨点,助力高效发论文

🔥本文给大家介绍使用StripConv条形卷积改进 YOLO26的检测头,可以显著提高模型在高纵横比物体检测、目标定位和多尺度物体检测方面的表现。StripConv条形卷积能够更有效地捕捉细长物体的特征,提升定位精度,并通过简化卷积核设计减少计算冗余,优化计算效率。此外,该改进增强了 YOLO26对复杂场景和实时任务的适应能力,特别适用于遥感图像目标检测、小目标检测等领域。具体怎么使用请看全文。摘要:随着遥感物体检测的快速发展,检测高纵横比物体仍然是一个挑战性问题。

Ai缝合怪、助力小伙伴高效发论文 269

【推荐系统】基于用户的协同过滤算法(UserCF)原理及电影推荐Python实例+附基于用户SVD矩阵分解算法改进

【推荐系统】基于用户的协同过滤算法(UserCF)原理及电影推荐Python实例+附SVD对比 算法原理 基于用户的协同过滤算法 协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。 基于用户的协同过滤算法其简单应用情景是:当用户需要个性化推荐时,可以先找到...

MrBlingie的博客 8084

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java智能推荐系统技术_(十七)从零开始学人工智能-智能推荐系统:近邻推荐...

智能推荐系统:近邻推荐@概述协同:一些具有相似兴趣的人共同给出一个你可能感兴趣的列表;过滤:从推荐的列表中筛选出你感兴趣的物品/服务。核心思想:人以群分 物以类聚人以群分 -> 基于用户的最近邻推荐物以类聚 -> 基于物品的最近邻推荐步骤:输入用户-商品的评分矩阵 $ \bold R$;计算相似度,得到 \(K\) 个最近邻;预测未知项的评分;生成 top-n 推荐列表。示例:表 1:...

weixin_26897585的博客 1235

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

推荐系统-基于用户的最近邻协同过滤算法(MovieLens数据集)修复版

由于本站的前一个这个算法过早,无人回复,本人运用他的代码出现了许多问题,所以将其修复后再次上传。 本文,用皮尔逊相关系数计算用户之间的相似性。 from operator import itemgetter, attrgetter from math import sqrt import codecs def load_data(): filename_user_movie = 'E:/code/ml-100k/u.data' filename_movi

bszk130的博客 1314

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: Coursera《Introduction to Recommender Systems》Program Assignment3 用户相似性计算
下一篇: Robust Face Recognition via Sparse Representation
LiFeitengup
博客等级 码龄15年 466粉丝 59原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值