随笔 - 224  文章 - 41  trackbacks - 0
<2012年12月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

享受编程

常用链接

留言簿(11)

随笔分类(159)

随笔档案(224)

文章分类(2)

文章档案(4)

经典c++博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜

皮尔逊公式

前言

在很多推荐算法的地方,涉及到了很多关于数学的公式,如果简单的应用这些公式,那当然较为的简单,当如果有真正的理解这些公式里面隐含着的道理那就要下一定的苦功夫。

我们这里不从皮尔逊的公式讲起,我们从物物的推荐开始。

问题

这里以音乐的推荐为例子,对于音乐的推荐很多人都在做,比较好解释清楚。给你一首歌曲让你推荐10首相识的歌曲。推荐的数据来源是这样子的。每个人都会通过搜索歌曲来听他们自己喜欢的歌曲。这样歌曲就能有一些相关的特性了,关于数据的问题我们等下再进一步的说明。

如果我们不按数学的方法来思考这个问题的话,平常的人我们会怎样来解决这个问题呢?我们是这样想的,某一首音乐,他会存在不同的用户中,如果这些用户也存在着某些歌曲,我们就可以计算这首歌曲中在不同的用户中还存在了多少歌曲,这些歌曲的个数是多少,就可以有一个排序,这就是我们要的相识歌曲。

我们简单的用数学来描述一下:

假设有两个人甲,乙,三首歌曲A B C,如果甲有这首歌就标记为1,没有的话就标记为零

   A B C

甲 1 1 1

乙 0 1 0 

按照我们的算法

在甲用户中

Dict[A][B]=1,Dict[A][C]=1

乙用户没有A

这样歌曲A和B、C都相识,而且相识度都一样为1。眨眼看上去这种算法,很完美,非常的完美,因为平时我们聊起推荐系统的时候,时不时的一开口就让你这样做了。真的无懈可击了当然不是这样,让我们再看一次数据,你会发现,其实A,C    的数据是一样一样的,理论上我们会觉得A,跟C的相识度是最高的,但是他的相识度却和B一样,这开起来是不合理的,但这是为什么呢。

 


改进

回想一下如果进一步的假设,用1来标记喜欢,用0来标记不喜欢的话,我们这一种算法其实是没有考虑不喜欢这个因素的。很多人都认为不能这样假设,我告诉你,其实这是数据的问题,如果我们把使用的数据能够满足这里的假设,完全是可以采用的。

这里我想说的是,我并不认为我们使用的第一个算法,有多大的问题,只是想说的是,这种算法还不完美,还可以有改进的空间,这不就是我们一直所拥有的理念,把事情改变的更好。

进一步的再说:如果我们的数据不仅是1和0呢,用户对歌曲有打分了,怎么办呢?

  A B C

甲 3 4 3

乙 0 2 0

当然很多人会说,算法也可以哦,字典里的数据跟着变Dict[A][B]=3,Dict[A][C]=3,但是有个问题不知道有没有注意到,每个人对打分的理解是不一样的,有的人觉得3分就是很好听的歌曲,而有的人要觉得4分才是很好听的歌曲,也就是说,每个人打分的标准不一样,导致了打出的分数和比人比较的时候是不一样的,但自己的标准大部分的时间是不会变的。

皮尔逊公式

这里我们需要一种算法。能够概括这些情况的。这就是皮尔逊公式。

假设有两个变量X、Y,那么两变量间的皮尔逊相关系数可通过以下公式计算:

公式一:

 

皮尔逊相关系数计算公式

公式二:

 

皮尔逊相关系数计算公式

公式三:

 

皮尔逊相关系数计算公式

公式四:

 

皮尔逊相关系数计算公式

 

以上列出的四个公式等价,其中E是数学期望,cov表示协方差,N表示变量取值的个数。

皮尔逊算法过于复杂,如果要有点理解的话,可以使用把维数降到二维,这样就跟余弦定理有点相识了,相识度就是两条直线的夹角,角度为0的时候,皮尔逊的值为1,就是最相识的,如果角度为180度,代表两个牛马不相干,皮尔逊的值为-1。


总结

很多时候,以前牛逼的数学家已经给了我们很多很好用的数学公式,只是如果没有真正去用过的话,我们并不知道他所涉及的原理。好好的研究数学公式,他会给给我们的算法带来一定的优化作用。关于公式的优化比较难了,以前的数学家给了我们很多的想法,而能够优化的就是我们的数据,如何取数据,这里主要的是,那个数据离用户的行为越近,离你使用的数学模型越近,那个数据就越好用。

参考:

http://lobert.iteye.com/blog/2024999

http://zh.wikipedia.org/wiki/%E7%9A%AE%E5%B0%94%E9%80%8A%E7%A7%AF%E7%9F%A9%E7%9B%B8%E5%85%B3%E7%B3%BB%E6%95%B0

posted on 2014-07-23 16:08 漂漂 阅读(3046) 评论(1)  编辑 收藏 引用

FeedBack:
# re: 你应该知道的推荐算法--皮尔逊公式介绍和意义 2016-08-12 14:21 是是是
鄂尔泰没看够  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理