本文仅为本人的学习笔记


文章目录

  • 什么是协同过滤?
  • 用户相似度计算(Similarity Calculation)
    • 1.余弦相似度(Cosine Similarity)
    • 2.皮尔逊相关系数(Pearson's Correlation)
    • 3.杰卡德相似度计算(Jaccard coefficient)
  • 杰卡德相似度计算代码实现
    • 1.构造数据集
    • 2.只计算2个用户之间的相似度
    • 3.计算所有用户之间的相似度
    • 4.构建推荐结果(基于用户相似度)

什么是协同过滤?

协同过滤(Collaborative Filtering)就是协同大家的反馈,评价和意见一起对海量的信息进行过滤,从中筛选出目标用户可能感兴趣的信息的推荐过程。

其实它的算法思想就是:物以类聚,人以群分
协同过滤算法一般有2种,一种是基于用户的协同过滤算法,一种是基于物品的协同过滤算法。
基于用户(user-based):跟你喜好相似的人喜欢的东西你也很可能喜欢;
基于物品(item-based):跟你喜欢的东西相似的东西你也很可能喜欢;

用户相似度计算(Similarity Calculation)

1.余弦相似度(Cosine Similarity)

余弦相似度衡量了用户向量i和用户向量j之间的向量夹角大小,夹角越小,证明余弦相似度越大,两个用户越相似
如下图所示,但是很明显,余弦相似度这个方法不考虑长度,只考虑大方向。所以使用余弦相似度计算出的相似度结果有时是不靠谱的。

2.皮尔逊相关系数(Pearson’s Correlation)

皮尔逊相关系数是对余弦相似度的一个优化,它通过使用用户平均分对各独立评分进行修正,比余弦相似度更多的考虑了长度。即向量a,b各自减去向量的均值后,再计算余弦相似度

3.杰卡德相似度计算(Jaccard coefficient)

以上2种,都是针对于 评分数据是连续的数值,那么如果评分是0,1这种布尔类型的,那么它的相似度通常使用杰卡德相似度计算方法。杰卡德计算方法是 交集/并集


杰卡德相似度计算代码实现

1.构造数据集

创建一个数据集,下面我们使用1和0来表示用户是否购买过该用品

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 pddf=pd.DataFrame(datasets,columns=items,index=users)
print(df)

运行结果:

2.只计算2个用户之间的相似度

很明显我们的数据是1,0这种布尔类型的,所以比较适合用杰卡德相似度计算的方法

from sklearn.metrics import jaccard_similarity_scorejaccard_similarity_score(df['Item A'],df['Item B'])

结果正确,但是有报错:

原因是:

3.计算所有用户之间的相似度

from sklearn.metrics.pairwise import pairwise_distancesuser_similar=1-pairwise_distances(df,metric='jaccard')
user_similar=pd.DataFrame(user_similar,columns=users,index=users)
user_similar

但是结果报错:
解决方法,改成以下代码即可:
参考链接:为什么会出现’DataFrame’ object has no attribute ‘dtype’

user_similar=1-pairwise_distances(df.values,metric='jaccard')
user_similar=pd.DataFrame(user_similar,columns=users,index=users)
user_similar

运行结果:

4.构建推荐结果(基于用户相似度)

为每一个用户找到最相似的2个用户

  • loc[i]:通过行标签索引数据
  • pandas中的sort_values()函数原理类似于SQL中的order by,可以将数据集依照某个字段中的数据进行排序。ascending值表示是否按指定列的数组升序排列,默认为True,即升序排列
  • index[:2]表示从排序之后的结果中切片,取出前两条(相似度最高的两个)
topN_users={}#用来记录相似度最高的几个用户
#遍历每一行数据
for i in user_similar.index:#取出每一列数据,并删除自身,然后排序数据,你会发现自身的相似度都是1,下面这句话也就是删除了对角线上的元素。_df=user_similar.loc[i].drop([i])_df_sorted=_df.sort_values(ascending=False)top2=list(_df_sorted.index[:2])topN_users[i]=top2
print("Top2相似用户:")
topN_users

运行结果如下:

**根据topN的相似用户构建推荐结果

  • List item
import numpy as np
rs_results = {}
# 构建推荐结果
for user, sim_users in topN_users.items():rs_result = set()    # 存储推荐结果for sim_user in sim_users:# 构建初始的推荐结果rs_result = rs_result.union(set(df.ix[sim_user].replace(0,np.nan).dropna().index))# 过滤掉已经购买过的物品rs_result -= set(df.ix[user].replace(0,np.nan).dropna().index)rs_results[user] = rs_result
print("最终推荐结果:")
rs_results

运行结果:

深度学习推荐系统--协同过滤推荐算法+实现代码相关推荐

  1. 在线新闻推荐网 Python+Django+Mysql开发技术 基于用户、物品的协同过滤推荐算法 个性化新闻推荐系统 协同过滤推荐算法在新闻网站中的运用 个性化推荐算法、机器学习、分布式大数据、人工智

    在线新闻推荐网 Python+Django+Mysql开发技术 基于用户.物品的协同过滤推荐算法 个性化新闻推荐系统 协同过滤推荐算法在新闻网站中的运用 个性化推荐算法.机器学习.分布式大数据.人工智 ...

  2. 在线图书推荐网 Python+Django+Mysql开发技术 个性化图书推荐系统 协同过滤推荐算法在图书网站中的运用 基于用户、物品的协同过滤推荐算法 个性化推荐算法、机器学习、分布式大数据、人工智

    在线图书推荐网 Python+Django+Mysql开发技术 个性化图书推荐系统 协同过滤推荐算法在图书网站中的运用 基于用户.物品的协同过滤推荐算法 个性化推荐算法.机器学习.分布式大数据.人工智 ...

  3. 如何使用Spring+SpringMVC+Mybatis开发实现个性化小说推荐系统 协同过滤推荐算法实现 基于用户、项目的协同过滤推荐 基于聚类、关联规则、内容推荐算法 WebNovelCFRS

    如何使用Spring+SpringMVC+Mybatis开发实现个性化小说推荐系统 协同过滤推荐算法实现 基于用户.项目的协同过滤推荐 基于聚类.关联规则.内容推荐算法 WebNovelCFRS 一. ...

  4. 个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 基于用户/项目的协同过滤推荐算法 混合协同过滤推荐算法 协同过滤混合推荐算法

    个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 一.项目开发技术及功能介绍 1.SSH开发框架(spring+struts+hibernate) 2.js.jquery.bootstrap ...

  5. 基于项目的协同过滤推荐算法单机版代码实现(包含输出电影-用户评分矩阵模型、项目相似度、推荐结果、平均绝对误差MAE)

    基于项目的协同过滤推荐算法单机版代码实现(包含输出电影-用户评分矩阵模型.项目相似度.推荐结果.平均绝对误差MAE) 一.开发工具及使用技术 MyEclipse10.jdk1.7.movielens数 ...

  6. 协同过滤推荐算法实例代码

    什么是协同过滤 协同过滤是利用集体智慧的一个典型方法.要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体 ...

  7. python协同过滤算法_详解python实现协同过滤推荐算法

    不同的数据.不同的程序猿写出的协同过滤推荐算法不同,但其核心是一致的,本文主要介绍了python实现协同过滤推荐算法完整代码示例,具有一定借鉴价值,需要的朋友可以参考下.希望能帮助到大家. 测试数据 ...

  8. Java语言开发在线购物推荐网 购物商城推荐系统 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线购物推荐网 购物商城推荐系统 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据.人工智能.机器学习项目开发ShopRec ...

  9. Java+SSM(Spring+SpringMVC+Mybatis)个性化购物商城推荐系统 电子商务推荐系统 基于用户、项目、聚类、混合的协同过滤推荐算法WebShopRSMEx 源代码下载

    Java+SSM(Spring+SpringMVC+Mybatis)个性化购物商城推荐系统 电子商务推荐系统 基于用户.项目.聚类.混合的协同过滤推荐算法WebShopRSMEx 源代码下载 一.项目 ...

  10. Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据.人工智能.机器学习项目开发Mus ...

最新文章

  1. 差错控制:海明码、循环冗余校验码
  2. 【html、css、jq】制作一个简洁的音乐播放器
  3. 关于lombok插件的使用,强大的简化代码工具
  4. iOS开发ARC内存管理技术要点
  5. 【2012百度之星/初赛下】C:度度熊的礼物
  6. 电脑手机wifi互传文件_安卓手机文件互传
  7. javascript 操作cookie
  8. 完整版商城PHP源码小程序,前后端+后台+小程序;访问地址在文末
  9. Delphi 7 升级到 Delphi 2010 总结
  10. 电路分析超详细思维导图
  11. JDK8 Windows系统中Java HotSpot虚拟机配置参数
  12. 倪光南院士2006年9月1号在南京软件博览会上的讲话
  13. iPhone白苹果修复工具
  14. [DA45] 使用apriori分析导演选择演员倾向
  15. 你知道吗?U盘插入速度决定读写速度,看完别再用错了
  16. 让你的终端更漂亮——MAC OS 终端的设置
  17. 麻省理工公开课:线性代数 正交向量与子空间
  18. 主线剧情03-NXP-i.MX系列的u-boot移植基础详解
  19. 勘测、军用、探测部门常用的,双光融合热成像夜视仪 ---TFN TD8V
  20. 一款红队快速指纹识别工具

热门文章

  1. 友链导航源码php,2020优化版导航源码自动收录秘趣导航批量检查友链有效性导航源码...
  2. 个人微信api接口调用,拉取微信朋友圈、发朋友圈
  3. dotween上下摆动_DOTWeen插件使用技巧
  4. 408计算机考研题型分布,计算机考研:计算机408大纲考点变化解析指导
  5. cad上样条曲线上的点太多了_CAD样条曲线如何转换成多段线?看完这篇文章你就懂了...
  6. P2346 四子连棋 题解
  7. 微信小程序图片固定宽度,高度自适应处理方法及相关API介绍
  8. Postman调接口时获取Chrome浏览器Cookie数据携带发送
  9. GoEasy使用详解
  10. yalmip使用指南