推荐系统实践-利用用户行为数据(2)

2.1 用户行为数据

用户行为在推荐系统中一般分为两种,显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback),显性反馈行为包括用户明确表示对物品喜好的行为,隐性反馈行为指的是那些不能明确反应用户喜好的行为:

用户行为的统一表示为:

无上下文信息的隐性反馈数据集:每一条行为记录仅仅包含用户ID和物品ID:eg:book-crossin

无上下文信息的显性反馈数据集:每一条记录包含用户ID、物品ID和用户对物品的评分。

有上下文信息的隐性反馈数据集:每一条记录包含用户ID、物品ID和用户对物品产生行为的时间戳。eg:Lastfm数据集

有上下文信息的显性反馈数据集 每一条记录包含用户ID、物品ID、用户对物品的评分 和评分行为发生的时间戳。eg:Netflix Prize数据集

2.2 用户行为分析

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

物品的流行度和用户的活跃度都满足于长尾分布,长尾分布为:

f(x)=ax^k

2.2.2 用户活跃度和物品流行度

由于新用户一般浏览热门内容,老用户可能会浏览一些相较于不热门的,因此用户活跃度和平均物品热门度曲线呈现出下降趋势,表明用户越活跃,越趋向于浏览冷门的内容。

协同过滤算法:仅仅根据用户行为数据设计的推荐算法。分为基于邻域的方法(neighborhood-based)、隐语义模型(latent factor model)、基于图的随机游走算法random walk on graph

基于邻域的方法(neighborhood-based)又可分为基于用户的协同过滤算法和基于物品的协同过滤算法。

基于用户的协同过滤算法:给用户推荐和他兴趣相似的其他用户喜欢的物品。

基于物品的协同过滤算法:给用户推荐和他之前喜欢的物品相似的物品。

2.3 实验设计和算法评测

2.3.1 数据集

2.3.2 实验设计

首先将数据集按照均匀分布随机分为M份,然后选取其中一份作为测试集,M-1份作为训练集。为了防止过拟合,进行M次实验,且每次使用不同的测试集,最后对M次实验结果取平均值。

2.3.3 评测指标

对用户u推荐N个物品(记为R(u)),令用户u在测试集上喜欢的物品集合为T(u),然后可以通过准确率/召回率评测推荐算法的精度:

召回率(Recall):即正确预测为正的占全部实际为正的比例

Recall=\frac{\sum_{u}|R(u) \cap T(u)|}{\sum_{u}|T(u)|}

准确率(Precision):也叫查准率,即正确预测为正的占全部预测为正的比例

Precision=\frac{\sum_u|R(u) \cap T(u)|}{\sum_u |R(u)|}

覆盖率(coverage):

Coverage=\frac{|\cup_{u\in U}R(u)|}{I}

新颖度:这里用推荐列表中物品的平均流行度度量推荐结果的新颖度,如果推荐出的物品都很热门,说明推荐的新颖度较低,否则说明推荐结果比较新颖。

2.4 基于邻域的算法

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

基于用户的协同过滤算法主要包括两个步骤:

(1) 找到和目标用户兴趣相似的用户集合

(2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户

步骤(1)主要利用兴趣相似度,主要利用行为的相似度计算兴趣的相似度,给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,N(v)表示用户v有过正反馈的物品集合,可用雅卡尔系数(Jaccard index)公式计算u和v的兴趣相似度:

w_{uv}=\frac{|N(u) \cap N(v)|}{|N(u) \cup N(v)|}

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

w_{uv}=\frac{|N(u) \cap N(v)|}{\sqrt{|N(u)|*|N(v)|}}

用以下公式度量UserCF算法中用户u对物品i的感兴趣程度:

p(u,i)=\sum_{v\in S(u,K)\cap N(i)} W_{uv}r_{vi}

其中,S(u,K)包含和用户u兴趣最接近的K个用户,N(i)是对物品i有过行为的用户集合,w_{uv}是用户u和用户v的兴趣相似度,r_{vi}代表用户v对物品i的兴趣。UserCF中K是最重要的参数,K的取值影响准确率和召回率以及流行度覆盖率。

用户相似度计算的改进:因存在若两个人都购买新华字典并不能说明两个人兴趣相同的问题,对用户相似度计算进行改进,公式如下:

w_{uv}=\frac{\sum_{i\in N(u)\cap N(v)}\frac{1}{\log 1+|N(i)|}}{\sqrt{|N(u)|*|N(v)|}}

其中N(i)表示对物品i产生过行为用户的数量。

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

由于用户过多计算用户相似度时间复杂度很高,因此产生了ItemCF。并不利用物品的内容属性计算物品之间的相似度,主要通过分析用户的行为记录计算物品之间的相似度。例如,物品A和物品B之间有很大的相似度是因为喜欢物品A的用户大都喜欢物品B。

ItemCF的主要步骤也分为两步:

(1)计算物品之间的相似度

(2)根据物品的相似度和用户的历史行为给用户生成推荐列表

计算相似度首先提出以下公式:

w_{ij}=\frac{|N(i)\cap N(j)|}{|N(i)|}

N(i)表示喜欢物品i的用户数,分子为同时喜欢物品i和物品j的用户数,可以理解为喜欢物品i的用户中有多少比例的用户也喜欢j,但是如果物品j很热门,很多人都喜欢, 那么w_{ij}就会很大,接近1。因此进行改进,提出新的公式:

w_{ij}=\frac{|N(i)\cap N(j)|}{\sqrt{|N(i)||N(j)|}}

得到物品相似度后,ItemCF通过以下公式计算用户u对一个物品j的兴趣:

p_{uj}=\sum_{i\in N(u)\cap S(j,K)}w_{ji}r_{ui}

N(u)为用户u喜欢物品的集合,S(j,K)是和物品j相似度最高的K个物品的集合,w_{ji}是物品j和物品i的相似度,r_{ui}是用户u对用户i的兴趣,(隐反馈中取1)。其中K为ItemCF算法的参数,K的取值影响精度即(recall和precision)以及覆盖率,流行度等。

物品相似度计算的改进:由于可能有人购买了大量书籍拿来销售,但他对这些书籍并不感兴趣,因此此人对于物品相似度的贡献应小于正常的人,产生ItemCF-CUF算法:

w_{ij}=\frac{\sum_{u\in N(i)\cap N(j))}\frac{1}{\log 1+|N(u)|}}{\sqrt{|N(i)||N(j)|}}

