当前位置: 首页 > news >正文

关联规则延伸之协同过滤

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

  • 一、协同过滤
    • 1、含义
    • 2、策略
  • 二、基于用户的协同过滤
    • 1、寻找相似偏好的用户
    • 2、欧式距离及系数
    • 3、皮尔逊系数
    • 4、其他系数
    • 5、算法步骤
    • 6、局限性
  • 三、基于物品的协同过滤
    • 1、介绍
    • 2、算法步骤
    • 3、优缺点
    • 4、2种算法适应场景
  • 四、电影推荐代码示例
    • 1、读入数据
    • 2、数据处理
    • 3、查看评分分布
    • 4、选取电影对用户推荐


一、协同过滤

1、含义

  • 协同(collaborating)是群体行为,过滤(filtering)则是针对个人的行为
  • 利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息
  • 来源比如:实际生活中,朋友之间相互推荐自己喜欢的东西

2、策略

  • 协同过滤通过用户和产品及用户的偏好信息产生推荐
  • 最基本的策略有两种:
    • 找到具有类似品味的人所喜欢的物品
    • 从一个人喜欢的物品找类似的物品
  • 这两种策略对应两个最知名的类别推荐技术
    • 基于用户的协同过滤
    • 基于物品的协同过滤

二、基于用户的协同过滤

  • 基于用户的协同过滤(user collaborating filter,简称userCF)通过用户对不同内容(物品)的行为来评测用户之间的相似性,找到“邻居”基于这种相似性做出推荐
  • 这种推荐的本质是给相似的用户推荐其他用户喜欢的内容

1、寻找相似偏好的用户

比如5个用户对2件商品的评分。这里的分值可能表示真实的购买,也可以是用户对商品不同行为的量化指标。例如,浏览商品次数、向朋友推荐商品、收藏、分享或评论等,都可以表示用户对商品的态度和偏好程度;
在这里插入图片描述
画出散点图后,即可看出用户分布情况,用户距离接近,,则评分较为接近;

2、欧式距离及系数

欧几里得距离:

d(a, b) = √[ Σ(xᵢ₁ - xᵢ₂)² ] (i = 1, 2, ..., n)

欧几里得系数:

d(a, b)  = 1 / ( 1+ d(a, b)  )

系数越小,表示2用户距离越近,用户偏好也接近。

3、皮尔逊系数

在这里插入图片描述
在这里插入图片描述

  • r=1:表示两个变量完全正相关。

  • r=−1:表示两个变量完全负相关。

  • r=0:表示两个变量没有线性关系。

  • r 的绝对值越接近 1,表示两个变量之间的线性关系越强;越接近 0,表示线性关系越弱。

  • 极强相关:r>0.80

  • 强相关:0.61<r≤0.80

  • 中度相关:0.41<r≤0.60

  • 弱相关:0.21<r≤0.40

  • 极弱相关/无相关:r≤0.20

4、其他系数

  • 余弦相似度系数

在这里插入图片描述

  • 杰卡德系数
    在这里插入图片描述

5、算法步骤

  • 找到和目标用户兴趣相似的用户集合(计算两个用户之间的兴趣相似度)
  • 找到这个集合中的用户所喜欢的,并且目标用户没有使用(消费)过的物品推荐给目标用户
    在这里插入图片描述

6、局限性

  • 首先每次计算用户直接相似度的时候,需要遍历每个用户和所有用户的评分,这样在网站用户增长到一定程度后,计算用户直接的相似度的过程将会变得越发的困难
  • 基于用户的协同过滤算法,并不容易从数学原理的角度解释
  • 用户口味变化快,非静态,所以兴趣迁移问题很难反应出来
  • 数据稀疏,用户和用户之间有共同的消费行为实际上是比较少的,而且一般都是一些热门物品,对发现用户兴趣帮助也不大

三、基于物品的协同过滤

1、介绍

  • 基于物品的协同过滤(item collaborating filter,简称item CF)算法给用户推荐那些和他们之前喜欢的物品相似的物品;
  • 如购买该商品的用户还购买来其他商品

