• pandas通过皮尔逊积矩线性相关系数(Pearson's r)计算数据相关性


    皮尔逊积矩线性相关系数(Pearson's r)用于计算两组数组之间是否有线性关联,举个例子:

    a = pd.Series([1,2,3,4,5,6,7,8,9,10])
    b = pd.Series([2,3,4,5,6,7,8,9,10,11])

    计算两组数据的线性相关性,就是,b是否随着a的增长而增长,或者随着a的增长而减小,或者两者不相关:

    皮尔逊积矩线性相关系数的公式是: (标准化数据a * 标准化数据b).mean()

    def correlation(x, y):
        meanX = x.mean()
        deviationX = x.std(ddof=0)
        stardardizedX = (x - meanX) / deviationX
        
        meanY = y.mean()
        deviationY = y.std(ddof=0)
        stardardizedY = (y - meanY) / deviationY
        return (stardardizedX*stardardizedY).mean()

    *注意: 在计算皮尔逊积矩线性相关系数的时候,获取数据标准差时必需添加参数 (ddof=0) 

    关于如何标准化数据,可以参考: numpy数组-标准化数据

    下面以 a b 为例:

    r = correlation(a,b)
    print(r)

    # 1.0

    结果是1.0,说明是正相关的

    修改 a b,查看系数的变化:

     a b负相关:

    a = pd.Series([1,2,3,4,5,6,7,8,9,10])
    b = pd.Series([10,9,8,7,6,5,4,3,2,1])
    r = correlation(a,b)
    print(r)
    
    # -1.0

    让 a b负相关性低一点

    a = pd.Series([1,2,3,4,5,6,7,8,9,10])
    b = pd.Series([10,11,8,7,6,5,4,8,2,1])
    r = correlation(a,b)
    print(r)
    
    # -0.867031357665

    让 a b没有什么相关性:

    a = pd.Series([1,2,3,4,5,6,7,8,9,10])
    b = pd.Series([2,4,1,5,1,3,6,2,7,0])
    r = correlation(a,b)
    0.102336828287

    这里只是随便举几个例子.总之,皮尔逊积矩线性相关系数的范围是-1.0到1.0,如果是正数,就是正相关,负数就是负相关

    如果b完全随着a的增加而增加,就是1.0,反之则是-1.0,越接近于0,两者之间的相关性越小

    http://rpsychologist.com/d3/correlation/

    上面这个网站可以查看数据相关性情况和对应的皮尔逊积矩线性相关系数值

  • 相关阅读:
    6174问题
    阶乘的精确值
    小学生算术
    Primer回顾 数组和指针
    Primer回顾 标准库类型
    绪论
    字符串的存储
    条款39:明智而审慎的使用private继承
    条款34:区分接口继承和实现继承
    条款33:避免遮掩继承而来的名称
  • 原文地址:https://www.cnblogs.com/liulangmao/p/9293822.html
Copyright © 2020-2023  润新知