一种基于聚类的网络结构相似性推荐方法
技术领域
本发明涉及一种信息处理技术的算法,特别涉及一种基于聚类网络结构相似性推荐方法。
背景技术
现代社会中物质资源极大丰富,人民生活水平极大提高,市面上有着各种各样的物质产品和文化产品。每个人的喜好各不相同,每个人都想要找到自己喜爱的产品,个性化的服务正越来越成为人们关注的焦点,越来越多的研究者也加入到了研究个性化推荐算法的领域中来。个性化服务主要是是向用户推荐其可能感兴趣、或者将会购买的产品的信息,使得用户能够快速的找到其兴趣点。
研究网络数据的推荐算法,已经成为国内数据挖掘热点,也产生了很多推荐算法。陈克寒等在论文《基于用户聚类的异构社交网络推荐算法》中提出了一种处理冷启动和数据稀疏性的推荐算法GCCR。在《多维加权社会网络中的个性化推荐算法》的论文中张华青等使用加权网络不但建立了用户和商品的关系网还建立了用户和用户的关系网。在论文《基于项目聚类的协同过滤推荐算法》邓爱林等提出了一种根据用户评分项判断产品相似性的聚类推荐算法。现有聚类推荐方式存在的技术缺陷:精度低、计算时间长。
发明内容
为了克服传统推荐方法的精度较低、计算时间较长的不足,本发明提出了一种精度较高、计算时间较短的基于聚类的网络结构相似性推荐方法。
本发明解决其技术问题所采用的技术方案是:
一种基于聚类的网络结构相似性推荐方法,所述推荐方法包括以下步骤:
步骤1:在数据库中标记用户形成集合User={u1,u2,u3…un};
步骤2:在集合User中选择k个用户作为聚类中心,形成集合UC={uc1,uc2,…uck},所述uck代表一个聚类中心用户;
步骤3:初始化k个聚类集合C={c1,c2,c3…ck},所述ck代表包含有用户聚类中心uck和与uck相似度高的其他用户的集合;
步骤4:计算用户un与聚类中心uck的相似度,将用户un归类为某一聚类集合ck中;
步骤5:计算每个聚类ck中每种产品被购买的次数,将数量大于阀值b*n的产品标记出来作为特征商品,b为0~1之间的预设系数;
步骤6:计算需要推荐的用户Ui与每个聚类中心的相似性,将Ui归为某一聚类ck中;
步骤7:计算Ui与ck特征向量的值,得出推荐列表。
进一步,所述步骤1中,用户集合User={u1,u2,u3…un}中每一个un包含用户所购买过的产品信息,un代表用户购买产品的行向量。
再进一步,所述步骤2中,使用公式(1)计算用户的购买指数,选择购买指数较高的前几个用户作为聚类中心,步骤如下:
步骤2.1使用公式(1)计算用户的购买指数,计算后的数值直接保存在c向量中,公式(1)中
是元素全为1的一维列向量,c是一维行向量;
A×α1=c (1)
步骤2.2使用循环程序计算,当h<k-1,d<k-1-h时,比较cd和cd+1的大小,如果cd<cd+1,将cd和cd+1中的值互换,将d+1赋值给ranki,将d赋值给ranki+1,所述rank是包含了用户标号d顺序的列向量,ranki代表向量rank中的第i个元素;
步骤2.3:取rank中前k个用户的标号赋值给聚类中心,形成集合UC={uc1,uc2,uc3…uck}。
再进一步,所述步骤4中,用户un聚类的步骤如下:
步骤4.1:当f<k,t<n时,利用循环程序通过公式(2)计算用户un与聚类中心uck的相似度。
Simtf=ut×ucf′ (2)
步骤4.2:将un放入Simtf最大的对应的聚类集合ck中。
再进一步,所述步骤5中,利用循环程序计算每个类中每种产品被购买的次数,再将产品按购买次数的多少进行排序得到每个聚类的购买特性向量,步骤如下:
步骤5.1:利用公式(3)提取聚类集合ck中用户共同购买特征,其中α′1={1,1,…,1}是一维行向量,traitk是包含用户购买特征的一维行向量;
α′1×ck=traitk (3)
步骤5.2:利用公式(4)对traitk中的数据进行特征处理,对于traitkj-0.6k>0的数,将trij中的对应位置赋值为1,traitkj-0.6k<0时赋值为0,traitkj代表第k个聚类中关于第j个产品的特征值,tri是将traitkj中对应的产品标记出来的列向量,trij代表tri中的第j个元素;
再进一步,所述步骤6中,计算Ui与每个聚类中心的相似性,步骤如下:
6.1:使用公式(5)计算需要推荐的用户Ui和聚类中心uck之间的相似性,Simik代表用户Ui和聚类中心uck的相似性;
Simik=Ui×uck (5)
步骤6.2:将Ui归为相似性最大的聚类uck中。
更进一步,所述步骤7中,利用公式(6)对Ui和uck的特征向量进行与非运算得到推荐列表:
本发明的技术构思为:首先对数据库中用户进行聚类运算,将具有高相似性的用户归为同一类,进一步在每一用户类型中找到此类中用户购买最多的产品列表,再进一步,当需要为用户Ui推荐时,只要找到与其最相似的聚类,然后将聚类中用户还没有购买的排列在列表前端的产品推荐给用户即可。
本发明的有益效果主要表现在:聚类计算的步骤可以放在服务器中提前进行计算,计算的结果可以存储起来。当用户需要推荐时只需先对用户和类进行相似性的计算,然后调用已经计算好的数据即可。这样可以简化计算的过程,大大减少计算的时间。
附图说明
图1是一种基于聚类的网络结构相似性推荐方法的流程图。
具体实施方式
下面结合附图对本发明作进一步描述。
参照图1,一种基于聚类的网络结构相似性推荐方法,包括以下步骤:
步骤1:在数据库中标记用户形成集合User={u1,u2,u3…un}。
步骤2:在集合User中选择k个用户作为聚类中心,形成集合UC={uc1,uc2,…uck}。所述uck代表一个聚类中心用户。
步骤3:初始化k个聚类集合C={c1,c2,c3…ck}。所述ck代表包含有用户聚类中心uck和与uck相似度高的其他用户的集合。
步骤4:计算用户un与聚类中心uck的相似度,将用户un归类为某一聚类集合ck中。
步骤5:计算每个聚类ck中每种产品被购买的次数,将数量大于阀值b*n的产品标记出来作为特征商品,b为0~1之间的预设系数,例如b取0.6。
步骤6:计算需要推荐的用户Ui与每个聚类中心的相似性,将Ui归为某一聚类ck中。
步骤7:计算Ui与ck特征向量的值,得出推荐列表。
进一步,所述步骤1中,用户集合User={u1,u2,u3…un}中每一个un包含用户所购买过的产品信息。un代表用户购买产品的行向量。如下表所示是代表用户和产品关系的邻接矩阵A。其中un代表用户,Pj代表产品,矩阵中的元素anj代表用户是否购买过此产品,anj=1代表用户n曾经购买过商品j,anj=0表示没有购买过。
再进一步,所述步骤2中使用公式(1)计算用户的购买指数,选择购买指数较高的前几个用户作为聚类中心。具体步骤如下:
步骤2.1使用公式(1)计算用户的购买指数,计算后的数值直接保存在c向量中。公式(1)中
是元素全为1的一维列向量。c是一维行向量。
A×α1=c (1)
步骤2.2使用循环程序计算,当h<k-1,d<k-1-h时,比较cd和cd+1的大小,如果cd<cd+1,将cd和cd+1中的值互换,将d+1赋值给ranki,将d赋值给ranki+1。所述rank是包含了用户标号d顺序的列向量。ranki代表向量rank中的第i个元素。
步骤2.3:取rank中前k个用户的标号赋值给聚类中心,形成集合UC={uc1,uc2,uc3…uck}
再进一步。所述步骤4中用户un聚类的具体步骤如下:
步骤4.1:当f<k,t<n时,利用循环程序通过公式(2)计算用户un与聚类中心uck的相似度。
Simtf=ut×ucf′ (2)
步骤4.2:将un放入Simtf最大的对应的聚类集合ck中。
再进一步,所述步骤5中,利用循环程序计算每个类中每种产品被购买的次数,再将产品按购买次数的多少进行排序得到每个聚类的购买特性向量。具体步骤如下:
步骤5.1:利用公式(3)提取聚类集合ck中用户共同购买特征。其中α′1={1,1,…,1}是一维行向量。traitk是包含用户购买特征的一维行向量。
α′1×ck=traitk (3)
步骤5.2:利用公式(4)对traitk中的数据进行特征处理,系数b取0.6为例,对于traitkj-0.6k>0的数,将trij中的对应位置赋值为1,traitkj-0.6k<0时赋值为0。traitkj代表第k个聚类中关于第j个产品的特征值。tri是将traitkj中对应的产品标记出来的列向量。trij代表tri中的第j个元素。
再进一步,所述步骤6中,计算Ui与每个聚类中心的相似性的具体步骤如下:
步骤6.1:使用公式(5)计算需要推荐的用户Ui和聚类中心uck之间的相似性。Simik代表用户Ui和聚类中心uck的相似性。
Simik=Ui×uck (5)
步骤6.2:将Ui归为相似性最大的聚类uck中。
更近一步,在步骤7中利用公式(6)对Ui和uck的特征向量进行与非运算得到推荐列表。
实例:取如下邻接矩阵作为包含用户和产品关系的矩阵A
采用公式(1)A×α1=c对矩阵A进行计算得到购买指数
c={6,4,6,7,4,5,4,6,5,5}
对c向量进行排序后得到包含了用户标号d顺序的列向量
rank′={4,1,3,8,6,9,10,2,5,7}
将排序最前的u4和u1赋值给聚类中心集合UC={u4,u1}。
通过(2)Simtf=ut×ucf′将用户un都聚类到集合C={c1,c2}中,其中c1={u1,u3,u5,u7},c2={u2,u4,u6,u8,u9,u10}。
通过公式(3)α′
1×c
k=trait
k以聚类集合c
2为例计算出trait
2={5,2,4,4,3,2,4,1,2,5},在通过(4)
处理后得tri={1,0,1,1,0,0,1,0,0,1}
最后对于需要推荐的用户U
i={0,0,1,0,0,0,1,1,1,1}利用公式(6)
得到推荐列表list={1,1,0,1,1,1,0,1,1,0}。