对Mahout_"推荐算法"的初步认识(5)_研讨篇
来源:互联网 发布:java类声明 编辑:程序博客网 时间:2024/06/05 10:37
声明:本博客是在鄙人学习中遇到的一个问题,欢迎大家积极参与讨论,期望大神指导!
在研究利用余弦相似度计算基于用户(user-based)的推荐算法实现上,看到吉林大学杨博(博导)老师发表的《推荐算法综述》文章中对于该算法的描述中,提到了这样一个举例:
------------------------------------------------------------------------------------------------------------
首先给出用户-项目评分矩阵:
如上表格所示,每一个用户User都有6维的数据Item,题目要求利用余弦相似性计算基于用户的推荐算法,来计算U1对I3的评分。
注释一下:用pij表示表格中用户Ui对项目Ij的评分。(为了便于描述和分析,这个pij的定义和杨老师文中的规定是一致的)
(1)杨老师的计算过程:
用余弦相似度计算出U1与其他用户的相似度
sim(U1,U2) =【(p11*p21)+(p12*p22)】 / 【根号下(p11平方+p12平方)*根号下(p21平方+p22平方)】=【(4*3)+(3*2)】/ 【根号下(16+9)*根号下(9+4)】= 0.998
同理可得:sim(U1,U3) = 0,sim(U1,U4) = 1,sim(U1,U5) = 0.894
从而可以计算p13 = 【sim(U1,U2)p23+sim(U1,U3)p33+sim(U1,U4)p43】/【sim(U1,U2)+sim(U1,U3)+sim(U1,U4)】= 【0.998*2+0*2+0.894*3】/【0.998+0.894】= 2.5 (确切数值是2.4725)
(2)我的分析:
我刚刚开始研究这个领域,作为菜鸟确实不太懂,但是抱着严谨的学术态度我还是反复查阅了各种资料。根据我的理解,我认为余弦相似性的计算是基于对多维空间中两个向量的夹角来确认两个向量的相似性的,而在杨老师的计算中,明显忽略了I3到I6的数据,这是我十分困惑的!因为其一,根据定义,I1~I6描述了一个用户在6维空间的向量(像U1那样空缺的位置我会认为它I4~I6数据是0),那么如果像杨老师计算的那样,U1和U2就被视为了两个二维空间,也就是平面上的向量,这样计算出来的数据显然和6维空间计算出来的两个向量之间的夹角是不同的,那么得到的相似性就会有明显的误差。而其二,懂得概率论和数理统计的人都明白,数据越多计算越准确,抛弃了三分之二的数据很可能给计算结果带来巨大误差。
(3)我的计算过程:
sim(U1,U2) =【(p11*p21)+(p12*p22)+0+0+0】 / 【根号下(p11平方+p12平方)*根号下(p21平方+p22平方+p41平方+p51平方+p61平方)】=【(4*3)+(3*2)+0+0+0】/ 【根号下(16+9)*根号下(9+4+4+16+16+4)】= 0.495
同理可得:sim(U1,U3) = 0,sim(U1,U4) = 0.630,sim(U1,U5) = 0.836
(这里我说明一下,我认为是没有必要算sim(U1,U5)的,因为U5在 I3项目上没有评分,可以直接忽略)
从而可以计算p13 = 【sim(U1,U2)p23+sim(U1,U3)p33+sim(U1,U4)p43】/【sim(U1,U2)+sim(U1,U3)+sim(U1,U4)】= 【0.495*2+0*2+0.630*3】/【0.495+0+0.630】= 2.6 (确切数值是2.5625)
(4)综述:
通过对上面问题的描述和展示的计算过程,相信大家已经明白了我遇到的困惑。通过上面的数据我们可以看到,根据2维向量计算出来的相似度和6维向量计算出来的相似度确实有不同,而且对最终的推荐算法的结果产生了影响,一个是2.4725,一个是2.5625,我们可以设想到,如果词频向量的维数更多,那么很有可能在这两种计算方法中得到的结果产生更大的差距。我不太理解为什么杨老师在文章中可以将后面的维数忽略掉,而杨老师的文章中并没有提及这个问题,所以我很困惑,希望得到大家的分析和指导。
(5)声明:
对Mahout下推荐算法这一块的研究我是这前天刚开始的,个人想法十分不成熟,仅仅是学术讨论,如果我对余弦相似性的理解和运用有什么问题,欢迎大家提出批评和指导。
如果有任何资料也欢迎发邮件给我:1527606437@qq.com
尊重版权!本文参考文献有:
1、《推荐算法综述》 http://www.doc88.com/p-980349680491.html
- 对Mahout_"推荐算法"的初步认识(5)_研讨篇
- 对Mahout_“推荐算法”的初步认识(3)
- 对Mahout_"推荐算法"的初步认识(4)
- 对Mahout_"推荐算法"的初步认识(6)
- 对于Mahout_“推荐算法”的初步认识(1)
- 对于Mahout__"推荐算法"的初步认识(2)
- 对jQuery的初步认识
- 对进程的初步认识
- 对软件工程的初步认识.
- 对JSON的初步认识
- 对tapestrys的初步认识
- 对嵌入式的初步认识
- 对表单初步的认识
- 对CSS的初步认识
- 初步对linux的认识
- 对spring的初步认识
- 关于cgi的初步认识推荐两篇博文
- 纸上谈兵(一)--对产品运营的初步认识
- eclipse中的Java文件自动根据svn版本号生成注释
- abercrombie online italia the Japanese steel powerless because of the lack of new stadiums
- 杭电acm1008 hdu-acm-1008解题报告
- (c语法百题16)一元二次方程的实数根
- vetement hollister pas cher Sharon
- 对Mahout_"推荐算法"的初步认识(5)_研讨篇
- MD5 加密方法
- basket nike tn pas cher or with a towel
- Cocos2d-x 3.0心得(05)-音效管理
- Ray Ban France the captain closed the door after five people blocking up the plane took off more th
- 数据结构:点对之间最短距离--Floyd算法
- 冒泡排序
- Android 横竖屏的锁定
- WiFi Display