基于用户 的协同过滤算法

article/2025/10/19 14:33:38

计算用户相似度和用户对未知物品的可能评分

基于用户的协同过滤算法主要包括两个步骤。
(1) 找到和目标用户兴趣相似的用户集合。
(2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。

例如现在有A、B、C、D四个用户,分别对a、b、c、d、e五个物品表达了自己喜好程度(通过评分高低来表现自己的偏好程度高低),现在要为C用户推荐物品:
1、构建用户物品评分表
在这里插入图片描述

2、相似度计算
计算用户相似度的方法很多,这里选用余弦相似度
在这里插入图片描述

给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v)为用户v曾经有过正反馈的物品集合。

在这里插入图片描述

可以看出D用户与C用户相似度最大。
3、计算推荐结果
用户C评分的物品是b和e,下面计算用户C对物品a,c,d的偏好程度:
在这里插入图片描述
参考代码:

import math
class UserCF:def __init__(self):self.user_score_dict = self.initUserScore()self.users_sim = self.UserSimilarity()# 初始化用户评分数据def initUserScore(self):user_score_dict = {"A": {"a": 3.0, "b": 4.0, "c": 0.0, "d": 3.5, "e": 0.0},"B": {"a": 4.0, "b": 0.0, "c": 4.5, "d": 0.0, "e": 3.5},"C": {"a": 0.0, "b": 3.5, "c": 0.0, "d": 0., "e": 3.0},"D": {"a": 0.0, "b": 4.0, "c": 0.0, "d": 3.50, "e": 3.0}}return user_score_dict# 计算用户之间的相似度,采用的是遍历每一个用户进行计算def UserSimilarity(self):W = dict()for u in self.user_score_dict.keys():W.setdefault(u,{})for v in self.user_score_dict.keys():if u == v:continueu_set = set( [key for key in self.user_score_dict[u].keys() if self.user_score_dict[u][key] > 0])v_set = set( [key for key in self.user_score_dict[v].keys() if self.user_score_dict[v][key] > 0])W[u][v] = float(len(u_set & v_set)) / math.sqrt(len(u_set) * len(v_set))return W  # 预测用户对item的评分def preUserItemScore(self, userA, item):score = 0.0for user in self.users_sim[userA].keys():if user != userA:score += self.users_sim[userA][user] * self.user_score_dict[user][item]return score# 为用户推荐物品def recommend(self, userA):# 计算userA 未评分item的可能评分user_item_score_dict = dict()for item in self.user_score_dict[userA].keys():if self.user_score_dict[userA][item] <= 0:user_item_score_dict[item] = self.preUserItemScore(userA, item)return user_item_score_dictif __name__ == "__main__":ub = UserCF()print(ub.recommend("C"))

spyder实验结果:

{'a': 2.8577380332470415, 'c': 1.8371173070873839, 'd': 4.286607049870562}
注:计算C和A之间的相似度(未经过one-hot编码得出的结果,经过one-hot编码得出的结果与实际数据一致)
import math
import numpy as np
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
from scipy.spatial.distance import cosinedata1 = {"a":{"A":3.0,"B":4.0,"C":0.0,"D":0.0},"b":{"A":4.0,"B":0.0,"C":3.5,"D":4.0},"c":{"A":0.0,"B":4.5,"C":0.0,"D":0.0},"d":{"A":3.5,"B":0.0,"C":0.0,"D":3.5},"e":{"A":0.0,"B":3.5,"C":3.0,"D":3.0}
}
data2 = pd.DataFrame(data1)x = data2.loc['A',:]
y = data2.loc['C',:]
x = np.mat([x])
y = np.mat([y])
x,ycosine_similarity(x,y)1 - cosine(data2.loc['A',:],data2.loc['C',:])

http://chatgpt.dhexx.cn/article/mYFrnxCX.shtml

相关文章

JAVA开源协同过滤算法,推荐算法:协同过滤算法的介绍

