发明名称 基于网络社区的协同过滤推荐方法
摘要 本发明公开了一种基于网络社区的协同过滤推荐方法,主要解决现有技术在获得用户之间相似度数据时存在稀疏性,造成推荐准确率低的问题。其实现步骤是:获取用户对待推荐项目的评分信息,并利用用户对待推荐项目的评分数据间接生成用户与用户之间的关系网络;计算用户之间的相似度;通过基于相似度的社区检测将用户关系网络划分成若干个用户社区;选取用户所在社区内相似度最大的k个用户组成近邻用户集合,根据近邻用户集合对目标用户未评分的项目进行预测评分;将评分预测值中最大的项目推荐给用户。仿真实验结果表明,本发明比传统协同过滤推荐方法能得到更好的推荐结果,可用于向用户推荐用户感兴趣的项目。
申请公布号 CN103793476B 申请公布日期 2017.02.15
申请号 CN201410007387.3 申请日期 2014.01.08
申请人 西安电子科技大学 发明人 刘静;焦李成;刘辰龙;马文萍;马晶晶;李阳阳;朱虎明
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 陕西电子工业专利中心 61205 代理人 王品华;朱红星
主权项 一种基于网络社区的协同过滤推荐方法,包括如下步骤:(1)获取用户对待推荐项目的评分信息,通过用户对待推荐项目的评分数据间接生成用户与用户之间的关系网络,其中任意两个用户共同评分的项目个数表示这两个用户之间的权值关系,这些用户之间的权值关系构成用户与用户的关系网络,用户对项目的评分信息用矩阵R(m,n)表示为:<maths num="0001"><math><![CDATA[<mrow><mi>R</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow><mo>=</mo><mfenced open = "[" close = "]"><mtable><mtr><mtd><msub><mi>r</mi><mn>11</mn></msub><mo>,</mo><msub><mi>r</mi><mn>12</mn></msub><mo>...</mo><mo>,</mo><msub><mi>r</mi><mrow><mn>1</mn><mi>j</mi></mrow></msub><mo>...</mo><mo>,</mo><msub><mi>r</mi><mrow><mn>1</mn><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><mrow><mo>...</mo><mo>...</mo></mrow></mtd></mtr><mtr><mtd><msub><mi>r</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo>,</mo><msub><mi>r</mi><mrow><mi>i</mi><mn>2</mn></mrow></msub><mo>...</mo><mo>,</mo><msub><mi>r</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub><mo>...</mo><mo>,</mo><msub><mi>r</mi><mrow><mi>i</mi><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><mrow><mo>...</mo><mo>...</mo></mrow></mtd></mtr><mtr><mtd><msub><mi>r</mi><mrow><mi>m</mi><mn>1</mn></mrow></msub><mo>,</mo><msub><mi>r</mi><mrow><mi>m</mi><mn>2</mn></mrow></msub><mo>...</mo><mo>,</mo><msub><mi>r</mi><mrow><mi>m</mi><mi>j</mi></mrow></msub><mo>...</mo><mo>,</mo><msub><mi>r</mi><mrow><mi>m</mi><mi>n</mi></mrow></msub></mtd></mtr></mtable></mfenced><mo>,</mo></mrow>]]></math><img file="FDA0001144682030000011.GIF" wi="622" he="375" /></maths>其中m和n分别表示用户数和项目数,r<sub>ij</sub>表示矩阵中第i行第j列的元素用户i对项目j的评分值;(2)通过用户之间的关系网络,计算任意两个用户u和v之间的相似度s(u,v);(3)将获得的用户与用户的关系网络划分成若干个用户社区:(3a)将每个用户比作一个节点,获得用户网络的节点数n,随机生成Pop=50个初始个体,将每个个体用从1到n的一种随机排列表示为A<sub>P</sub>,即:A<sub>P</sub>={v<sub>1</sub>,...v<sub>i</sub>,...v<sub>n</sub>},其中v<sub>i</sub>表示第i个节点,i∈[1,n];(3b)设A<sub>C</sub>表示社区集合,对每个个体的随机排列进行解码:(3b1)设解码的最初时刻A<sub>C</sub>为空集合,即集合中社区的数量m为0,将随机排列A<sub>P</sub>的初始节点v<sub>1</sub>加入到一个新的空社区C<sub>m+1</sub>中,并将此社区加入到社区集合A<sub>C</sub>中,此时m=m+1;(3b2)定义T(C<sub>j</sub>)表示第j个社区C<sub>j</sub>的质量函数<maths num="0002"><math><![CDATA[<mrow><mi>T</mi><mrow><mo>(</mo><msub><mi>C</mi><mi>j</mi></msub><mo>)</mo></mrow><mo>=</mo><mfrac><msubsup><mi>S</mi><mrow><mi>i</mi><mi>n</mi></mrow><msub><mi>C</mi><mi>j</mi></msub></msubsup><mrow><msubsup><mi>S</mi><mrow><mi>i</mi><mi>n</mi></mrow><msub><mi>C</mi><mi>j</mi></msub></msubsup><mo>+</mo><msubsup><mi>S</mi><mrow><mi>o</mi><mi>u</mi><mi>t</mi></mrow><msub><mi>C</mi><mi>j</mi></msub></msubsup></mrow></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0001144682030000012.GIF" wi="398" he="158" /></maths>其中<img file="FDA0001144682030000013.GIF" wi="346" he="126" />表示第j个社区C<sub>j</sub>的内部节点相似度之和,<img file="FDA0001144682030000014.GIF" wi="406" he="118" />表示第j个社区C<sub>j</sub>内部节点与外部节点相似度之和;(3b3)将随机排列A<sub>P</sub>中的节点从第二个节点v<sub>2</sub>开始,依次判断是否加入到社区C<sub>1</sub>,…C<sub>j</sub>,...,C<sub>m</sub>中:计算社区C<sub>1</sub>的质量函数值T(C<sub>1</sub>)和v<sub>2</sub>加入社区C<sub>1</sub>后的值T(C<sub>1</sub>∪v<sub>2</sub>),当满足T(C<sub>1</sub>∪v<sub>2</sub>)&gt;T(C<sub>1</sub>)时,将节点v<sub>2</sub>加入到社区C<sub>1</sub>中并跳到下一个节点v<sub>3</sub>,否则判断节点v<sub>2</sub>是否加入到社区C<sub>2</sub>中,当满足T(C<sub>2</sub>∪v<sub>2</sub>)&gt;T(C<sub>2</sub>)时,将节点v<sub>2</sub>加入到社区C<sub>2</sub>中并跳到下一个节点v<sub>3</sub>,否则判断节点v<sub>2</sub>是否加入到社区C<sub>3</sub>中,以此类推,直到节点v<sub>2</sub>加入到对应的社区中并跳到下一个节点v<sub>3</sub>;如果节点v<sub>2</sub>不能加入到A<sub>C</sub>的任意一个社区,则将节点v<sub>2</sub>加入到一个新的空社区C<sub>m+1</sub>中并将此社区加入到社区集合A<sub>C</sub>中,跳到下一个节点v<sub>3</sub>,此时m=m+1;根据上述规则将所有节点都划分到对应社区中,即将A<sub>P</sub>解码为A<sub>C</sub>={C<sub>1</sub>,…C<sub>j</sub>,...,C<sub>m</sub>};(3c)生成新的个体的随机排列A<sub>P</sub>′:(3c1)定义用于评价每个个体社区划分好坏的适应度函数fun(A<sub>C</sub>)为:<maths num="0003"><math><![CDATA[<mrow><mi>f</mi><mi>u</mi><mi>n</mi><mrow><mo>(</mo><msub><mi>A</mi><mi>C</mi></msub><mo>)</mo></mrow><mo>=</mo><munderover><mo>&Sigma;</mo><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>m</mi></munderover><mi>T</mi><mrow><mo>(</mo><msub><mi>C</mi><mi>j</mi></msub><mo>)</mo></mrow><mo>/</mo><mi>m</mi><mo>,</mo></mrow>]]></math><img file="FDA0001144682030000021.GIF" wi="492" he="135" /></maths>其中T(C<sub>j</sub>)表示第j个社区C<sub>j</sub>的质量函数,m表示社区的数量;(3c2)按照适应度函数公式计算出每个个体的适应度函数值,选择出适应度函数值大小排名前10%的个体保留,其余90%的个体再随机生成新的个体的随机排列A<sub>P</sub>′;(3d)获得用户关系网络的最终社区划分:(3d1)对生成的新的排列个体A<sub>P</sub>′,采用步骤(3b)的方式解码,并计算解码后的个体的适应度值;(3d2)将之前保留的10%个个体与新生成的个体重新放到一起,挑选出适应度值最大的前10%个个体,将其余90%的个体再重新生成新的排列个体;(3d3)循环步骤(3d1)和(3d2)共10次,在最后一次循环后选出适应度函数值最高的个体,并将其对应的社区集合作为最后的社区划分集合:A<sub>Cu</sub>={C<sub>u1</sub>,…C<sub>uj</sub>,…,C<sub>um</sub>},其中m表示社区个数,C<sub>uj</sub>表示第j个社区;(4)将用户关系网络划分为社区后,对用户未评分的项目进行预测评分,得到未评分项目的评分预测值;(5)将评分预测值中最大的项目推荐给用户。
地址 710071 陕西省西安市太白南路2号