发明名称 一种基于Hadoop平台的电影推荐方法
摘要 本发明涉及一种基于Hadoop平台的电影推荐方法,包括:对原数据集进行预处理,建立新的用户项目数据集;在Hadoop平台上采用基于评分倾向的双重预测方法对数据集中的空缺值进行填充,形成高密度的用户‑电影数据集;在Hadoop平台上,数据集进行分布式聚类,得到若干聚类单元,再训练分类器,进行分类;形成推荐列表。本发明不仅具有较好的推荐准确度,同时有效减少推荐时间,可以良好地应用于大规模电影信息推荐场景。
申请公布号 CN106407379A 申请公布日期 2017.02.15
申请号 CN201610819073.2 申请日期 2016.09.13
申请人 天津大学 发明人 王宝亮;郭宁宁;常鹏;刘青竹
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 天津市北洋有限责任专利代理事务所 12201 代理人 程毓英
主权项 一种基于Hadoop平台的电影推荐方法,包括下列步骤:步骤1.对原数据集进行预处理,建立新的用户项目数据集:获取用户‑电影数据集,经过预处理后,形成新的用户项目数据集,并将数据集存储在Hadoop平台的HDFS分布式系统上,每个用户的数据作为一个单独的split;步骤2.在Hadoop平台上采用基于评分倾向的双重预测方法对数据集中的空缺值进行填充,形成高密度的用户‑电影数据集:引入用户评分倾向公式(1),电影评分倾向公式(2),然后进行双重预测评分,对于某电影,如果有最近邻电影,且最近邻无空缺,则作为填充数据;如果数据空缺,则用电影的若干近邻和用户的若干近邻加权求得的结果进行填充,如公式(3)、(4)所示:<maths num="0001"><math><![CDATA[<mrow><mi>s</mi><mi>i</mi><mi>m</mi><mrow><mo>(</mo><msub><mi>u</mi><mi>a</mi></msub><mo>,</mo><msub><mi>u</mi><mi>b</mi></msub><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><msub><mo>&Sigma;</mo><mrow><mi>i</mi><mo>&Element;</mo><msub><mi>I</mi><mrow><mi>a</mi><mi>b</mi></mrow></msub></mrow></msub><mrow><mo>(</mo><mn>1</mn><mo>-</mo><mfrac><mrow><mo>|</mo><msub><mi>r</mi><mrow><mi>a</mi><mi>i</mi></mrow></msub><mo>-</mo><msub><mi>r</mi><mrow><mi>b</mi><mi>i</mi></mrow></msub><mo>|</mo></mrow><mi>k</mi></mfrac><mo>)</mo></mrow></mrow><mrow><msub><mi>I</mi><mi>a</mi></msub><mo>&cup;</mo><msub><mi>I</mi><mi>b</mi></msub></mrow></mfrac><mfrac><mrow><msub><mo>&Sigma;</mo><mrow><mi>i</mi><mo>&Element;</mo><msub><mi>I</mi><mrow><mi>a</mi><mi>b</mi></mrow></msub></mrow></msub><mrow><mo>(</mo><msub><mi>r</mi><mrow><mi>a</mi><mi>i</mi></mrow></msub><mo>-</mo><mover><msub><mi>r</mi><mi>a</mi></msub><mo>&OverBar;</mo></mover><mo>)</mo></mrow><mo>&CenterDot;</mo><mrow><mo>(</mo><msub><mi>r</mi><mrow><mi>b</mi><mi>i</mi></mrow></msub><mo>-</mo><mover><msub><mi>r</mi><mi>b</mi></msub><mo>&OverBar;</mo></mover><mo>)</mo></mrow></mrow><mrow><msqrt><mrow><msub><mo>&Sigma;</mo><mrow><mi>i</mi><mo>&Element;</mo><msub><mi>I</mi><mrow><mi>a</mi><mi>b</mi></mrow></msub></mrow></msub><msup><mrow><mo>(</mo><msub><mi>r</mi><mrow><mi>a</mi><mi>i</mi></mrow></msub><mo>-</mo><mover><msub><mi>r</mi><mi>a</mi></msub><mo>&OverBar;</mo></mover><mo>)</mo></mrow><mn>2</mn></msup></mrow></msqrt><msqrt><mrow><msub><mo>&Sigma;</mo><mrow><mi>i</mi><mo>&Element;</mo><msub><mi>I</mi><mrow><mi>a</mi><mi>b</mi></mrow></msub></mrow></msub><msup><mrow><mo>(</mo><msub><mi>r</mi><mrow><mi>b</mi><mi>i</mi></mrow></msub><mo>-</mo><mover><msub><mi>r</mi><mi>b</mi></msub><mo>&OverBar;</mo></mover><mo>)</mo></mrow><mn>2</mn></msup></mrow></msqrt></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0001113661310000011.GIF" wi="1308" he="191" /></maths>其中,u<sub>s</sub>表示用户a,u<sub>b</sub>表示用户b,其中l<sub>s</sub>表示电影a,u<sub>b</sub>表示电影b;<img file="FDA0001113661310000012.GIF" wi="538" he="74" />表示用户a和用户b的共同评分集,r<sub>ai</sub>和r<sub>bi</sub>分别表示用户u<sub>a</sub>和u<sub>b</sub>对项目i的评分值,<img file="FDA0001113661310000013.GIF" wi="48" he="60" />表示用户u<sub>a</sub>的评分均值,<img file="FDA0001113661310000014.GIF" wi="47" he="59" />表示用户u<sub>b</sub>的评分均值,sim(u<sub>a</sub>,u<sub>b</sub>)表示两个用户间的评分倾向;<maths num="0002"><math><![CDATA[<mrow><mi>s</mi><mi>i</mi><mi>m</mi><mrow><mo>(</mo><msub><mi>I</mi><mi>a</mi></msub><mo>,</mo><msub><mi>I</mi><mi>b</mi></msub><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><msub><mo>&Sigma;</mo><mrow><mi>u</mi><mo>&Element;</mo><msub><mi>u</mi><mrow><mi>a</mi><mi>b</mi></mrow></msub></mrow></msub><mrow><mo>(</mo><mn>1</mn><mo>-</mo><mfrac><mrow><mo>|</mo><msub><mi>r</mi><mrow><mi>u</mi><mi>a</mi></mrow></msub><mo>-</mo><msub><mi>r</mi><mrow><mi>u</mi><mi>b</mi></mrow></msub><mo>|</mo></mrow><mi>k</mi></mfrac><mo>)</mo></mrow></mrow><mrow><msub><mi>U</mi><mi>a</mi></msub><mo>&cup;</mo><msub><mi>U</mi><mi>b</mi></msub></mrow></mfrac><mfrac><mrow><msub><mo>&Sigma;</mo><mrow><mi>u</mi><mo>&Element;</mo><msub><mi>U</mi><mrow><mi>a</mi><mi>b</mi></mrow></msub></mrow></msub><mrow><mo>(</mo><msub><mi>r</mi><mrow><mi>u</mi><mi>a</mi></mrow></msub><mo>-</mo><mover><msub><mi>r</mi><mi>u</mi></msub><mo>&OverBar;</mo></mover><mo>)</mo></mrow><mo>&CenterDot;</mo><mrow><mo>(</mo><msub><mi>r</mi><mrow><mi>u</mi><mi>b</mi></mrow></msub><mo>-</mo><mover><msub><mi>r</mi><mi>u</mi></msub><mo>&OverBar;</mo></mover><mo>)</mo></mrow></mrow><mrow><msqrt><mrow><msub><mo>&Sigma;</mo><mrow><mi>u</mi><mo>&Element;</mo><msub><mi>U</mi><mrow><mi>a</mi><mi>b</mi></mrow></msub></mrow></msub><msup><mrow><mo>(</mo><msub><mi>r</mi><mrow><mi>u</mi><mi>a</mi></mrow></msub><mo>-</mo><mover><msub><mi>r</mi><mi>a</mi></msub><mo>&OverBar;</mo></mover><mo>)</mo></mrow><mn>2</mn></msup></mrow></msqrt><msqrt><mrow><msub><mo>&Sigma;</mo><mrow><mi>u</mi><mo>&Element;</mo><msub><mi>U</mi><mrow><mi>a</mi><mi>b</mi></mrow></msub></mrow></msub><msup><mrow><mo>(</mo><msub><mi>r</mi><mrow><mi>u</mi><mi>b</mi></mrow></msub><mo>-</mo><mover><msub><mi>r</mi><mi>b</mi></msub><mo>&OverBar;</mo></mover><mo>)</mo></mrow><mn>2</mn></msup></mrow></msqrt></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0001113661310000015.GIF" wi="1420" he="190" /></maths>sim(I<sub>a</sub>,I<sub>b</sub>)分别表示两个用户间和两个电影间的评分倾向,<img file="FDA0001113661310000016.GIF" wi="586" he="74" />表示对电影a和电影b共同评分的用户集,r<sub>ua</sub>和r<sub>ub</sub>分别表示用户对电影a和b的评分值,<img file="FDA0001113661310000017.GIF" wi="45" he="53" />表示用户的评分均值;<img file="FDA0001113661310000018.GIF" wi="962" he="205" /><img file="FDA0001113661310000019.GIF" wi="411" he="75" />N<sub>i</sub>表示电影i的最近邻项目集,pr<sub>bi</sub>表示基于电影的评分预测值;<maths num="0003"><math><![CDATA[<mrow><msub><mi>pr</mi><mrow><mi>b</mi><mi>i</mi></mrow></msub><mo>=</mo><mover><msub><mi>r</mi><mi>a</mi></msub><mo>&OverBar;</mo></mover><mo>+</mo><mfrac><mrow><msub><mi>&Sigma;</mi><mrow><mi>b</mi><mo>&Element;</mo><msub><mi>N</mi><mi>a</mi></msub></mrow></msub><mi>s</mi><mi>i</mi><mi>m</mi><mrow><mo>(</mo><msub><mi>u</mi><mi>a</mi></msub><mo>,</mo><msub><mi>u</mi><mi>b</mi></msub><mo>)</mo></mrow><mo>&CenterDot;</mo><mrow><mo>(</mo><msub><mi>r</mi><mrow><mi>b</mi><mi>i</mi></mrow></msub><mo>-</mo><mover><msub><mi>r</mi><mi>b</mi></msub><mo>&OverBar;</mo></mover><mo>)</mo></mrow></mrow><mrow><msub><mi>&Sigma;</mi><mrow><mi>b</mi><mo>&Element;</mo><mover><msub><mi>N</mi><mi>a</mi></msub><mo>^</mo></mover></mrow></msub><mi>s</mi><mi>i</mi><mi>m</mi><mrow><mo>(</mo><msub><mi>u</mi><mi>a</mi></msub><mo>,</mo><msub><mi>u</mi><mi>b</mi></msub><mo>)</mo></mrow></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA00011136613100000110.GIF" wi="813" he="132" /></maths><img file="FDA00011136613100000111.GIF" wi="427" he="74" />N<sub>a</sub>表示用户a的最近邻用户集,pr<sub>bi</sub>表示基于用户的评分预测值;步骤3.在Hadoop平台上,对步骤2得到的数据集进行分布式聚类,得到若干聚类单元,再训练分类器,进行分类,步骤如下:1)对预测评分后的用户电影矩阵首先进行粗聚类,采用canopy算法,得到聚类的个数K,再引入经典的K‑means算法进行进一步的细聚类,将用户‑电影评分集根据类内方差和最小的原则分为指定的K类;2)采用BP神经网络的建模方法,训练分类器;步骤4.形成推荐列表:目标电影或用户就通过步骤3被分到不同类别,然后在不同类别中进行相似性度量,找到若干最近邻居集形成推荐列表。
地址 300072 天津市南开区卫津路92号