关联规则延伸之协同过滤

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


一、协同过滤

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 os

films=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()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值