一、什么是推荐算法 互联网的出现和普及给用户带来了大量的信息&#xff0c;满足了用户在信息时代对信息的需求&#xff0c;但随着网络的迅速发展而 带来的网上信息量的大幅增长&#xff0c;使得用户在面对大量信息时无法从中获得对自己真正有用的那部分信息&#xff0c;对信息…

协同过滤算法实验

本次呢&#xff0c;简单介绍一下协同过滤算法&#xff0c;并且给出简单的电影推荐实验作为举例说明。利用Spark MLlib中的协同过滤算法完成针对特定用户的电影推荐功能。这一部分需要实现实现输入用户id&#xff0c;输出为其推荐的电影。 一、协同过滤 所谓协同过滤&#xff0…

协同过滤算法及python实现

协同过滤算法及python实现 1.算法简介 协同过滤算法是一种较为著名和常用的推荐算法&#xff0c;它基于对用户历史行为数据的挖掘发现用户的喜好偏向&#xff0c;并预测用户可能喜好的产品进行推荐。也就是常见的“猜你喜欢”&#xff0c;和“购买了该商品的人也喜欢”等功能。…

协同过滤算法理论

1. 协同过滤算法 协同过滤&#xff08;Collaborative Filtering&#xff09;推荐算法是最经典、最常用的推荐算法。 所谓协同过滤&#xff0c;基本思想是根据用户之前的喜好以及其他兴趣相近的用户的选择来给用户推荐物品(基于对用户历史行为数据的挖掘发现用户的喜好偏向&…

协同过滤算法实战

简介 公司给了一个任务&#xff0c;要求根据相似度匹配给教师推荐课程。正好复(预)习一下协同过滤算法。直接探索一下协同过滤应用。 目前教师档案大数据系统中存有海量的教师数据&#xff0c;这些数据对于教师的未来决策&#xff0c;预测教师发展路径&#xff0c;推荐教师课…

协同过滤算法(例题理解)

协同过滤算法是一种推荐系统算法&#xff0c;它利用用户对物品的评价数据来预测用户对未评价物品的喜好程度。该算法基于一个简单的思想&#xff1a;如果两个用户在过去对某些物品的评价很相似&#xff0c;那么在未来他们对这些物品的评价也很可能相似。因此&#xff0c;协同过…

python实现协同过滤算法

协同过滤算法常用于商品推荐或者类似的场合&#xff0c;根据用户之间或商品之间的相似性进行精准推荐 协同过滤算法分为&#xff1a; 基于用户的协同过滤算法&#xff08;UserCF算法&#xff09;&#xff08;适合社交化应用&#xff09;基于商品的协同过滤算法&#xff08;It…

java 协同过滤算法_推荐系统中协同过滤算法实现分析

最近研究Mahout比较多&#xff0c;特别是里面协同过滤算法&#xff1b;于是把协同过滤算法的这个实现思路与数据流程&#xff0c;总结了一下&#xff0c;以便以后对系统做优化时&#xff0c;有个清晰的思路&#xff0c;这样才能知道该如何优化且优化后数据亦能正确。 推荐中的协…

协同过滤算法理解

一、协同过滤思想介绍 顾名思义&#xff0c;协同过滤算法的核心思想就是“物以类聚&#xff0c;人以群分”&#xff0c;通过用户对物品的评价和意见&#xff0c;将物品和人聚成几类&#xff0c;从各自的类中挑选出用户可能感兴趣的的物品进行推荐&#xff0c;而代替从直接从海量…

协同过滤推荐算法的原理及实现

一、协同过滤算法的原理及实现 二、基于物品的协同过滤算法详解 一、协同过滤算法的原理及实现 协同过滤推荐算法是诞生最早&#xff0c;并且较为著名的推荐算法。主要的功能是预测和推荐。算法通过对用户历史行为数据的挖掘发现用户的偏好&#xff0c;基于不同的偏好对用户…

