黑马推荐系统项目实战【三】基于用户的协同过滤 UserCF
用户物品相似度计算
users = ["User1","User2","User3","User4","User5"]
items =["Item A","Item B","Item C","Item D","Item E"]#用户购买记录数据
datasets = [[1, 0, 1, 1, 0],[1, 0, 0, 1, 1],[1, 0, 1, 0, 0],[0, 1, 0, 1, 1],[1, 1, 1, 0, 1],
]
import pandas as pd
df = pd.DataFrame(datasets, columns=items,index=users)
df
Item A | Item B | Item C | Item D | Item E | |
---|---|---|---|---|---|
User1 | 1 | 0 | 1 | 1 | 0 |
User2 | 1 | 0 | 0 | 1 | 1 |
User3 | 1 | 0 | 1 | 0 | 0 |
User4 | 0 | 1 | 0 | 1 | 1 |
User5 | 1 | 1 | 1 | 0 | 1 |
from sklearn.metrics.pairwise import pairwise_distances
# 计算用户的相似度
user_similar = 1 - pairwise_distances(df.values, metric='jaccard')
user_similar = pd.DataFrame(user_similar, columns=users, index=users)
user_similar
D:\Apps\Anaconda3\lib\site-packages\sklearn\metrics\pairwise.py:1735: DataConversionWarning: Data was converted to boolean for metric jaccard
warnings.warn(msg, DataConversionWarning)
User1 | User2 | User3 | User4 | User5 | |
---|---|---|---|---|---|
User1 | 1.000000 | 0.50 | 0.666667 | 0.2 | 0.4 |
User2 | 0.500000 | 1.00 | 0.250000 | 0.5 | 0.4 |
User3 | 0.666667 | 0.25 | 1.000000 | 0.0 | 0.5 |
User4 | 0.200000 | 0.50 | 0.000000 | 1.0 | 0.4 |
User5 | 0.400000 | 0.40 | 0.500000 | 0.4 | 1.0 |
# 计算物品的相似度
item_similar = 1 - pairwise_distances(df.T.values, metric='jaccard')
item_similar = pd.DataFrame(item_similar, columns=items, index=items)
item_similar
D:\Apps\Anaconda3\lib\site-packages\sklearn\metrics\pairwise.py:1735:DataConversionWarning: Data was converted to boolean for metric jaccard
warnings.warn(msg, DataConversionWarning)
Item A | Item B | Item C | Item D | Item E | |
---|---|---|---|---|---|
Item A | 1.00 | 0.200000 | 0.75 | 0.40 | 0.400000 |
Item B | 0.20 | 1.000000 | 0.25 | 0.25 | 0.666667 |
Item C | 0.75 | 0.250000 | 1.00 | 0.20 | 0.200000 |
Item D | 0.40 | 0.250000 | 0.20 | 1.00 | 0.500000 |
Item E | 0.40 | 0.666667 | 0.20 | 0.50 | 1.000000 |
基于用户的协同过滤 UserCF
# 为每一个用户找到最相似的2个用户
topN_users = {}
for i in user_similar.index:
# 取出每一列数据 删除自己 按照相似度排序_df = user_similar.loc[i].drop([i])_df_sorted = _df.sort_values(ascending = False)top2 = list(_df_sorted.index[:2])topN_users[i] = top2
topN_users
{‘User1’: [‘User3’, ‘User2’],
‘User2’: [‘User4’, ‘User1’],
‘User3’: [‘User1’, ‘User5’],
‘User4’: [‘User2’, ‘User5’],
‘User5’: [‘User3’, ‘User4’]}
topN_users.items()
dict_items([(‘User1’, [‘User3’, ‘User2’]), (‘User2’, [‘User4’, ‘User1’]), (‘User3’, [‘User1’, ‘User5’]), (‘User4’, [‘User2’, ‘User5’]), (‘User5’, [‘User3’, ‘User4’])])
df.loc['User1'].index
Index([‘Item A’, ‘Item B’, ‘Item C’, ‘Item D’, ‘Item E’], dtype=‘object’)
import numpy as np
# 根据topn的相似用户构建推荐结果
re_results = {}
for user, sim_users in topN_users.items():re_result = set() # 当前用户的相似用户的交互过的物品集合for sim_user in sim_users:re_result = re_result.union(set(df.loc[sim_user].replace(0, np.nan).dropna().index))# 过滤掉自己交互过的物品re_result -= set(df.loc[user].replace(0,np.nan).dropna().index)re_results[user] = re_result
re_results
{‘User1’: {‘Item E’},
‘User2’: {‘Item B’, ‘Item C’},
‘User3’: {‘Item B’, ‘Item D’, ‘Item E’},
‘User4’: {‘Item A’, ‘Item C’},
‘User5’: {‘Item D’}}
黑马推荐系统项目实战【三】基于用户的协同过滤 UserCF相关推荐
- 协同过滤推荐算法-基于用户的协同过滤UserCF及python实现
协同过滤推荐算法 基本思想: 根据用户的历史行为数据的挖掘发现用户的兴趣爱好,基于不同的兴趣爱好对用户进行划分并推荐兴趣相似的物品给用户. 协同过滤推荐算法包含: 1.1基于记忆的推荐算法(基于领域的 ...
- 推荐系统实践----基于用户的协同过滤算法(python代码实现书中案例)
本文参考项亮的<推荐系统实践>中基于用户的协同过滤算法内容.因其中代码实现部分只有片段,又因本人初学,对python还不是很精通,难免头大.故自己实现了其中的代码,将整个过程走了一遍. 1 ...
- Python实现基于用户的协同过滤推荐算法构建电影推荐系统
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 基于用户的协同过滤推荐(User-based CF)的原理假设: ...
- 基于用户的协同过滤算法的电影推荐系统
上一篇讲解了推荐算法的分类,这里电影推荐系统具体分析一下 第一步:建立用户电影矩阵模型 如表1所示,协同过滤算法的输入数据通常表示为一个m*n的用户评价矩阵Matrix,m是用户数,n是电影数,Mat ...
- 基于用户的协同过滤来构建推荐系统(附代码)
导读:协同过滤技术在推荐系统中应用的比较广泛,它是一个快速发展的研究领域.它比较常用的两种方法是基于内存 ( Memory-Based ) 和基于模型 ( Model-Based ). 基于内存:主要 ...
- mysql数据推荐算法_Java+Mysql实现简单在线电影、音乐、图书推荐系统 基于用户的协同过滤推荐算法实现 源代码下载...
# Java+Mysql实现简单在线电影.音乐.图书等推荐系统(基于用户的协同过滤推荐算法) 一.项目简介 1.开发工具和实现技术 MyEclipse10,jdk1.7,mysql5.5,tomca ...
- Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系 java实现基于用户的协同过滤推荐算法 源代码下载 算法实现 Spring+Struts+Hibernate(SSH)开发框架
Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系统(基于用户的协同过滤推荐算法) 一.项目简介 1.开发工具和实现技术 MyEclipse10,jdk1.7,mysql5.5,t ...
- 【推荐系统】{1} —— 基于用户的协同过滤算法
协同过滤(英语:Collaborative Filtering,简称CF),简单来说是利用某兴趣相投.拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人透过合作的机制给予信息相当程度的回应(如评分) ...
- 推荐系统实践(一)----基于用户的协同过滤算法(UserCF)
随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载的时代.在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情,这 ...
最新文章
- 异常检测概览——孤立森林 效果是最好的
- python有序队列_【python】collections模块(有序字典,计数器,双向队列)
- 卷积网络的学习(卷积核,通道,padding,stride等概念)
- 代码同步工具_可以多重连接的数据库管理工具
- MOXy的对象图和动态JAXB
- 哪里有mysql认证_国内哪个城市可以考mysql认证
- java程序源代码如何保存到桌面_如何编写JAVA小白第一个程序
- Redis+Twemproxy安装与使用
- Python爬虫实战--斗鱼直播爬虫
- 宏山激光sigmatube套料软件多台电脑安装教程
- java冻结jsp首行_收藏的 处理jsp首行 报错问题
- 2019hdu暑假多校训练赛第五场1004 equation hdu 6627 (高中数学题)
- js中indexOf的用法
- 20172301 2017-2018-2 《程序设计与数据结构》第七周学习总结
- Windows 桌面美化
- win2016开启ntp_WinServer 2016域控设置NTP服务器
- 苹果自带的APP下载分析统计工具
- 单用户计算机安全不包括什么,电子科技大20秋《计算机网络安全》在线作业1参考...
- 阿里“中供系”前世今生:马云麾下最神秘的子弟兵(一)
- python标准库复数运算包cmath