皮尔逊相关系数应用

Categories: 机器学习
Comments: 1 Comment
Published on: 2012 年 07 月 30 日

1、简介:

皮尔逊积矩相关系数(英语:Pearson product-moment correlation coefficient,又称作 PPMCC或PCCs[1], 用r表示)。该系数是判断两组数据于某一直线拟合程度的一种度量。如下图中的直线:

图表示两个人对同一部电影的评分坐标分布。这个直线尽可能的离所有的点都近。可以简单设想,如果两个人完全趣味相同,则所有点都应该在一条直线上,这时候相关度值为1。

2、定义:

两个变量之间的协方差和标准差的商。

3、计算公式:

这里我们给出我们程序要用到的最终公式,推导过程不再赘述,详细请看wiki这里

 r_{xy}=\frac{\sum x_iy_i-n \bar{x} \bar{y}}{(n-1) s_x s_y}=\frac{n\sum x_iy_i-\sum x_i\sum y_i} {\sqrt{n\sum x_i^2-(\sum x_i)^2}~\sqrt{n\sum y_i^2-(\sum y_i)^2}}.

4、应用于推荐系统的原理:

在用户对一个事物进行评价的时,可能有的人评分标准松散,可能对差不多的东西都会给较高分数;而有些用户恰恰相反,对任何东西评分都比较苛刻。皮尔逊相关性正好合适这样的情况出现,能够很好的解决“夸大(小)分值(grade inflation)”。即不管拟合的直线斜率如何大或者如何小,只要直线对坐标轴上的点有较好的拟合,则就说明两个用户有较大相似性。

 

5、代码实现:

View Code PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def sim_pearson(prefs,p1,p2):
    si={}
    for item in prefs[p1]: 
        if item in prefs[p2]: si[item]=1
    n=len(si)
    if n==0: return 0
    sum1=sum([prefs[p1][it] for it in si])
    sum2=sum([prefs[p2][it] for it in si])
    sum1Sq=sum([pow(prefs[p1][it],2) for it in si])
    sum2Sq=sum([pow(prefs[p2][it],2) for it in si]) 
    pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])
    num=pSum-(sum1*sum2/n)
    den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))
    if den==0: return 0
    r=num/den
    return r

我猜你可能也喜欢:

1 Comment - Leave a comment
  1. amber说道:

    哈哈,其实就是相关系数。概率课本有介绍。

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


Welcome , today is 星期二, 2017 年 10 月 24 日