用户物品相似度计算

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相关推荐

  1. 协同过滤推荐算法-基于用户的协同过滤UserCF及python实现

    协同过滤推荐算法 基本思想: 根据用户的历史行为数据的挖掘发现用户的兴趣爱好,基于不同的兴趣爱好对用户进行划分并推荐兴趣相似的物品给用户. 协同过滤推荐算法包含: 1.1基于记忆的推荐算法(基于领域的 ...

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

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

  3. Python实现基于用户的协同过滤推荐算法构建电影推荐系统

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 基于用户的协同过滤推荐(User-based CF)的原理假设: ...

  4. 基于用户的协同过滤算法的电影推荐系统

    上一篇讲解了推荐算法的分类,这里电影推荐系统具体分析一下 第一步:建立用户电影矩阵模型 如表1所示,协同过滤算法的输入数据通常表示为一个m*n的用户评价矩阵Matrix,m是用户数,n是电影数,Mat ...

  5. 基于用户的协同过滤来构建推荐系统(附代码)

    导读:协同过滤技术在推荐系统中应用的比较广泛,它是一个快速发展的研究领域.它比较常用的两种方法是基于内存 ( Memory-Based ) 和基于模型 ( Model-Based ). 基于内存:主要 ...

  6. mysql数据推荐算法_Java+Mysql实现简单在线电影、音乐、图书推荐系统 基于用户的协同过滤推荐算法实现 源代码下载...

    # Java+Mysql实现简单在线电影.音乐.图书等推荐系统(基于用户的协同过滤推荐算法) 一.项目简介 1.开发工具和实现技术 MyEclipse10,jdk1.7,mysql5.5,tomca ...

  7. Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系 java实现基于用户的协同过滤推荐算法 源代码下载 算法实现 Spring+Struts+Hibernate(SSH)开发框架

    Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系统(基于用户的协同过滤推荐算法) 一.项目简介 1.开发工具和实现技术 MyEclipse10,jdk1.7,mysql5.5,t ...

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

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

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

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

最新文章

  1. 异常检测概览——孤立森林 效果是最好的
  2. python有序队列_【python】collections模块(有序字典,计数器,双向队列)
  3. 卷积网络的学习(卷积核,通道,padding,stride等概念)
  4. 代码同步工具_可以多重连接的数据库管理工具
  5. MOXy的对象图和动态JAXB
  6. 哪里有mysql认证_国内哪个城市可以考mysql认证
  7. java程序源代码如何保存到桌面_如何编写JAVA小白第一个程序
  8. Redis+Twemproxy安装与使用
  9. Python爬虫实战--斗鱼直播爬虫
  10. 宏山激光sigmatube套料软件多台电脑安装教程
  11. java冻结jsp首行_收藏的 处理jsp首行 报错问题
  12. 2019hdu暑假多校训练赛第五场1004 equation hdu 6627 (高中数学题)
  13. js中indexOf的用法
  14. 20172301 2017-2018-2 《程序设计与数据结构》第七周学习总结
  15. Windows 桌面美化
  16. win2016开启ntp_WinServer 2016域控设置NTP服务器
  17. 苹果自带的APP下载分析统计工具
  18. 单用户计算机安全不包括什么,电子科技大20秋《计算机网络安全》在线作业1参考...
  19. 阿里“中供系”前世今生:马云麾下最神秘的子弟兵(一)
  20. python标准库复数运算包cmath

热门文章

  1. 千影-java万能播放器(java视频播放器)
  2. word2007插件开发经验备忘1--如何开发word插件
  3. Introduction To AMBA 简单理解
  4. 3ds Max快速环境闭塞的使用
  5. Beego exper表达式
  6. 鲁大师PC最新硬件排行,汇总Q1季度最强PC硬件产品!
  7. 华为2020手机鸿蒙计划,华为鸿蒙 OS 2020 计划曝光!手机仍然优先用安卓
  8. 小时 分钟 秒 计算
  9. bootloader与uboot之间有什么联系?
  10. 在树莓派上安装windows 10arm操作系统