皮尔逊相关系数是比欧几里德距离更加复杂的可以判断人们兴趣的相似度的一种方法。该相关系数是判断两组数据与某一直线拟合程序的一种试题。它在数据不是很规范的时候,会倾向于给出更好的结果。
如图,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
注:还有许多方法可以衡量两组数据间的相似程度,使用哪一种方法最优,完全取决于具体的应用。
相关推荐
皮尔逊相关系数 适合评价相应数据的相关性
皮尔逊相关系数简介和相应计算工具皮尔逊相关系数简介和相应计算工具皮尔逊相关系数简介和相应计算工具皮尔逊相关系数简介和相应计算工具皮尔逊相关系数简介和相应计算工具皮尔逊相关系数简介和相应计算工具皮尔逊...
matlab计算皮尔逊相关系数、斯皮尔曼相关系数、正态分布检验
python程序计算皮尔逊相关系数、最大信息系数以及灰色关联度
电影推荐基于用户的协同过滤算法java实现示例,皮尔逊相关系数算法 基于用户的协同过滤算法,基本思想为当需要根据一个用户的信息对他进行针对性的推荐时,可以从用户库中计算出该用户的最邻用户,也就是信息、喜好...
皮尔逊-III相关\皮尔逊相关系数的java实现.docx
皮尔逊相关系数(带实例) 皮尔逊相关系数是用来衡量两个变量之间线性相关程度的一个统计量,取值范围为[-1,1]。 当皮尔逊系数值为1时,表示两个变量完全正相关;当皮尔逊系数值为-1时,表示两个变量完全负相关;而...
基于拥挤距离和皮尔逊相关系数的特征提取算法Matlab
本文综合网上多篇文章总结了计算变量相关性的三个主要参数的参数,包括皮尔逊相关系数、距离相关以及最大信息系数的介绍。
先定义欧几里得距离函数;先定义皮尔逊系数函数,利用for循环把皮尔逊系数公式的各个组成部分算出来,计算皮尔逊系数,调用函数计算皮尔逊系数。
皮尔逊相关系数
在统计学中,皮尔逊相关系数( Pearson correlation coefficient),又称皮尔逊积矩相关系数(Pearson product-moment correlation coefficient,简称 PPMCC或PCCs),是用于度量两个变量X和Y之间的相关(线性相关)...
相关性算法----皮尔逊算法的实现,内涵java实现版本和python实现版本,已测。
皮尔逊相关系数
斯皮尔曼相关性,斯皮尔曼系数一般有两个公式,由排行差分集合d计算而得(公式一)由排行集合x、y计算而得(斯皮尔曼等级相关系数同时也被认为是经过排行的两个随机变量的皮尔逊相关系数,以下实际是计算x、y的...
皮尔逊相关系数
皮尔逊相关系数
LABVIEW 皮尔逊 相关系数子VI
Google Earth Engine(GEE)——多景影像合成后利用for循环进行皮尔逊相关系数的计算 上一篇文章讲了关于单景影像的波段运算,并没有利用多景影像的波段循环计算,这次我们利用for循环进行多个影像的相关系数计算,...