2、基于用户的协同过滤算法

一:用户行为数据简介

用户行为数据在网站上最简单的存在形式就是日志。
用户行为在个性化推荐系统中一般分为两种———显性反馈行为隐形反馈行为。显性反馈行为包括用户明确表示对物品喜好的行为。比如评分5分 或者点击喜欢。 隐性反馈行为主要最具代表性的就是页面浏览行为。

二:用户行为分析

2.1用户活跃度和物品流行度的分布

互联网上的很多数据分布都满足长尾分布 很多研究员还发现,用户行为数据也蕴含着这种规律
这里写图片描述

2.2用户活跃度和物品流行度的关系

如下图所示,用户越活跃,越倾向于浏览冷门的物品
这里写图片描述

三:基于用户的协同过滤算法:

这种算法给用户推荐和他感兴趣相似的其他用户喜欢的物品,主要包括两个步骤

  1. 找到和目标用户兴趣相似的用户集合
  2. 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户

主要通过计算用户行为来计算用户行为的相似度:给定用户uv, 令N(u)表示u曾经有过正反馈的物品集合,令N(v)表示v曾经有过正反馈的物品集合。那么,我们可以通过Jaccard公式计算uv的兴趣相似度
这里写图片描述

或者通过余弦相似度来计算

这里写图片描述

例如: 如下图用户A对物品{a,b,d}有过行为,用户B对 物品{a,c}有过行为,用户C对{b,e}有过行为,用户D对{c,d,e}有过行为。利用余弦相似度公式计算

这里写图片描述

用户A和用户B的兴趣相似度
这里写图片描述
用户A和用户C的兴趣相似度
这里写图片描述
用户A和用户D的兴趣相似度
这里写图片描述

然而事实上很多用户相互之间并没有对同样的物品产生过行为,即很多时候 |N(u)∩N(v)|=0
因此会浪费大量的资源在求这种用户相似度之上。因此我们换一种思路,我们首先计算出|N(u)∩N(v)|≠0的用户对(u,v),然后在用公式计算
因此,我们使用倒排表的方法
这里写图片描述
对于物品 a 将W[A][B]W[B][A]都加1 对于物品b将W[A][C]W[C][A]都加1 等等。。。
假如 用户A 喜欢{a,b,d} 用户B喜欢{a,b,c} 则倒排表为
a A B
b A B C
则 在计算的时候 W[A][B] 和 W[B][A]都为2 这样对于余弦相似度公式的分子就有了 再除以分母就行了
这里写图片描述

在得到用户的兴趣相似度后,UserCF算法会给用户推荐最相似的K个用户喜欢的物品。如下公式度量了UserCF算法中,用户u对物品i的感兴趣成都
这里写图片描述

其中S(u,K) 包含用户u兴趣最接近的K个用户 如上图 我们若去K=3 则A 用户兴趣最接近的为B,C,D
N(i) 表示对用品i有过行为的用户结合 如上图 我们若选 i 为c(用户A没有操作过)商品,则N(i) 为B,D
r 表示的是用户v 对商品 i 的兴趣,因为我们使用的是单一行为的隐反馈数据,因此在这里 r=1

则计算用户A 对商品c的感兴趣度为
这里写图片描述

#-*- coding: utf-8 -*-
'''
Created on 2015-06-22

@author: Lockvictor
'''
import sys
import random
import math
import os
from operator import itemgetter

from collections import defaultdict

random.seed(0)

'''
users.dat 数据集 
用户id 用户性别 用户年龄 用户职业 用户所在地邮编
1::F::1::10::48067
2::M::56::16::70072
3::M::25::15::55117

movies.dat 数据集
  • 22
    点赞
  • 226
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值