数据科学个人笔记:推荐系统之推荐算法(基于图+隐语义)

一、隐语义模型(LFM算法)

(一)基础算法

隐语义分析采取基于用户行为统计的自动聚类,计算出用户和隐类的关系和物品和隐类的关系。

此处使用LFM算法,通过如下公式计算用户u对物品i的兴趣:

Preference(u,i)=r(ui)=sum(p(u,k)*q(i,k))

p(u,k)和q(i,k)时模型的参数,分别度量了类别与用户和物品的关系。

我们优化以下的损失函数来找到最合适的参数p和q:

C=sum[r(ui)-sum(p(u,k)*q(i,k))]^2+lamda*||pu||^2+lamda*||qi||^2

随机梯度下降的更新公式如下:

p(u,k)=p(u,k)+alfa*(qik*eui-lamda*p(u,k))

q(i,k)=q(i,k)+alfa*(puk*eui-lamda*q(i,k))

(二)负采样的方式

对每个用户未行为的热门物品设置为负样本;保证正负样本的平衡,负样本比例高时召回和准确率提升但挖掘常委物品的能力下降。

(三)LFM的问题及改进

难以实现实时的推荐,每次训练都需要扫描所有的用户行为记录。训练耗时,一半只能每天训练一次。改进的预测算法如下:r(ui)=x(u)^T*y(i)+p(u)^T*q(i),其中向量x(u)表示u用户对各内容特征的兴趣程度,可以根据历史行为记录获得,每天只需计算以测。y(i)是根据物品内容属性直接生成的向量。P(u)和q(i)通过最近几小时的行为训练LFM模型获得。

(四)LFM和基于邻域的方法比较

1.LFM有比较好的理论基础,有优化学习过程,协同过滤主要是统计方法。

2.离线计算的空间复杂度:在物品数和用户数数量大的情况下,隐语义模型能很好地节省离线计算的内存。

3.离线计算的时间复杂度:LFM在物品数过多的情况下时间复杂度太高。

4.ItemCF的推荐解释强于LFM。

 

二、基于图的模型

(一)用户行为的二分图模型

令G(V,E)表示用户物品二分图,V由用户顶点Vu和物品顶点Vi组成,用户与物品间有边E说明用户对物品有过行为。

(二)基于图的推荐模型

1.度量Vu和Vi的相关性时,相关性高的一对顶点一般具有如下特征:

(1)两个顶点之间有很多路径相连;

(2)连接两个顶点之间的路径长度都比较短;

(3)连接两个顶点之间的路径不会经过出度比较大的顶点。

2.基于随机游走的PersonalRank算法:

要对用户u进行推荐,可以从其对应顶点Vu开始在二分图上随机游走,游走到任何一个节点时按照概率alfa决定继续游走并从当前节点开始按照均匀分布随机选择一个节点作为下次的节点,还是停止这次游走并从Vu节点开始重新游走。经过多次随机游走后,每个物品节点被访问到的概率会收敛到一个数。

3.PersonalRank的算法评价

(1)评价:

该算法有比较好的理论解释,但算法在时间复杂度上有明确缺陷,需要在整个图上迭代直到收敛,不仅无法实时推荐,甚至离线生成推荐结果也很耗时。

(2)解决方法:

第一种就是在收敛之前停止减少迭代次数。另一种方法是从矩阵论出发重新设计算法。

将转移矩阵写为M(v,v”)=1/|out(v)|。

矩阵r=(1-alfa)r0+alfa*M^T*r,即r=(1-alfa)*(1-alfa*M^T)^(-1)*r0

(三)时间段图模型(路径融合算法)

1.顶点的类型

时间段图模型也是一个二分图,一个用户时间段节点Vut会和用户其在时刻t喜欢的物品通过边相连(但无需与用户相连),一个物品时间段节点Vit会和武平在时刻t喜欢它的用户通过边相连(但无需与物品相连)。

2.顶点的权重sigma(v)属于(0,1]:

Sigma=1-alfa(用户顶点) 或 alfa(用户时间段点) 或1-beta(物品顶点) 或 beta(物品时间段点)

alfa和beta是控制各顶点权重的参数。

3.路径的权重:T(P)=sigma(vn)*连乘([sigma(vi)*w(vi,v(i+1))]/|out(vi)|^s),即路径权重=终点权重*连乘(各点权重*该点到下一点边的权重/各点出度的s次方),各边权重均为1。

4.顶点相关度:连接两个顶点各路径权重的和。

5.路径融合算法可以基于广度优先搜索算法实现。

(四)基于图的社会化推荐算法

1.在用户物品二分图中增加用户间的好友边。使用上文中的PersonalRank。用户和用户相似度的alfa倍为用户间边权重,用户和物品兴趣度的beta倍为用户和物品间边权重。Alfa大则好友行为对推荐结果影响大,beta大则历史行为对推荐结果影响大。

2.增加好友边后再增加社群顶点,并与用户进行连接。使用上文中的PersonalRank。

(五)基于图结合标签的推荐算法

在用户物品二分图中加标签顶点,并连接用户和物品及标签。若两点间已有边,则权重+1。使用上文中的PersonalRank。

猜你喜欢

转载自blog.csdn.net/humothetrader/article/details/81630932