发明名称 基于项目使用次数的矩阵分解推荐方法
摘要 本发明公开了一种基于项目使用次数的矩阵分解推荐方法,包括如下步骤:1)用三元组表示用户对项目的使用次数;2)标准化用户对项目的使用次数;3)利用FPTree算法获得项目集的频繁二项集;4)基于项目的使用人数,获得项目集的流行度;5)利用所建立的推荐算法模型,预测用户对项目的使用次数;5)建立用户对项目的真实使用次数与其预测使用次数的损失函数;6)基于损失函数,利用随机梯度下降法获取各未知参数,进而预测用户对项目的使用次数;7)对用户未使用项目的预测使用次数降序排序,将排序靠前的项目推荐给用户。本发明不仅比传统的基于项目相似度的矩阵分解方法速度快,而且其精度优于传统矩阵分解方法和协同过滤的方法。
申请公布号 CN105976220A 申请公布日期 2016.09.28
申请号 CN201610264552.2 申请日期 2016.04.25
申请人 合肥工业大学 发明人 姜元春;钱洋;杜非;刘业政;孙春华;孙见山;王佳佳
分类号 G06Q30/06(2012.01)I 主分类号 G06Q30/06(2012.01)I
代理机构 安徽省合肥新安专利代理有限责任公司 34101 代理人 陆丽莉;何梅生
主权项 一种改进的基于矩阵分解的推荐方法,其特征是利用用户对项目的使用次数,项目的频繁项集信息,以及各用户之间的好友关系,为各用户推荐相应项目;所述推荐方法按如下步骤进行:步骤1、用三元组T=&lt;U,I,R&gt;表示用户对项目的使用次数;U表示用户集,并有U={U<sub>1</sub>,U<sub>2</sub>,...,U<sub>i</sub>,...,U<sub>|U|</sub>};U<sub>i</sub>表示第i个用户;I表示项目集,并有I={I<sub>1</sub>,I<sub>2</sub>,...,I<sub>j</sub>,...,I<sub>|I|</sub>};I<sub>j</sub>表示第j个项目;R表示使用次数矩阵,并有R={R<sub>i,j</sub>}<sub>||U|×|I|</sub>;R<sub>i,j</sub>表示第i个用户U<sub>i</sub>对第j个项目I<sub>j</sub>的使用次数;1≤i≤|U|;1≤j≤|I|;步骤2、利用式(1)将所述第i个用户U<sub>i</sub>对第j个项目I<sub>j</sub>的使用次数R<sub>i,j</sub>进行归一化处理,获得归一化后的使用次数<img file="FDA0000973713500000011.GIF" wi="91" he="78" />从而获得所有用户对所有项目的归一化后的使用次数:<maths num="0001"><math><![CDATA[<mrow><msub><mover><mi>R</mi><mo>^</mo></mover><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>=</mo><mfrac><mrow><msub><mi>R</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>-</mo><msub><mrow><mo>(</mo><msub><mi>R</mi><mi>i</mi></msub><mo>)</mo></mrow><mi>min</mi></msub><mo>+</mo><mn>1</mn></mrow><mrow><msub><mrow><mo>(</mo><msub><mi>R</mi><mi>i</mi></msub><mo>)</mo></mrow><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub><mo>-</mo><msub><mrow><mo>(</mo><msub><mi>R</mi><mi>i</mi></msub><mo>)</mo></mrow><mi>min</mi></msub><mo>+</mo><mn>1</mn></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000973713500000012.GIF" wi="646" he="151" /></maths>式(1)中,(R<sub>i</sub>)<sub>min</sub>表示第i个用户U<sub>i</sub>对所有项目使用次数的最小值;(R<sub>i</sub>)<sub>max</sub>表示第i个用户U<sub>i</sub>对所有项目使用次数的最大值;步骤3、利用FPTree算法获得项目集I的频繁二项集,并用三元组P=&lt;I,I,Y&gt;表示项目与项目的支持度;并有Y={Y<sub>j,k</sub>}<sub>||I|×|I|;</sub>Y<sub>j,k</sub>表示第j个项目I<sub>j</sub>与第k个项目I<sub>k</sub>的支持度;1≤k≤|I|;步骤4、统计第j个项目I<sub>j</sub>的使用人数并进行归一化处理后,获得第j个项目I<sub>j</sub>的流行度Po<sub>j</sub>,从而获得项目集I的流行度Po={Po<sub>1</sub>,Po<sub>2</sub>,...,Po<sub>j</sub>,...,Po<sub>|I|</sub>};步骤5、利用式(2)预测所述第i个用户U<sub>i</sub>对第j个项目I<sub>j</sub>的使用次数<img file="FDA0000973713500000013.GIF" wi="98" he="78" /><maths num="0002"><math><![CDATA[<mrow><mtable><mtr><mtd><mrow><msubsup><mover><mi>R</mi><mo>^</mo></mover><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mo>&prime;</mo></msubsup><mo>=</mo><msub><mover><mi>&mu;</mi><mo>&OverBar;</mo></mover><mi>i</mi></msub><mo>+</mo><msub><mi>b</mi><mi>i</mi></msub><mo>+</mo><msub><mi>b</mi><mi>j</mi></msub><mo>+</mo><msub><mi>Po</mi><mi>j</mi></msub><mo>+</mo><msubsup><mi>q</mi><mi>j</mi><mi>T</mi></msubsup><mrow><mo>(</mo><msub><mi>p</mi><mi>i</mi></msub><mo>+</mo><msup><mrow><mo>|</mo><msub><mi>N</mi><mi>i</mi></msub><mo>|</mo></mrow><mrow><mo>-</mo><mfrac><mn>1</mn><mn>2</mn></mfrac></mrow></msup><munder><mi>&Sigma;</mi><mrow><mi>l</mi><mo>&Element;</mo><msub><mi>N</mi><mi>i</mi></msub></mrow></munder><msub><mi>w</mi><mrow><mi>i</mi><mo>,</mo><mi>l</mi></mrow></msub><mo>)</mo></mrow><mo>+</mo><msup><mrow><mo>|</mo><msup><mi>G</mi><msub><mi>f</mi><mi>i</mi></msub></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>|</mo></mrow><mrow><mo>-</mo><mfrac><mn>1</mn><mn>2</mn></mfrac></mrow></msup><munder><mi>&Sigma;</mi><mrow><msubsup><mi>f</mi><mi>i</mi><mi>a</mi></msubsup><mo>&Element;</mo><msup><mi>G</mi><msub><mi>f</mi><mi>i</mi></msub></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow></mrow></munder><mrow><mo>(</mo><msub><mover><mi>R</mi><mo>^</mo></mover><mrow><msubsup><mi>f</mi><mi>i</mi><mi>a</mi></msubsup><mo>,</mo><mi>j</mi></mrow></msub><mo>-</mo><msubsup><mover><mi>R</mi><mo>^</mo></mover><mrow><msubsup><mi>f</mi><mi>i</mi><mi>a</mi></msubsup><mo>,</mo><mi>j</mi></mrow><mo>&prime;</mo></msubsup><mo>)</mo></mrow><msub><mi>x</mi><mrow><msubsup><mi>f</mi><mi>i</mi><mi>a</mi></msubsup><mo>,</mo><mi>i</mi></mrow></msub></mrow></mtd></mtr><mtr><mtd><mrow><mo>+</mo><msup><mrow><mo>|</mo><msup><mi>G</mi><msub><mi>n</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>|</mo></mrow><mrow><mo>-</mo><mfrac><mn>1</mn><mn>2</mn></mfrac></mrow></msup><munder><mi>&Sigma;</mi><mrow><msubsup><mi>n</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mi>b</mi></msubsup><mo>&Element;</mo><msup><mi>G</mi><msub><mi>n</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow></mrow></munder><mrow><mo>(</mo><msub><mover><mi>R</mi><mo>^</mo></mover><mrow><msubsup><mi>n</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mi>b</mi></msubsup><mo>,</mo><mi>i</mi></mrow></msub><mo>-</mo><msubsup><mover><mi>R</mi><mo>^</mo></mover><mrow><msubsup><mi>n</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mi>b</mi></msubsup><mo>,</mo><mi>i</mi></mrow><mo>&prime;</mo></msubsup><mo>)</mo></mrow><msub><mi>Y</mi><mrow><msubsup><mi>n</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mi>b</mi></msubsup><mo>,</mo><mi>j</mi></mrow></msub></mrow></mtd></mtr></mtable><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000973713500000014.GIF" wi="1894" he="333" /></maths>式(2)中,<img file="FDA0000973713500000015.GIF" wi="46" he="55" />表示第i个用户U<sub>i</sub>对所有项目的归一化后的使用次数的均值;b<sub>i</sub>表示第i个用户U<sub>i</sub>对所有项目使用次数的偏移量;b<sub>j</sub>表示第j个项目I<sub>j</sub>在使用次数上的偏移量;<img file="FDA0000973713500000016.GIF" wi="54" he="71" />表示第j个项目I<sub>j</sub>的隐特征向量的转置;p<sub>i</sub>表示第i个用户U<sub>i</sub>的隐偏好向量;N<sub>i</sub>表示第i个用户U<sub>i</sub>使用过的项目的数量;w<sub>i,l</sub>表示第i个用户U<sub>i</sub>对第l个使用过的项目的权重;f<sub>i</sub>表示第i个用户U<sub>i</sub>的所有好友;f<sub>i</sub><sup>a</sup>表示第i个用户U<sub>i</sub>的所有好友中第a个好友;<img file="FDA0000973713500000021.GIF" wi="177" he="70" />表示第i个用户U<sub>i</sub>的所有好友f<sub>i</sub>中使用过第j个项目I<sub>j</sub>的好友集合;<img file="FDA0000973713500000022.GIF" wi="190" he="85" />表示第i个用户U<sub>i</sub>的所有好友f<sub>i</sub>中使用过第j个项目I<sub>j</sub>的好友集合的数量;<img file="FDA0000973713500000023.GIF" wi="94" he="85" />表示第i个用户U<sub>i</sub>的所有好友f<sub>i</sub>中第a个好友对第j个项目I<sub>j</sub>的真实使用次数;<img file="FDA0000973713500000024.GIF" wi="94" he="86" />表示第i个用户U<sub>i</sub>的所有好友f<sub>i</sub>中第a个好友对第j个项目I<sub>j</sub>的预测使用次数;<img file="FDA0000973713500000025.GIF" wi="86" he="63" />表示第i个用户U<sub>i</sub>与第i个用户U<sub>i</sub>的所有好友f<sub>i</sub>中第a个好友的亲密度;n<sub>i,j</sub>表示第i个用户U<sub>i</sub>使用的除第j个项目I<sub>j</sub>以外的其他项目与第j个项目I<sub>j</sub>的频繁二项集之间的交集;<img file="FDA0000973713500000026.GIF" wi="189" he="70" />表示第i个用户U<sub>i</sub>使用的除第j个项目I<sub>j</sub>以外的其他项目与第j个项目I<sub>j</sub>的频繁二项集之间的交集所包含的项目;<img file="FDA0000973713500000027.GIF" wi="206" he="95" />表示第i个用户U<sub>i</sub>使用的除第j个项目I<sub>j</sub>以外的其他项目与第j个项目I<sub>j</sub>的频繁二项集之间的交集所包含的项目数量;<img file="FDA0000973713500000028.GIF" wi="65" he="79" />表示第i个用户U<sub>i</sub>使用的除第j个项目I<sub>j</sub>以外的其他项目与第j个项目I<sub>j</sub>的频繁二项集之间的交集中的第b个项目;<img file="FDA0000973713500000029.GIF" wi="100" he="87" />表示第i个用户U<sub>i</sub>使用的除第j个项目I<sub>j</sub>以外的其他项目与第j个项目I<sub>j</sub>的频繁二项集之间的交集中的第b个项目的真实使用次数;<img file="FDA00009737135000000210.GIF" wi="94" he="87" />表示第i个用户U<sub>i</sub>使用的除第j个项目I<sub>j</sub>以外的其他项目与第j个项目I<sub>j</sub>的频繁二项集之间的交集中的第b个项目预测使用次数;<img file="FDA00009737135000000211.GIF" wi="93" he="79" />表示第j个项目I<sub>j</sub>的频繁二项集中第b个项目与第j个项目I<sub>j</sub>之间支持度;步骤6、用式(3)所示的J<sub>i,j</sub>表示第i个用户U<sub>i</sub>对第j个项目I<sub>j</sub>的真实使用次数<img file="FDA00009737135000000212.GIF" wi="70" he="78" />与预测使用次数<img file="FDA00009737135000000213.GIF" wi="73" he="77" />之间的损失函数;<maths num="0003"><math><![CDATA[<mrow><mtable><mtr><mtd><mrow><msub><mi>J</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><msup><mrow><mo>(</mo><msub><mover><mi>R</mi><mo>^</mo></mover><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>-</mo><msubsup><mover><mi>R</mi><mo>^</mo></mover><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mo>&prime;</mo></msubsup><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><mfrac><msub><mi>&lambda;</mi><mn>1</mn></msub><mn>2</mn></mfrac><mrow><mo>(</mo><mo>|</mo><mo>|</mo><msub><mi>b</mi><mi>i</mi></msub><mo>|</mo><msup><mo>|</mo><mn>2</mn></msup><mo>+</mo><mo>|</mo><mo>|</mo><msub><mi>b</mi><mi>j</mi></msub><mo>|</mo><msup><mo>|</mo><mn>2</mn></msup><mo>)</mo></mrow><mo>+</mo><mfrac><msub><mi>&lambda;</mi><mn>2</mn></msub><mn>2</mn></mfrac><mrow><mo>(</mo><mo>|</mo><mo>|</mo><msub><mi>p</mi><mi>i</mi></msub><mo>|</mo><msup><mo>|</mo><mn>2</mn></msup><mo>+</mo><mo>|</mo><mo>|</mo><msub><mi>q</mi><mi>j</mi></msub><mo>|</mo><msup><mo>|</mo><mn>2</mn></msup><mo>+</mo><munder><mi>&Sigma;</mi><mrow><mi>l</mi><mo>&Element;</mo><msub><mi>N</mi><mi>i</mi></msub></mrow></munder><msub><mi>w</mi><mrow><mi>i</mi><mo>,</mo><mi>l</mi></mrow></msub><mo>)</mo></mrow></mrow></mtd></mtr><mtr><mtd><mrow><mo>+</mo><mfrac><msub><mi>&lambda;</mi><mn>3</mn></msub><mn>2</mn></mfrac><mrow><mo>(</mo><munder><mi>&Sigma;</mi><mrow><msubsup><mi>f</mi><mi>i</mi><mi>a</mi></msubsup><mo>&Element;</mo><msup><mi>G</mi><msub><mi>f</mi><mi>i</mi></msub></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow></mrow></munder><mo>|</mo><mo>|</mo><msub><mi>x</mi><mrow><msubsup><mi>f</mi><mi>i</mi><mi>a</mi></msubsup><mo>,</mo><mi>i</mi></mrow></msub><mo>|</mo><msup><mo>|</mo><mn>2</mn></msup><mo>+</mo><munder><mi>&Sigma;</mi><mrow><msubsup><mi>n</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mi>b</mi></msubsup><mo>&Element;</mo><msup><mi>G</mi><msub><mi>n</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow></mrow></munder><mo>|</mo><mo>|</mo><msub><mi>Y</mi><mrow><msubsup><mi>n</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mi>b</mi></msubsup><mo>,</mo><mi>j</mi></mrow></msub><mo>|</mo><msup><mo>|</mo><mn>2</mn></msup><mo>)</mo></mrow></mrow></mtd></mtr></mtable><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA00009737135000000214.GIF" wi="1415" he="343" /></maths>步骤7、利用随机梯度下降法计算获得所述第i个用户U<sub>i</sub>对所有项目使用次数的偏移量b<sub>i</sub>、第j个项目I<sub>j</sub>在使用次数上的偏移量b<sub>j</sub>、第j个项目I<sub>j</sub>的隐特征向量q<sub>j</sub>、第i个用户U<sub>i</sub>的隐偏好向量p<sub>i</sub>、第i个用户U<sub>i</sub>对第l个使用过的项目的权重w<sub>i,l</sub>、第i个用户U<sub>i</sub>与第i个用户U<sub>i</sub>的所有好友f<sub>i</sub>中第a个好友的亲密度<img file="FDA0000973713500000031.GIF" wi="115" he="63" />表示第j个项目I<sub>j</sub>的频繁二项集中第b个项目与第j个项目I<sub>j</sub>之间支持度<img file="FDA0000973713500000032.GIF" wi="119" he="77" />从而获得第i个用户U<sub>i</sub>对第j个项目I<sub>j</sub>的预测使用次数<img file="FDA0000973713500000033.GIF" wi="91" he="79" />进而获得第i个用户U<sub>i</sub>对所有项目I的预测使用次数;步骤8、对第i个用户U<sub>i</sub>对所有未使用的项目I'的预测使用次数进行降序排序,选取前N的项目推荐给第i个用户U<sub>i</sub>;从而获得第i个用户U<sub>i</sub>的推荐结果。
地址 230009 安徽省合肥市包河区屯溪路193号