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

基于用户的协同过滤算法主要包括两个步骤。
(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',:])

基于用户 的协同过滤算法相关推荐

  1. 推荐系统--基于用户的协同过滤算法

    1.         概述 和搜索引擎一样,推荐系统是为了帮助人们更快速的获得对自己有用的信息. 和搜索引擎不同,推荐系统是人们被动的获取,由系统根据用户行为或其他的信息推荐给用户的,儿搜索引擎是用户 ...

  2. 【推荐系统】基于用户的协同过滤算法

    基于用户的协同过滤算法 基础算法 在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的.而用户A没有听说过的物品推荐给A.这种方法称为基于 ...

  3. UserCF,基于用户的协同过滤算法

    转载自   UserCF,基于用户的协同过滤算法 UserCF:User  Collaboration   Filter,基于用户的协同过滤 算法核心思想:在一个在线推荐系统中,当用户A需要个性化推荐 ...

  4. 基于用户的协同过滤算法

    最近写搜索引擎文章写多了,来一篇之前写的老文,给那些对推荐算法感兴趣想入门的人吧,最近也在做推荐广告系统,又翻出来看了看. 什么是推荐算法 推荐算法最早在1992年就提出来了,但是火起来实际上是最近这 ...

  5. python协同过滤电影推荐_python实现基于用户的协同过滤算法(CF)——以电影评价数据(ml-100k)为例...

    程序简介 项目以ml-100k电影评分数据集为输入,实现了基于用户的协同过滤算法,最后预测的MAE为0.84,因为经过优化,10万条评分数据运行时间不超过2分钟 协同过滤算法(CF)基于对用户历史行为 ...

  6. 基于用户的协同过滤算法详解

    0. 前言 基于领域的推荐算法是推荐系统中最基本的算法,此类算法不仅在学术界得到了深入研究,而且在工业界也得到了广泛地应用.基于领域的推荐算法主要分为两大类:一类是基于用户的协同过滤算法(User B ...

  7. 【推荐系统】{1} —— 基于用户的协同过滤算法

    协同过滤(英语:Collaborative Filtering,简称CF),简单来说是利用某兴趣相投.拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人透过合作的机制给予信息相当程度的回应(如评分) ...

  8. 推荐系统实践----基于用户的协同过滤算法(python代码实现书中案例)

    本文参考项亮的<推荐系统实践>中基于用户的协同过滤算法内容.因其中代码实现部分只有片段,又因本人初学,对python还不是很精通,难免头大.故自己实现了其中的代码,将整个过程走了一遍. 1 ...

  9. 推荐系统实践(一)----基于用户的协同过滤算法(UserCF)

      随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载的时代.在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情,这 ...

  10. 推荐算法——基于用户的协同过滤算法(User-base CF)的java实现

    推荐算法--基于用户的协同过滤算法(User-base CF)的java实现 推荐系统 什么是推荐系统 为什么要有推荐系统 推荐算法 基于用户的协同过滤算法(User-base CF) 算法介绍 代码 ...

最新文章

  1. hibernate oracle 读写分离_利用FDW进行ORACLE到Postgresql的数据迁移
  2. 购物中心定位分析、调整方案及租金建议
  3. 一种用户体验-显示对话框时灰化你的主窗体
  4. python教程书籍-大牛推荐的10本学习 Python 的好书
  5. matlab中ifelse能嵌套吗,嵌套if语句(nested if statements)
  6. 黄奕:我之前弄了一个母婴网站,根本就不会做生意,几个月上千万就赔进去了
  7. mysql utf-8转utf8mb4_MySQL UTF8 转为 utf8mb4
  8. C# 图书管理系统源码(三层架构,含数据库)
  9. 自适应YouTube视频嵌入
  10. parameterize
  11. Telink Mesh简单安卓app分析
  12. 怎样将语音转换成文字
  13. 一次CPU过载的简单排查历程
  14. Flutter安卓系统把状态栏设置为透明色
  15. 敏捷是只有一个系统,从楚王爱细腰说起
  16. 在计算机技术指标中mips用来描述,mips用来描述计算机的什么
  17. c语言namel标识符,2012年7月计算机基础与程序设计自考试题
  18. 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十五)驱动程序基石
  19. 判断url链接是否有效的几种方法
  20. POCO C++简介

热门文章

  1. 操作系统基础知识详解
  2. 火狐上如何使用谷歌翻译插件_将Google翻译功能添加到Firefox
  3. JAVA核酸预约检测管理系统毕业设计 开题报告
  4. 图文并茂全面总结上百个Android Studio好用的插件(IDE通用)
  5. 财富智慧 幸福人生——《菁英财商训练营》首场活动在深圳龙岗文博宫举行
  6. vue使用百度编辑器ueditor,ueditor1.5.0下载
  7. 人工智能系列:AI 赋能平台
  8. 37--8位级联加法器,并行加法器
  9. android电容触摸屏的驱动及其上层工作原理,电容触摸屏驱动原理
  10. MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?