其中N(u)表示用户u喜欢物品的个数。

物品相似度矩阵进行归一化(ItemCF-Norm)后可提高准确率:进行如下归一化:

w_{ij}^{'}=\frac{w_{ij}}{\max_{j} w_{ij}}

进行归一化的原因是比如有两类物品A和B,A类物品之间相似度为0.5,B类物品之间相似度为0.6,若不进行归一化,系统会只推荐B类物品,而如果做了归一化两类物品相似度均为1,都会进行推荐。

UserCF和ItemCF对比:

ItemCF仍然存在哈利波特问题,即由于哈利波特这本书籍过于热门,导致其他物品和哈利波特的相似度都很高,可以再进行改进,对分母进行惩罚:

w_{ij}=\frac{|N(i)\cap N(j)|}{|N(i)|^{1-\alpha}|N(j)|^{\alpha}}

此时α也成为一个参数。但还是存在不同领域热门物品相似度高的问题,此时需要引入内容数据来解决这个问题。

2.5 隐语义模型(latent factor model)

隐语义模型通过隐含特征(latent factor)联系用户兴趣和物品,隐语义模型(LFM)通过如下公式计算用户u对物品i的兴趣:

preference(u,i)=r_{ui}=p_{u}^Tq_i=\sum_{f=1}^{F}p_{u,k}q_{i,k}

其中p_{u,k}q_{i,k}为模型的参数,p_{u,k}表示用户u的兴趣和第k个隐类的关系,而q_{i,k}表示第k个隐类和物品i之间的关系。两个参数从数据集中计算得到。

由于隐性反馈数据集中只包含正样本(用户喜欢什么),而不包含负样本(用户不喜欢什么),因此我们需要生成负样本,生成负样本需要遵循以下两个原则:

1.对每个用户,要保证正负样本的平衡(数目相似)

2.对每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品。

采样完之后,可以得到用户物品集合K={(u,i)},若(u,i)是正样本,则有r_{ui}=1,否则r_{ui}=0。优化损失函数来寻找参数p和q:

C=\sum_{(u,i)\in K}(r_{ui}-r_{ui}^{\hat{}})^2=\sum_{(u,i)\in K}(r_{ui}-\sum_{k=1}^Kp_{u,k}q_{i,k})^2+\lambda||p_{u}||^2+\lambda||q_{i}||^2

后面两项是防拟合的正则化项,通过梯度下降法最小化此损失函数即可得到p和q,分别对p_{u,k}q_{i,k}求偏导数,得到如下递推公式:

p_{uk}=p_{uk}+\alpha(q_{ik}-\lambda p_{uk})

q_{ik}=q_{ik}+\alpha(p_{uk}-\lambda q_{ik})

其中,α为学习速率。因此在LFM中参数有4个:

1.隐特征的个数F

2.学习速率α

3.正则化参数λ

4.负样本/正样本比例ratio

其中ratio的值对LFM性能影响最大,一般取F=100,α=0.02,λ=0.01然后研究ratio值的影响。

2.6 基于图的模型

基于图的模型(graph-based model)是推荐系统中的重要内容,首先将用户物品行为集合用二分图G(V,E)表示,V代表用户集合顶点,E代表物品集合顶点。V和E之间的边代表用户和物品之间产生过行为。

2.6.1 基于图的推荐算法

用二分图表示后,对用户u推荐就可以转化为度量用户顶点v_{u}和与v_u没有边直接相连的物品节点在图上的相关性。图中顶点之间的相关性主要取决于下面三个方面:

1.两个顶点之间的路径数

2.两个顶点之间路径的长度

3.两个顶点之间路径经过的顶点

相关性高的一对顶点一般具有如下特征:两个顶点之间有很多路径相连,连接两个顶点之间的路径长度比较短,两个顶点之间路径不经过出度较大的顶点。

PersonalRank算法:从用户u对应的节点vu开始在用户物品二分图上进行随机游走。游走到任何一个节点时,首先按照概率α决定是继续游走,还是停止这次游走并从v_{u}节点开始重新游走。最后可以得到如下公式:

PR(v)=\begin{cases} \alpha\sum_{v^{'} \in in(v)}\frac{PR(v^{'})}{|out(v^{'})|}& \text{v $\neq$ $v_u$}\\1-\alpha+\alpha\sum_{v^{'} \in in(v)}\frac{PR(v^{'})}{|out(v^{'})|}& \text{v $=$ $v_u$} \end{cases}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值