皮尔逊相关系数

皮尔逊相关系数是比欧几里德距离更加复杂的可以判断人们兴趣的相似度的一种方法。该相关系数是判断两组数据与某一直线拟合程序的一种试题。它在数据不是很规范的时候,会倾向于给出更好的结果。

如图,Mick Lasalle为<<Superman>>评了3分,而Gene Seyour则评了5分,所以该影片被定位中图中的(3,5)处。在图中还可以看到一条直线。其绘制原则是尽可能地靠近图上的所有坐标点,被称为最佳拟合线。如果两位评论者对所有影片的评分情况都相同,那么这条直线将成为对角线,并且会与图上所有的坐标点都相交,从而得到一个结果为1的理想相关度评价。

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

公式一:

皮尔逊相关系数计算公式

公式二:

皮尔逊相关系数计算公式

公式三:

皮尔逊相关系数计算公式

公式四:

皮尔逊相关系数计算公式

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

皮尔逊相关度评价算法首先会找出两位评论者都曾评论过的物品,然后计算两者的评分总和与平方和,并求得评分的乘积之各。利用上面的公式四计算出皮尔逊相关系数。

critics = {‘Lisa Rose‘: {‘Lady in the Water‘: 2.5, ‘Snakes on a Plane‘: 3.5,
                         ‘Just My Luck‘: 3.0, ‘Superman Returns‘: 3.5, ‘You, Me and Dupree‘: 2.5,
                         ‘The Night Listener‘: 3.0},
           ‘Gene Seymour‘: {‘Lady in the Water‘: 3.0, ‘Snakes on a Plane‘: 3.5,
                            ‘Just My Luck‘: 1.5, ‘Superman Returns‘: 5.0, ‘The Night Listener‘: 3.0,
                            ‘You, Me and Dupree‘: 3.5},
           ‘Michael Phillips‘: {‘Lady in the Water‘: 2.5, ‘Snakes on a Plane‘: 3.0,
                                ‘Superman Returns‘: 3.5, ‘The Night Listener‘: 4.0},
           ‘Claudia Puig‘: {‘Snakes on a Plane‘: 3.5, ‘Just My Luck‘: 3.0,
                            ‘The Night Listener‘: 4.5, ‘Superman Returns‘: 4.0,
                            ‘You, Me and Dupree‘: 2.5},
           ‘Mick LaSalle‘: {‘Lady in the Water‘: 3.0, ‘Snakes on a Plane‘: 4.0,
                            ‘Just My Luck‘: 2.0, ‘Superman Returns‘: 3.0, ‘The Night Listener‘: 3.0,
                            ‘You, Me and Dupree‘: 2.0},
           ‘Jack Matthews‘: {‘Lady in the Water‘: 3.0, ‘Snakes on a Plane‘: 4.0,
                             ‘The Night Listener‘: 3.0, ‘Superman Returns‘: 5.0, ‘You, Me and Dupree‘: 3.5},
           ‘Toby‘: {‘Snakes on a Plane‘: 4.5, ‘You, Me and Dupree‘: 1.0, ‘Superman Returns‘: 4.0}}  

from math import sqrt  

def sim_pearson(prefs, p1, p2):
    # Get the list of mutually rated items
    si = {}
    for item in prefs[p1]:
        if item in prefs[p2]:
            si[item] = 1  

    # if they are no ratings in common, return 0
    if len(si) == 0:
        return 0  

    # Sum calculations
    n = len(si)  

    # Sums of all the preferences
    sum1 = sum([prefs[p1][it] for it in si])
    sum2 = sum([prefs[p2][it] for it in si])  

    # Sums of the squares
    sum1Sq = sum([pow(prefs[p1][it], 2) for it in si])
    sum2Sq = sum([pow(prefs[p2][it], 2) for it in si])  

    # Sum of the products
    pSum = sum([prefs[p1][it] * prefs[p2][it] for it in si])  

    # Calculate r (Pearson score)
    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  

print(sim_pearson(critics,‘Lisa Rose‘,‘Gene Seymour‘))
0.396059017191

  

时间: 2024-10-18 03:54:24

皮尔逊相关系数的相关文章

《集体智慧编程》学习记录:欧几里得距离&amp;皮尔逊相关系数

1 critics={'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5,'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5, 'The Night Listener': 3.0}, 2 'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 'J

皮尔逊相关系数(Pearson Collelation coefficient)与余弦相似性的关系

