具体实施方式
下面通过具体的实施例子并结合附图对本发明做进一步的详细描述。
本发明实施例提供一种推荐方法,如图1所示,主要处理步骤包括:
步骤A:接收到访问请求时,提取与所述访问请求相对应的当前用户的特征信息,根据所述特征信息确定所述当前用户是否为新用户;
确定所述当前用户为新用户时,执行步骤B:根据所述当前用户的历史访问记录,按照点击率排名向所述当前用户进行热点推荐;
确定所述当前用户为老用户时,执行步骤C:对预先存储的用户信息及项目信息进行聚类,生成用户聚类;在所述用户聚类中,生成基于项目内容的第一推荐列表,还生成基于用户-项目网络的协同过滤的第二推荐列表;根据所述第一推荐列表及所述第二推荐列表生成混合推荐列表;根据所述混合推荐列表向当前用户进行信息推荐。
步骤A中,所述根据所述特征信息确定所述当前用户是否为新用户,包括:
所述特征信息为发出所述访问请求的当前用户的已参与项目数目;将提取的所述已参与项目数目与预设的项目数目阈值进行比较,若所述已参与项目数目不大于所述项目数目阈值,则确定所述当前用户为新用户,否则确定所述当前用户为老用户。
步骤C中,所述对预先存储的用户信息及项目信息进行聚类,生成用户聚类,如图2所示,包括:
步骤C1:根据预先存储的用户信息及项目信息,构建用户偏好向量;
步骤C2:基于Hadoop技术,采用MapReduce编程模型下的K-Means算法对构建的所有所述用户偏好向量进行聚类操作,生成用户聚类。
步骤C1中所述根据预先存储的用户信息及项目信息,构建用户偏好向量,如图3所示,包括:
步骤C11:所述项目信息对应设置有项目类别标签,根据所述项目类别标签确定所述用户偏好向量的分量及维度;
其中,所述用户偏好向量的数学表达式为:
所述用户偏好向量的分量的前部为项目类别标签,后部为分量权重;所述用户偏好向量的维度k由项目类别数目确定;
步骤C12:采用TF-IDF算法确定所述用户偏好向量的分量权重。
具体地,步骤C12采用TF-IDF算法确定所述用户偏好向量的分量权重,包括:
存储的所有所述项目信息组成项目集,所述项目集中的项目信息的项目数目记为N;
所述项目集中设置有项目类别标签ti的项目信息的项目数目为ni;
所述项目集中,将项目类别标签ti在任意用户u已参与项目信息中出现的次数记为fiu;
则,项目类别标签ti在所述用户u已参与项目集中出现的词频为
其中,maxzfzu是指所述用户u已参与项目集中项目类别标签出现的最大次数;
项目类别标签ti在所述项目集中出现的逆频为
根据所述项目类别标签ti在所述用户u已参与项目集中出现的词频及在所述项目集中出现的逆频,确定项目类别标签ti在与用户u相关的用户偏好向量中的分量权重为:
步骤C2中基于Hadoop技术,采用MapReduce编程模型下的K-Means算法对构建的所有所述用户偏好向量进行聚类操作,生成用户聚类,如图4所示,包括:
步骤C21:所有所述用户偏好向量组成用户偏好向量集合;
其中,用户偏好向量集合表达式为{P1,P2,...,Pn}
步骤C22:从所述用户偏好向量集合中随机选取K个用户偏好向量分别作为K个类的初始中心,该K个初始中心分别记为C1,C2,...CK;
步骤C23:利用Split过程按预设规则对所述用户偏好向量集合中的所有用户偏好向量进行分组;
步骤C24:利用Map过程,按照所述Split过程分组的结果,计算所述用户偏好向量集合中每个所述用户偏好向量分别到K个所述初始中心的中心距离,并根据最短中心距离原则,形成K个聚类,同时确定K个所述聚类的用户中心;
其中,中心距离的计算公式为:
(1≤i≤n,1≤j≤K);
根据最短中心距离原则,确定每个用户偏好向量的最短中心距离,其中最短中心距离的计算公式为Δi={||Pi-C1||,||Pi-C2||,…,||Pi-CK||}(1≤i≤n),将每个用户偏好向量归于与最短中心距离对应的聚类中。
步骤C25:利用Shuffle过程,对K个所述聚类进行洗牌归类;
步骤C26:利用Reduce过程,重新计算所述洗牌归类后的K个聚类的聚类中心:
(1≤j≤K,1≤t≤|{Cj}|);
表示类Cj中第t个用户,|{Cj}|表示类Cj中用户的个数。
该步骤中,利用Reduce过程重新计算洗牌归类后的K个聚类的聚类中心后,进行Reduce结果输出,具体地,将重新计算得到的所述聚类中心与所述用户中心对应排列输出。
步骤C27:将重新计算得到的所述聚类中心分别对应地与所述用户中心进行比较;
步骤C28:若重新计算得到的所述聚类中心分别对应地与所述用户中心相等,则完成聚类操作,输出聚类结果;否则,按预设规则重新计算聚类用户中心,直至聚类用户中心稳定。
重新计算得到的所述聚类中心分别对应地与所述用户中心相等,即Λi=Ci,(1≤i≤K),输出聚类结果,最终聚类中心为O1,O2,...,OK。
步骤C28中,按预设规则重新计算聚类用户中心,是指重新执行步骤C24至C28,进行迭代更新,直到聚类用户中心稳定,此处稳定是指得到的聚类的中心不再移动。
步骤C中,在所述用户聚类中,生成基于项目内容的第一推荐列表,如图5所示,包括:
步骤SC11:在当前用户所属的用户聚类中,构建项目属性向量;
其中,所述项目属性向量的数学表达式为:
所述项目属性向量的分量的前部为项目信息的项目类别标签,后部为分量权重;所述项目属性向量的维度k由项目类别数目确定;所述项目属性向量的分量的权重中的i取值为1或0;
步骤SC12:计算当前用户的用户偏好向量与所述项目属性向量间的相似度;
当前用户记为用户a,用户a与任意项目d之间的相似度的计算过程为:
其中,
步骤SC13:根据所述相似度的计算结果,选取当前用户的用户偏好向量相似度值满足预设阈值的多个项目作为当前用户的第一推荐列表。
步骤C中,在所述用户聚类中,还生成基于用户-项目网络的协同过滤的第二推荐列表,如图6所示,包括:
步骤CC11:在所述用户聚类中,构建项目网络;
步骤CC12:基于所述项目网络构建用户网络;
步骤CC13:在所述用户网络中,按预设规则确定当前用户的最近邻居集;
其中,用户的最近邻居集用Sa表示。
步骤CC14:根据所述当前用户的已参与项目信息集合及所述最近邻居集的已参与项目信息集合,形成候选推荐项目集合;
设定当前用户a的已参与项目信息集合记为I
a,其最近邻居集的已参与项目信息集合记为D,则候选推荐项目集合为
步骤CC15:计算所述候选推荐项目集合中的项目信息对于当前用户的推荐度;
步骤CC16:根据所述推荐度的计算结果,从所述候选推荐项目集合中选取项目信息形成第二推荐列表。
其中,步骤CC15及CC16中,候选项目
则候选项目i对于当前用户a的推荐度为
其中,用户s对项目i感兴趣,则counts,i=1,否则counts,i=0。
步骤CC11中,在所述用户聚类中,构建项目网络,如图7所示,包括:
步骤CC111:在所述用户聚类中,所有项目信息形成项目集I,根据任意两个项目信息之间的边权值,确定边集E;
其中,所述边权值的数学表达式为:
Ui表示已参与项目i的用户信息的集合,Uj表示已参与项目j的用户信息的集合;
步骤CC112:根据所述项目集I及所述边集E,构建初步项目网络;
步骤CC113:将所述初步项目网络中,任意两个项目间边权值小于预设的边权阈值的边去掉,形成项目网络G=(I,E)。
步骤CC12中,基于所述项目网络构建用户网络,包括:
构建用户网络u=(Iu,Eu);
其中,Iu为任意用户u已参与项目的项目信息集合,Eu={(i,j)|(i,j)∈E且i,j∈Iu}为任意用户u已参与的任意两个项目之间的边集,所述E指所述项目网络中的边集E。
步骤CC13中,在所述用户网络中,按预设规则确定当前用户的最近邻居集,包括:
步骤CC131:根据预设的同一项目对关系计算当前用户与任意用户u之间的Jaccard相似性,其中当前用户记为用户a,计算公式为:
步骤CC132:根据预设的相似项目对关系,计算用户a和任意用户u之间的相似性,计算公式为:
步骤CC133:根据预设的相关项目对关系,计算用户a和任意用户u之间的相似性,计算公式为:
步骤CC134:根据所述Jaccard相似性、所述相似项目相似性及所述相关项目相似性的计算结果,确定用户a和任意用户u之间的相似度量值,所述相似度量值的计算公式为:
sim(a,u)=αsim1(a,u)+βsim2(a,u)+γsim3(a,u),其中α+β+γ=1;
步骤CC135:根据所述相似度量值的计算确定当前用户的最近邻居集。
本发明实施例中,按预设规则确定当前用户的最近邻居集时,会根据任意项目所属的用户网络,预先确定任意两个项目间的相似关系,其中确定出的相似关系包括:同一项目对、相似项目对、相关项目对和无关项目对。
具体地,同一项目对关系、相似项目对关系、相关项目对关系分别为:
设任意两个用户a和u,Iu为用户u已参与项目的项目信息集合,Ia为用户a已参与项目的项目信息集合,i及j分别表示任意项目i及任意项目j;
若i∈Ia,j∈Iu,i,j∈Ia∩Iu,称i,j为同一项目对;
若i∈Ia/Iu,j∈Iu/Ia,(i,j)∈E,称i,j为用户a和u之间的相似项目对;
若
且w(i,j)>θ,称i,j为用户a和u之间的相关项目对,其中
且N(I
u)={(k,t)|w(k,t)≤0.01,且k,t∈I
u},|N(I
u)|表示集合N(I
u)的元素个数。
称用户a和u之间的其余项目对为无关项目对。
步骤CC134中,所述根据所述Jaccard相似性、所述相似项目相似性及所述相关项目相似性的计算结果,确定用户a和任意用户u之间的相似度量值,包括:
在所述用户聚类中,除构建项目网络外,还构建用户-项目兴趣度矩阵;
利用所述用户-项目兴趣度矩阵实现所述sim1(a,u)、sim2(a,u)及sim3(a,u);
利用矩阵实现的所述sim1(a,u)、sim2(a,u)及sim3(a,u)确定用户a和任意用户u之间的相似度量值。
信息推荐时,仅仅根据用户的评价并不能完整体现用户真实兴趣,进而结合用户浏览记录和购买记录等隐式数据,将其转换成评分数据,构建伪评分数据,获取用户综合兴趣度,构造用户-项目兴趣度矩阵,其中所述用户-项目兴趣度矩阵R的数学表达式为:
可以看出,用户-项目兴趣度矩阵表现形式为一个m×n的矩阵R,m表示用户数,n表示项目数目。
该矩阵中,rui=1或0,1≤u≤m,1≤i≤n。
利用所述用户-项目兴趣度矩阵实现所述sim1(a,u)、sim2(a,u)及sim3(a,u)的实现方法具体包括:
利用矩阵R实现边权值为:
其中,Ri=(r1i,r2i,…,rmi)T为用户-项目兴趣度矩阵R中第i列的元素构成的向量,Ri T为向量Ri的转置。
sim1(a,u)的矩阵实现为:
其中,Ru=(ru1,ru2,…,run)为用户-项目矩阵R中第u行的元素构成的向量,表示用户u兴趣项目的向量。
sim2(a,u)的矩阵实现包括:
矩阵实现为:
取矩阵Ru T·Ra对角线元素组成向量A=(A1,A2,…An),(1≤i≤n),Ai=1表示用户a和用户u共同对项目i感兴趣,Ai=0表示用户a和用户u至少有一个对项目i不感兴趣。
则,
|Ia/Iu|=||Ra-A||2
|Iu/Ia|=||Ru-A||2
其中,||Ru||2如步骤C24所定义。
|{(i,j)|(i,j)∈E,i∈Ia/Iu,j∈Iu/Ia}|
=(Ra-A)·L·(Ru-A)T
其中,
为项目-项目矩阵,l
ij=1表示项目i与项目j项目之间有边,即(i,j)∈E,l
ij=0表示
1≤i,j≤n。
于是,
sim3(a,u)的矩阵实现:
根据相关项目相似定义,计算用户a和u之间的相似性,有
其中,
N(Iu)={(k,t)|w(k,t)≤0.01,且k,t∈Iu}
矩阵实现为:
其中
再由边权值的矩阵实现可知
由此可知θ可由矩阵形式实现。
定义矩阵
l
i,j′=1表示项目i与项目j之间满足:
且i∈I
a/I
u,j∈I
u/I
a;l
i,j′=0表示w(i,j)≤θ,,且i∈I
a/I
u,j∈I
u/I
a。
于是
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。