python导出协同过滤结果_【Python】推荐系统入门之协同过滤

[TOC]

协同过滤

介绍

协同过滤包括基于物品的协同过滤和基于用户的协同过滤两种不同方式。

基于物品的协同过滤:给用户推荐与他之前购买物品相似的其他物品。

基于用户的协同过滤:给用户推荐与他兴趣相似的其他用户购买的物品

理解相似度

在上面简单的介绍了协同过滤的概率,我们发现无论是基于物品的协同过滤还是基于用户的协同过滤,都包含一个共同的关键词,就是相似度。相似度衡量了用户与用户之间,物品与物品之间的相似程度。在协同过滤中起着至关重要的作用。

在计算相似度之前,我们通常都会将物品或者用户用一个向量来表示,比如下表表示了4个用户的购买行为,1表示购买,0表示没有。则用户1可以用向量$[1, 0, 1, 0]$来表示。

商品1

商品2

商品3

商品4

用户1

1

0

1

0

用户2

0

1

0

0

用户3

1

1

0

0

用户4

1

1

0

1

用户5

0

0

1

常见的相似度计算方法主要有

余弦相似度

$i$和$j$表示两个不同的用户向量,则它们之间的余弦距离可以用下式来表示为

$$

Simularity(i,j)=\frac{i\cdot j}{||i||\cdot ||j||}

$$

余弦距离表征的是向量之间的夹角大小,夹角越小,余弦距离约小。

皮尔逊相关系数

相比于余弦距离,皮尔逊相关系数使用用户向量的平均值进行了修正,减少了偏置的影响。

$$

Simularity(i,j)=\frac{\sum_{p\in P}(R_{i,p}-\bar{R_i})\cdot (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}}

$$

$P$表示所有的物品,$R_{i,p}$表示用户$i$对物品$p$的评分。$\\bar{R_i}$表示用户$i$对所有物品评分的平均值。

基于皮尔逊系数的其他思路

上面的皮尔逊相关系数中,使用了用户的平均评分对相似度进行了修正,这里同样对相似度进行了修正,只不过使用的是物品的平均评分。

$$

Simularity(i,j)=\frac{\sum_{p\in P}(R_{i,p}-\bar{R_p})\cdot (R_{j,p}-\bar{R_p})}{\sqrt{\sum_{p\in P}(R_{i,p}-\bar{R_p})^2}\sqrt{\sum_{p\in P}(R_{j,p}-\bar{R_p})^2}}

$$

$\\bar{R_p}$表示物品$p$的所有评分的平均值。

在相似用户的计算过程中,任何合理的相似度计算过程都可以作为相似用户计算的标准。

最终结果的排序

基于用户的协同过滤(UserCF)

有了用户之间的相似度,我们就可以根据相似度来进行排序,取出TopN的最相似的用户。根据这些相似用户的已有评分,我们就能够对目标用户的偏好进行预测了。

目标用户的评价预测通常使用的是用户之间的相似度加权平均

$$

R_{up}=\frac{\sum_{s\in S}(W_{us}\cdot R_{sp})}{\sum_{s\in S}W_{us}}

$$

$R_{up}$表示目标用户$u$对商品$p$的评分,$W_{us}$表示目标用户$u$和用户$s$的相似度,$S$表示与用户$u$相似度最高的TopN用户列表。

得到目标用户对于每个商品的评分预测后,就可以对所有的评分预测进行排序,最终决定要向用户推荐什么物品了。

基于用户的协同过滤思路很简单,就是相似的用户应该具有类似的兴趣偏好,但在技术上存在一些问题

互联网平台上,用户数往往远远大于物品数,这使得每次相似度计算需要耗费大量时间和资源,而且会随着用户的增长,所需的资源和时间呈现$n^2$的增长,这通常是无法接受的。

用户的行为通常是稀疏的,找到与目标用户相似的用户是十分困难的,并且很多情况下找到的相似用户并无关系。这使得UserCF很难应用在正样本获取困难的推荐场景,比如说大件商品或奢侈品等等。

基于物品的协同过滤(ItemCF)

由于上面提到的UserCF中的两个缺陷,在最初的推荐系统中,都没有采用UserCF,而是采用了ItemCF。

ItemCF是基于物品相似度进行推荐的协同推荐算法,通过计算物品之间的相似度来得到物品之间的相似矩阵,然后再找到用户的历史正反馈物品的相似物品进行排序和推荐。

ItemCF的步骤如下:

根据所有用户的历史数据,构建以用户(假设用户数为m)为行坐标,物品(假设物品数为n)为列坐标的$m\\times n$维的共现矩阵。

计算共现矩阵列向量之间的相似度,得到一个$n\\times n$的一个相似度矩阵。

获取用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值