皮尔逊相关系数 维基百科定义:两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商 余弦相似性 皮尔逊相关系数与余弦相似性的关系 皮尔逊相关系数就是减去平均值(中心化)后做余弦相似性

【推荐系统】协同过滤--高度稀疏数据下的数据清理(皮尔逊相关系数)

向量之间的相似度 度量向量之间的相似度方法很多了,你可以用距离(各种距离)的倒数,向量夹角,Pearson相关系数等. 皮尔森相关系数计算公式如下: 分子是协方差,分子是两个变量标准差的乘积.显然要求X和Y的标准差都不能为0. 因为,所以皮尔森相关系数计算公式还可以写成: 当两个变量的线性关系增强时,相关系数趋于1或-1. 用户评分预测 用户评分预测的基本原理是: step1.如果用户i对项目j没有评过分,就找到与用户i最相似的K个邻居(使用向量相似度度量方法) step2.然后用这K个邻居对项

欧几里德距离和皮尔逊相关系数计算方法

欧几里德距离是推荐算法中比较简单的一种,他计算两个用户之间的相似程度其计算方法为,以豆瓣电影为例假设用户A对电影 f1....fn的评价分数分别为 r1....rn用户B对电影 f1....fn的评价分数分别为s1.....sn暂且假设A和B都对这些电影评价过那么用户A和B的欧几里德距离计算方法为先计算A和B的对所有同一部电影的评分的差值的平方和 sum = pow(r1-s1,2)+pow(r2-s2,2)+....+pow(rn-sn,2);然后对sim取平方根值sim = sqrt(sum

皮尔逊相关系数的java实现

相关系数的值介于–1与+1之间,即–1≤r≤+1.其性质如下:当r>0时,表示两变量正相关,r<0时,两变量为负相关.当|r|=1时,表示两变量为完全线性相关,即为函数关系.当r=0时,表示两变量间无线性相关关系.当0<|r|<1时,表示两变量存在一定程度的线性相关.?且|r|越接近1,两变量间线性关系越密切:?|r|越接近于0,表示两变量的线性相关越弱.一般可按三级划分:|r|<0.4为低度线性相关:?0.4≤|r|<0.7为显著性相关:0.7≤|r|<1为高度

皮尔逊相关系数的计算(python代码版)

from math import sqrt def multipl(a,b): sumofab=0.0 for i in range(len(a)): temp=a[i]*b[i] sumofab+=temp return sumofab def corrcoef(x,y): n=len(x) #求和 sum1=sum(x) sum2=sum(y) #求乘积之和 sumofxy=multipl(x,y) #求平方和 sumofx2 = sum([pow(i,2) for i in x]) sum

机器学习笔记——皮尔逊相关系数

在学到相关性度量的时候,有一个系数用来度量相似性(距离),这个系数叫做皮尔逊系数,事实上在统计学的时候就已经学过了,仅仅是当时不知道还能用到机器学习中来,这更加让我认为机器学习离不开统计学了. 皮尔逊相关系数--Pearson correlation coefficient,用于度量两个变量之间的相关性,其值介于-1与1之间,值越大则说明相关性越强. 两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商: 因为μX = E(X), σX2 = E[(X ? E(X))2] = E(

皮尔逊相关系数和余弦相似性的关系

有两篇回答,我觉得都是正确的,从不同的方向来看的. 作者:陈小龙链接:https://www.zhihu.com/question/19734616/answer/174098489来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 先说结论: 皮尔逊相关系数是余弦相似度在维度值缺失情况下的一种改进, 皮尔逊相关系数是余弦相似度在维度值缺失情况下的一种改进, 皮尔逊相关系数是余弦相似度在维度值缺失情况下的一种改进. 楼主如果高中正常毕业, 参加过高考, 那么肯定会这么

皮尔逊相关系数理解

皮尔逊相关系数理解有两个角度 其一, 按照高中数学水平来理解, 它很简单, 可以看做将两组数据首先做Z分数处理之后, 然后两组数据的乘积和除以样本数 Z分数一般代表正态分布中, 数据偏离中心点的距离.等于变量减掉平均数再除以标准差.(就是高考的标准分类似的处理) 标准差则等于变量减掉平均数的平方和,再除以样本数,最后再开方. 所以, 根据这个最朴素的理解,我们可以将公式依次精简为: 其二, 按照大学的线性数学水平来理解, 它比较复杂一点,可以看做是两组数据的向量夹角的余弦. 皮尔逊相关的约束条件