理解基于协同过滤的推荐系统(附代码)

在这里插入图片描述
协同过滤假设用户过去的偏好也是他未来的偏好,通过利用过去的偏好作为确定用户之间相关性的指标。
不关心物品的描述属性,而是利用用户对他们的意见来计算相似度。
在这里插入图片描述

下为实现代码:

def standEst(dataMat, user, simMeas, item):
        n=shape(dataMat)[1]     #0为行,1为列,dataMat的列数,行为用户,列为物品,得到了物品数
        simTotal=0.0
        ratSimTotal=0.0
        for j in range(n):
                userRating = dataMat[user,j]    #第user个用户对第j个物品的评价
                if userRating == 0: continue    #如果对于这个user对于某个物品的评分为0,跳过这个物品
                overLap = nonzero(logical_and(dataMat[:,item] .A>0,dataMat[:,j] .A>0))[0]
                #.A将矩阵转化为数组
                #dataMat[:,item]>0表示目标物品对应列哪些大于0为True,dataMat[:,j]>0表示所遍历的列
                #大于零的为True,logical_and把他们合起来找出都大于0的部分,[0]来找出他们的行数,就是找
                #哪些人!对这两个物品都评价过。
                if len(overLap)==0 : similarity=0
                else:similarity=simMeas(dataMat[overLap,item],dataMat[overLap,j])
                print('the %d and %d similarity is: %f' % (item,j,similarity))
                simTotal=simTotal+similarity
                ratSimTotal=ratSimTotal+similarity*userRating
        if simTotal == 0: return 0
        else: return ratSimTotal/simTotal
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值