• 皮尔逊积矩相关系数的学习


    皮尔逊积矩相关系数的学习

      做相似度计算的时候经常会用到皮尔逊相关系数(Pearson Correlation Coefficient),那么应该如何理解该系数?其数学本质、含义是什么?

       皮尔逊相关系数理解有两个角度

       一、以高中课本为例,将两组数据首先做Z分数处理之后,然后两组数据的乘积和除以样本数。

       Z分数一般代表正态分布中数据偏离中心点的距离。等于变量减掉平均数再除以标准差。标准差则等于变量减掉平均数的平方和再除以样本数最后再开方。所以我们可以将公式依次精简为:

       

       以下为python的实现:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    from math import sqrt
    #返回p1和p2的皮尔逊相关系数
    def sim_pearson(prefs,p1,p2):
        #得到双方曾评价过的物品列表
        si = {}
        for item in prefs[p1]:
            if item in prefs[p2]:
                si[item] = 1
        #得到列表元素个数
        = len(si)
          
        #如果两者没有共同之处,则返回1
        if not n:
            return  1
          
        #对所有偏好求和
        sum1 = sum([perfs[p1][it] for it in si])
        sum2 = sum([perfs[p2][it] for it in si])
          
        #求平方和
        sum1Sq = sum([pow(prefs[p1][it],2for it in si])
        sum2Sq = sum([pow(prefs[p2][it],2for it in si])
          
        #求乘积之和
        pSum = sum([prefs[p1][it] * prefs[p2][it] for it in si])
          
        #计算皮尔逊评价值
        num = pSum -(sum1 * sum2 / 2)
        den = sqrt((sum1Sq - pow(sum1,2/ n) * (sum2Sq -pow((sum2,2/ 2)))
        if not den:
            return 0
        = num/den
        return r

       二、 按照大学的线性数学水平来理解,它比较复杂一点可以看做是两组数据的向量夹角的余弦。

       

       对于没有中心化的数据, 相关系数与两条可能的回归线y=gx(x) 和 x=gy(y) 夹角的余弦值一致。

       1、n个数值组成的行(x1, x2, x3,… xn)称为n维向量简记为大写字母X

                                                               

               |X| = √x12+x22+x32+…+xn2     定义为向量X的模,向量X与Y的内积为:   X·Y=x1*y1+x2*y2+..xn*yn

        2、向量X及Y的向量夹角余弦按照下式计算:

                                X·Y

               cosθ =                              

                            |X|×|Y|

        3、向量夹角余弦约接近1说明两向量相似度越高。

       以下为Python的实现:

    1
    2
    3
    import math,numpy
    def cosine_distance(u, v):
        return numpy.dot(u, v) / (math.sqrt(numpy.dot(u, u)) *math.sqrt(numpy.dot(v, v)))

       从以上解释,也可以理解皮尔逊相关的约束条件:

      • 两个变量间有线性关系

      • 变量是连续变量

      • 变量均符合正态分布,且二元分布也符合正态分布

      • 两变量独立

       在实践统计中一般只输出两个系数,一个是相关系数也就是计算出来的相关系数大小(在-1到1之间),另一个是独立样本检验系数,用来检验样本一致性。

  • 相关阅读:
    python抢票开发——设备预约助手实现
    树莓派的基本网络配置
    python 端口扫描程序
    数据通讯与网络 第五版第24章 传输层协议-TCP协议部分要点
    数据通讯与网络 第五版第24章 传输层协议-UDP协议部分要点
    利用python开发的flappy bird 游戏
    EMACS 快捷键笔记
    python程序中用类变量代替global 定义全局变量
    在树莓派下对多个串口转USB设备进行设备名称绑定操作
    python 编写的经纬度坐标转换类
  • 原文地址:https://www.cnblogs.com/yymn/p/4839122.html
Copyright © 2020-2023  润新知