基于物品的协同过滤和基于用户的协同过滤原理相似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给用户。

2、算法步骤

  • 计算物品之间的相似度
  • 根据物品相似度和用户历史行为给用户生成推荐列表

3、优缺点

在这里插入图片描述

4、2种算法适应场景

在这里插入图片描述
在这里插入图片描述

四、电影推荐代码示例

1、读入数据

#导入相关的包
import pandas as pd
import warnings
warnings.filterwarnings("ignore")
import osfilms=pd.read_excel("./data/apriori/电影.xlsx")
films.head(3)

在这里插入图片描述

2、数据处理

#将电影数据和评分数据进行拼接
model_data=pd.merge(films,scores,on="电影编号")
model_data.head()

在这里插入图片描述

3、查看评分分布

#查看评分的分布
model_data["评分"].hist()

在这里插入图片描述

# 计算每部电影的平均分
model_data_mean=model_data.groupby("名称")["评分"].mean()# 评分高的前五部电影
film_top=pd.DataFrame(model_data_mean)
film_top.sort_values("评分",ascending=False).head()

在这里插入图片描述

# 打分人数
film_top["评分次数"]=model_data.groupby("名称")["评分"].count()
film_top.sort_values("评分次数",ascending=False).head()

在这里插入图片描述

# 合并后的数据
model_data.head(5)

在这里插入图片描述

use_item=model_data.pivot_table(index="用户编号",columns="名称",values="评分")
use_item.head()

在这里插入图片描述

4、选取电影对用户推荐

Calculate_film=use_item["沉默的羔羊(1991)"]# 空值填充0
use_item=use_item.fillna(0)#计算该目标电影和其他电影的相似程度
corr_matrix=use_item.corrwith(Calculate_film)
corr_matrix.head()

在这里插入图片描述

# 数据转换
recommend_list=pd.DataFrame(corr_matrix)recommend_list=recommend_list.rename(columns={0:"相关程度"})
recommend_list=recommend_list.sort_values("相关程度",ascending=False)
recommend_list.head()

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python魔法之旅-魔法方法(22)
  • kafka-生产者监听器(SpringBoot整合Kafka)
  • The First项目报告:Stargate Finance重塑跨链金融的未来
  • Vxe UI vxe-form 实现折叠表单,当表单很多时实现自动收起与展开
  • 独具魅力的 App UI 风格才能称之为优秀
  • 66. UE5 RPG 实现远程攻击武器配合角色攻击动画
  • 1. 面向对象的由来
  • MyBatis面试题系列三
  • 何为屎山代码?
  • Facebook海外户|如何制作出引人注目的Facebook广告素材?
  • lua vm 五: upvalue
  • django ORM model update常规用法
  • java面试题:java三大特性多态又是如何实现的
  • 作文笔记11 推荐一本书
  • 磁力狗ciligou,磁力链接使用步骤
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 0基础学习移动端适配
  • 30秒的PHP代码片段(1)数组 - Array
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • isset在php5.6-和php7.0+的一些差异
  • jQuery(一)
  • Redis学习笔记 - pipline(流水线、管道)
  • scrapy学习之路4(itemloder的使用)
  • Service Worker
  • session共享问题解决方案
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 从tcpdump抓包看TCP/IP协议
  • 大型网站性能监测、分析与优化常见问题QA
  • 基于web的全景—— Pannellum小试
  • 记录:CentOS7.2配置LNMP环境记录
  • 聊聊sentinel的DegradeSlot
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 异步
  • Mac 上flink的安装与启动
  • 湖北分布式智能数据采集方法有哪些?
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 组复制官方翻译九、Group Replication Technical Details
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​数据链路层——流量控制可靠传输机制 ​
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #Lua:Lua调用C++生成的DLL库
  • #NOIP 2014# day.1 T2 联合权值
  • #pragma data_seg 共享数据区(转)
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $.ajax()
  • (2)nginx 安装、启停
  • (二)原生js案例之数码时钟计时
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (三)uboot源码分析