协同过滤算法详解

一、协同过滤算法简介 协同过滤算法是一种较为著名和常用的推荐算法&#xff0c;它基于对用户历史行为数据的挖掘发现用户的喜好偏向&#xff0c;并预测用户可能喜好的产品进行推荐。也就是常见的“猜你喜欢”&#xff0c;和“购买了该商品的人也喜欢”等功能。它的主要实现由…

协同过滤算法

目录 一、什么是协同过滤算法 二、相似度的计算 2.1杰卡德&#xff08;Jaccard&#xff09;相似度 2.2余弦相似度&#xff08;Cosine Similarity&#xff09; 2.3皮尔逊相关系数&#xff08;Pearson Correlation Coefficient&#xff09; 2.4欧氏距离&#xff08;Euclidea…

协同过滤推荐算法

一、协同过滤思想简介 二、协同过滤算法原理介绍 三、基于用户的协同过滤算法描述 四、基于物品的协同过滤算法 基于物品的协同过滤算法的优缺点 一、协同过滤思想简介 协同过滤&#xff0c;从字面上理解&#xff0c;包括协同和过滤两个操作。首先我们在外出和朋友吃饭的时候肯…

推荐系统之协同过滤算法

1、介绍 协同过滤算法&#xff08;Collaborative Filtering&#xff09; 是比较经典常用的推荐算法&#xff0c;从1992年一直延续至今。所谓协同过滤算法&#xff0c;基本思想是根据用户的历史行为数据的挖掘发现用户的兴趣爱好&#xff0c;基于不同的兴趣爱好对用户进行划分并…

oracle数据库中spool的作用,Oracle中Spool命令如何使用 Oracle中Spool命令使用方法

Oracle中Spool命令如何使用&#xff1f;本篇文章小编给大家分享一下Oracle中Spool命令使用方法&#xff0c;小编觉得挺不错的&#xff0c;现在分享给大家供大家参考&#xff0c;有需要的小伙伴们可以来看看。 方法/步骤 首先需要明白Spool是Oracle的命令而不是sql语句。 Spool命…

oracle的Spool命令

使用spool命令实行将sql*plus中的输出的结果复制到一个指定的文件中&#xff0c;或者把查询的结果 发送到打印机中&#xff0c;直接使用spool off命令为止。 spool命令的语法如下&#xff1a; spool [file_name [create|replace|append] off|out] 其中file_name指定一个操作…

Oracle数据导出spool用法详解

Oracle数据导出spool用法详解 spool可导出select查询的结果集以emp表为例spool命令参数 spool可导出select查询的结果集 在实际的工作中&#xff0c;很多时候我们需要将Oracle中查询的数据导出来&#xff0c;生成excel格式的表以便于处理。虽然plsql可以导数据&#xff0c;但是…

oracle spool命令

1.spool的作用是什么&#xff1f; spool的作用可以用一句话来描述&#xff1a;在sqlplus中用来保存或打印查询结果。 通过spool 命令&#xff0c;可以将select 数据库的内容写到文件中&#xff0c;通过在sqlplus设置一些参数&#xff0c;使得按指定方式写到文件中。 spool 是…

spool命令的使用

&#xff08;一&#xff09;SPOOL是sqlplus中的命令 转自&#xff1a;https://blog.csdn.net/wangnan537/article/details/20706555 可作如下用途&#xff1a; 1)可使用SPOOL保存查询的结果集 [sql] view plain copy SPOOL "C:\test.txt" --生成test.txt文件 ...…

spooling

SPOOLing的含义是什么&#xff1f;试述SPOOLing系统的特点、功能以及控制过程。答&#xff1a;SPOOLing是Simultaneous Peripheral Operation On-Line &#xff08;即外部设备联机并行操作&#xff09;的缩写 SPOOLING &#xff0c;它是关于慢速字符设备如何与计算机主机交换信…