【第一节:零基础学习推荐系统系列之UserCF的初识】到底什么是UserCF,到底是如何计算用户相似度的

协同过滤:

在协同过滤中,用户相似度的计算是关键的一笔。

问题:如何的用户X对苹果手机的喜爱与否?

电视机智能手表苹果手机华为手机
用户A👍😒😒😒
用户B😒👍👍😒
用户C😒😒😒👍
用户D😒👍👍😒
用户X😒👍👍

物品-用户的共现矩阵中的行向量代表相应用户的用户向量,计算用户相似度就是计算两个用户行向量之前的相似度:

①余弦相似度

衡量两个向量之间的夹角,夹角越小,两个用户越相似
s i m ( i , j ) = c o s ( i , j ) = i ⋅ j ∣ ∣ i ∣ ∣ ⋅ ∣ ∣ j ∣ ∣ sim(\bold{i},\bold{j})= cos(\bold{i},\bold{j})=\frac{\bold{i}·\bold{j}}{||\bold{i}|| · ||\bold{j}||} sim(i,j)=cos(i,j)=ijij
其中i和j是向量,加了粗体,假如设i是用户B,j是用户D,点赞为1,哭脸为0,那么i可以表示为(0,1,1,1),j可以表示为(0,1,1,0). 那么这两个用户相似度代入公式得:

i·j = 0x0 + 1x1 + 1x1 + 1x0 = 2

||i|| = (0^2 + 1^2 + 1^2 + 12)1/2 = 根号3

||j|| = (0^2 + 1^2 + 1^2 + 02)1/2 = 根号2

2/(根号2 x 根号3) ~~ 0.82 【这里是近似计算的】

计算得到用户B和用户D的相似度是 0.81 其实已经挺高了。

接下来我们找两个不那么相似的用户B和C,假设i是用户B,j是用户C,那么i依旧表示为(0,1,1,1),j表示为(0,0,0,1),那么计算相似度代入公式得:

i·j = 0x0 + 1x0 + 1x0 + 1x1 = 1

||i|| = (0^2 + 1^2 + 1^2 + 12)1/2 = 根号3

||j|| = (0^2 + 0^2 + 0^2 + 12)1/2 = 1

1/(根号3 x 1) ~~ 0.58 【这里是近似计算的】,此时相似度就下降了

缺点:

余弦相似度的主要缺点是用户向量存在非1即0的逻辑,只考虑了用户对某一个物品喜欢或者不喜欢,而没有考虑用户对物品的喜欢程度和讨厌程度,从向量来说,就是只考虑了用户向量的方向,而没有考虑长度。

②皮尔逊相关系数:

相较于余弦相似度,皮尔逊相关系数考虑了用户评分大小的因素,并且使用用户平均分对该用户平均评分习惯进行了修正,减少了某一个用户评分偏高或者偏低的影响。

注释:R(i,p) 代表用户i物品p的评分
s i m ( i , j ) = ∑ p ∈ P ( R i , p − R ˉ i ) ( R j , p − R ˉ j ) ∑ p ∈ P ( R i , p − R ˉ i ) 2 ∑ p ∈ P ( R j , p − R ˉ j ) 2 sim(\bold{i},\bold{j})=\frac{\sum_p\in_P(R_i,_p- \bar R_i)(R_j,_p- \bar R_j)}{\sqrt{\sum _p\in _P(R_i,_p-\bar R_i)^2}\sqrt{\sum _p\in _P(R_j,_p-\bar R_j)^2}} sim(i,j)=pP(Ri,pRˉi)2 pP(Rj,pRˉj)2 pP(Ri,pRˉi)(Rj,pRˉj)
该公式看起来似乎比较麻烦,其实可以这么来理解,先将公式分子分母 【减R的平均】这部分去掉,去掉之后是这样的:
s i m ( i , j ) = ∑ p ∈ P ( R i , p ) ( R j , p ) ∑ p ∈ P ( R i , p ) 2 ∑ p ∈ P ( R j , p ) 2 sim(\bold{i},\bold{j})=\frac{\sum_p\in_P(R_i,_p)(R_j,_p)}{\sqrt{\sum _p\in _P(R_i,_p)^2}\sqrt{\sum _p\in _P(R_j,_p)^2}} sim(i,j)=pP(Ri,p)2 pP(Rj,p)2 pP(Ri,p)(Rj,p)
这么看,就和余弦相似度的公式一样了:

分子是两个不同的用户向量的点积,将两个用户对相同的物品的评分乘起来相加,不正好是向量乘积运算么。

分母是该用户对每个物品评分的二次方相加后开方,不正好是该用户的向量的模么,两个用户向量的模相乘,不正好就是余弦相似度的分母么。

和余弦相似度不同的是,皮尔逊相关系数可以处理用户对物品打分的情况,而不是单一的喜欢还是不喜欢。

加上【减R的平均】这部分是排除个别用户打分习惯对相似计算造成的影响,如果用A平时打分就是很高,喜欢的是100,不喜欢的是90,可能其他用户如用户B喜欢的是60,不喜欢的是50,通过减去用户平均打分值,可以得到用户A喜欢的打分是100-((100+90)/2) = 5, 不喜欢的打分是:90-((100+90)/2)= -5分, 按照该公式得到用户B喜欢的打分是5分,不喜欢的打分是-5分,这样一来减轻计算压力,都换算为较小的数,二来可以发掘潜在用户的相似。

③皮尔逊相关系数引申

第二点是排除用户个人习惯打分参数,其实也可以排除物品被打分习惯参数,如果一个物品被大多数人接受,那么排除物品平均打分后这部分人的打分还是基本一样的,如果出现不一样的情况,一些人给物品i 打100分,一些人给物品i打50分,那么排除物品平均打分之后,会使得第一批人和第二批人内部之前愈发相似,而两批人之前愈发不相似,甚至出现第二批人不喜欢该物品的情况,因为排除掉平均分之后该评分甚至为负数了。

其实相似度计算也在不断的更新迭代,寻找更好的相似度计算方法。

④获得用户X对苹果手机的喜爱与否

通过上述三种相似度计算每个用户与用户X的相似度,取TopN的相似用户【例子中只有几个用户,其实现实中应该有很多用户参与计算】,利用这几个相似用户的苹果手机的评分 * 相似度得到用户X对苹果手机的喜爱分数。
R u , p = ∑ s ∈ S ( W u , s ⋅ R s , p ) ∑ s ∈ S W u , s R_u,_p = \frac{\sum {_s\in_S (W_u,_s · R_s,_p)}}{\sum _s\in_S W_u,_s} Ru,p=sSWu,ssS(Wu,sRs,p)
权重W(u,s):用户u和用户s的相似度

R(s,p):用户s对物品p的评分

公式定义:累加(每个用户和用户X的相似度 乘以 该用户对苹果手机的评分),得到一个结果,该结果除以(每个用户和用户X的相似度之和)。 得到的结果就是用户X对苹果手机的喜爱程度。

结尾:评价基于用户的协同过滤 UserCF

1、在现实业务中,用户数量往往远大于物品数量,也就是计算用户之间相似度,需要存储历史大量的用户矩阵数据,该存储开销随着用户的增加会以较大的比例上升,对于存储系统是一个很大的挑战。

2、用户向量矩阵往往不止稠密的,而是稀疏的,大部分用户可获取的信息极为少,导致计算的时候寻找用户的相似用户很难实现,或者说实现后很难判断是否真的相似,对于获取用户评分较难的公司及业务很不友好,比如远程车票、旅游公司等等

我也是刚开始学习,欢迎在评论区讨论:🌹🌹🌹

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值