zoukankan      html  css  js  c++  java
  • python相关系数

    皮尔逊相关系数:

    用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。

    几组的点集,以及各个点集中之间的相关系数。我们可以发现相关系数反映的是变量之间的线性关系和相关性的方向(第一排),而不是相关性的斜率(中间),也不是各种非线性关系(第三排)。请注意:中间的图中斜率为0,但相关系数是没有意义的,因为此时变量是0。

    它的几何意义,就是夹角的余弦值:

    下面是python的程序实现:

    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])
        sumofy2 = sum([pow(j,2) for j in y])
        num=sumofxy-(float(sum1)*float(sum2)/n)
        #计算皮尔逊相关系数
        den=sqrt((sumofx2-float(sum1**2)/n)*(sumofy2-float(sum2**2)/n))
        return num/den

     上面的程序是根据下面的公式推导得到的:

    但是这个程序在输入

        x = [1,2,3,4]
        y = [1,1,1,1] 

    时会出现问题:分母会有0的出现(橘色方框部分就是0)

    报错:ZeroDivisionError: float division by zero

    这个是公式的漏洞吗?????

    按理说,完整的相关系数应该考虑到这一点才对。

  • 相关阅读:
    2、MapStruct 深入理解
    1、MapStruct的应用
    Spring中的注解
    java中的三个内置注解
    依赖注入集合属性
    List Set Map的特点
    为类类型的属性依赖注入值
    java常用专业术语
    Bean的作用域范围
    Bean的生命周期
  • 原文地址:https://www.cnblogs.com/chulin/p/9927591.html
Copyright © 2011-2022 走看看