`

皮尔逊相关系数评价算法(集体智慧编程)

阅读更多

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

 


如图,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

 

注:还有许多方法可以衡量两组数据间的相似程度,使用哪一种方法最优,完全取决于具体的应用。

 

 

  • 大小: 11.5 KB
  • 大小: 1.2 KB
  • 大小: 1.1 KB
  • 大小: 835 Bytes
  • 大小: 1.3 KB
1
1
分享到:
评论

相关推荐

    皮尔逊算法--java 和python 版

    这个压缩包文件包含了皮尔逊算法的Java和Python实现版本,意味着我们可以用这两种流行的编程语言来计算两个变量之间的相关性。 皮尔逊相关系数的计算基于协方差和标准差,公式如下: \[ r = \frac{\sum{(x_i - \bar...

    JAVA实现基于皮尔逊相关系数的相似度详解

    文章还提到了对书籍《集体智慧编程》的一些看法,指出了书中的一个不足之处,就是它没有详细解释算法背后的数学原理,而是直接从代码实现的角度去介绍机器学习算法。因此作者想通过写文章的方式,来对机器学习中的...

    js皮尔逊算法 2021

    总的来说,JavaScript实现的皮尔逊相关系数算法可以帮助开发者分析数据相关性,尤其在网页应用中结合jQuery进行数据获取和处理。在`Model.cshtml`文件中,这一算法可能被用作分析模型数据的一部分,以提供更深入的...

    旅游网站,springboot20,前端页面+后台代码,皮尔逊相关系数的相似度算法(Pearson)tourismPro.zip

    前端技术: ... CSS :用于设计网页外观和样式的样式表语言。 JavaScript:用于在网页上实现交互性和动态效果的脚本语言。...Ruby on Rails:一个基于Ruby编程语言的Web应用框架,提供了高效的开发工具。

    基于相关系数的分形图像压缩算法

    本文将详细介绍一种基于相关系数的分形图像压缩算法,并通过MATLAB编程实现。 #### 二、基本原理 分形图像压缩的基本思想是利用图像中的自相似性,通过寻找图像块之间的相似性来达到压缩的目的。该算法主要包括两...

    数据挖掘-基于用户的协同过滤算法实现电影推荐-皮尔逊系数和欧氏距离

    在电影推荐中,如果两个用户对相同电影的评分接近,皮尔逊系数会接近1,表示强正相关;如果评分相反,接近-1,表示强负相关;若评分无明显规律,系数接近0,表示无关。在Python中,可以使用`scipy.stats.pearsonr`...

    相关系数计算

    在"编程练习"中,你可能会遇到如何读取数据文件、组织数据结构、实现相关系数计算算法以及输出结果等挑战。通过这样的实践,不仅可以提升编程技能,还能深入理解统计学概念,这对于任何数据相关的IT工作都是宝贵的...

    MATLAB源码集锦-基于EDA算法的综合评价代码

    再者,EDA还可能涉及到相关性分析,例如计算皮尔逊相关系数、斯皮尔曼等级相关等,以探究变量间的关联性。MATLAB的corrcoef和spearmanr函数可以完成这些任务,源码中可能包含这些函数的调用和结果解释。 此外,可能...

    matlab算法源码MATLAB实现线性拟合和相关系数源码

    线性拟合旨在找到一条最佳的直线方程来表达两个变量之间的线性关系,而相关系数(如皮尔逊相关系数)用于衡量两个变量之间线性关系的强度和方向。 在MATLAB环境下,实现线性拟合和计算相关系数的源码可以帮助工程师...

    计算数组的相关系数

    在本案例中,"计算数组的相关系数"指的是通过特定算法处理两个数值数组,以确定它们之间的关联强度。 计算相关系数的方法最常见的是皮尔逊积矩相关系数(Pearson correlation coefficient),它是基于两个数组的...

    matlab实现基于项目的算法

    2. **构建物品相似度矩阵**:使用物品之间的相似度度量(如余弦相似度、皮尔逊相关系数等)来构建一个矩阵,矩阵的每个元素表示两部电影之间的相似程度。 3. **预测评分**:对于每个用户和未评分的电影,根据该用户...

    大数据应用-基于大数据的推荐算法研究.pptx

    为了提高效率,论文提出了TopKS算法,该算法利用余弦距离和皮尔逊相关系数的累加性特点,并引入倒排索引数据结构,结合TopK思想来快速找出与目标用户最相似的K个用户。TopKS算法的实现包括三个核心部分:余弦距离...

    11.rar_MATLAB 相关系数_image noise variance_matlab csf_相关系数_相关系数 mat

    在给定的“11.rar”压缩包中,包含了与MATLAB编程相关的资源,特别是针对信息隐藏和相关系数计算的应用。下面将详细解释这些概念及其重要性。 首先,MATLAB是一种广泛使用的数值计算和数据分析软件,它提供了丰富的...

    计算RGB相关系数.zip

    具体实现时,我们可以遍历图像中的每一个像素点,分别提取R、G、B三个通道的值,然后使用皮尔逊相关系数公式来计算任意两个通道之间的相关性: \[ r_{xy} = \frac{\sum_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})}{\sqrt...

    最小二乘法匹配,matlab代码,相关系数最大,单点最小二乘匹配.zip

    5. **相关系数计算**:计算映射后数据集的皮尔逊相关系数,验证匹配效果。 6. **结果可视化**:可能包括原始数据、匹配后的数据以及匹配点的高亮显示,以直观展示匹配效果。 理解并运用这些MATLAB代码,可以帮助你...

    图像的MSCN系数计算

    - 相关性分析:使用`corrcoef`函数计算不同尺度图像通道的皮尔逊相关系数。 - MSCN系数计算:将相关系数转换为MSCN系数,这可能涉及归一化或其他转换操作。 - 频数统计与曲线绘制:使用`histcounts`或`histogram`...

    皮尔逊-Ⅲ型分布 预测洪水

    例如,FORTRAN POWERSTATION编程环境被用于编写核心算法,同时利用Fortran-LISP接口实现自动化绘图功能。这一过程不仅涉及水文数据分析,还涵盖了计算数学和计算机图形学等领域知识,充分展示了跨学科合作的重要性。...

    利用相关系数匹配法完成左右相片的影像匹配

    3. **相关系数计算**:计算搜索窗口与右影像对应区域的灰度共生矩阵,然后计算它们的皮尔逊相关系数。相关系数值越接近1,表示两个区域的灰度分布越相似。 4. **匹配点确定**:选取相关系数最大的位置作为匹配点。...

    C#的皮尔逊Ⅲ型曲线计算

    在C#编程环境下,我们可以利用数学库或自定义算法来实现皮尔逊Ⅲ型曲线的计算。 皮尔逊Ⅲ型曲线具有对称性,并且可以根据三个参数进行完全描述:均值(μ)、标准差(σ)和形状因子(κ)。这些参数使得P-Ⅲ分布...

    测量给定数据集相关性的算法类似于Reddit

    在JavaScript中,计算相关性的基础方法包括皮尔逊相关系数(Pearson Correlation Coefficient)、斯皮尔曼等级相关(Spearman's Rank Correlation)和肯德尔秩相关(Kendall's Tau)。这些统计学方法可以帮助我们...

Global site tag (gtag.js) - Google Analytics