皮尔森相关系数(Pearson correlation coefficient)「建议收藏」

皮尔森相关系数(Pearson correlation coefficient)「建议收藏」概述定义物理意义皮尔森距离机器学习中的应用代码实现概述皮尔森相关系数也称皮尔森积矩相关系数(Pearsonproduct-momentcorrelationcoefficient),是一种线性相关系数,是最常用的一种相关系数。记为r,用来反映两个变量X和Y的线性相关程度,r值介于-1到1之间,绝对值越大表明相关性越强。定义总体相关系数ρ定义为两…

大家好,又见面了,我是你们的朋友全栈君。


概述

皮尔森相关系数也称皮尔森积矩相关系数(Pearson product-moment correlation coefficient) ,是一种线性相关系数,是最常用的一种相关系数。记为r,用来反映两个变量X和Y的线性相关程度,r值介于-1到1之间,绝对值越大表明相关性越强。


定义

总体相关系数ρ定义为两个变量X、Y之间的协方差和两者标准差乘积的比值,如下:
这里写图片描述
估算样本的协方差和标准差,可得到样本相关系数(即样本皮尔森相关系数),常用r表示:
这里写图片描述
r还可以由(Xi,Yi)样本点的标准分数均值估计得到与上式等价的表达式:
这里写图片描述
其中这里写图片描述为Xi样本的标准分数、样本均值和样本标准差,n为样本数量。


物理意义

皮尔森相关系数反映了两个变量的线性相关性的强弱程度,r的绝对值越大说明相关性越强。

  • 当r>0时,表明两个变量正相关,即一个变量值越大则另一个变量值也会越大;
  • 当r<0时,表明两个变量负相关,即一个变量值越大则另一个变量值反而会越小;
  • 当r=0时,表明两个变量不是线性相关的(注意只是非线性相关),但是可能存在其他方式的相关性(比如曲线方式);
  • 当r=1和-1时,意味着两个变量X和Y可以很好的由直线方程来描述,所有样本点都很好的落在一条直线上。

皮尔森距离

通过皮尔森系数定义:
这里写图片描述
皮尔森系数范围为[-1,1],因此皮尔森距离范围为[0,2]。


机器学习中的应用

皮尔森(pearson)相关系数、斯皮尔曼(spearman)相关系数和肯德尔(kendall)相关系数并称为统计学三大相关系数。其中,spearman和kendall属于等级相关系数亦称为“秩相关系数”,是反映等级相关程度的统计分析指标。pearson是用来反应俩变量之间相似程度的统计量,在机器学习中可以用来计算特征与类别间的相似度,即可判断所提取到的特征和类别是正相关、负相关还是没有相关程度。

Pearson相关系数的计算方法有三种形式,如下:
这里写图片描述

皮尔森相关系数是衡量线性关联性的程度,p的一个几何解释是其代表两个变量的取值根据均值集中后构成的向量之间夹角的余弦。


代码实现

python实现公式3的代码:

def pearson(vector1, vector2):
    n = len(vector1)
    #simple sums
    sum1 = sum(float(vector1[i]) for i in range(n))
    sum2 = sum(float(vector2[i]) for i in range(n))
    #sum up the squares
    sum1_pow = sum([pow(v, 2.0) for v in vector1])
    sum2_pow = sum([pow(v, 2.0) for v in vector2])
    #sum up the products
    p_sum = sum([vector1[i]*vector2[i] for i in range(n)])
    #分子num,分母den
    num = p_sum - (sum1*sum2/n)
    den = math.sqrt((sum1_pow-pow(sum1, 2)/n)*(sum2_pow-pow(sum2, 2)/n))
    if den == 0:
        return 0.0
    return num/den

python实现公式1的代码:

# 计算特征和类的平均值
def calcMean(x,y):
    sum_x = sum(x)
    sum_y = sum(y)
    n = len(x)
    x_mean = float(sum_x+0.0)/n
    y_mean = float(sum_y+0.0)/n
    return x_mean,y_mean

# 计算Pearson系数
def calcPearson(x,y):
    x_mean,y_mean = calcMean(x,y)   # 计算x,y向量平均值
    n = len(x)
    sumTop = 0.0
    sumBottom = 0.0
    x_pow = 0.0
    y_pow = 0.0
    for i in range(n):
        sumTop += (x[i]-x_mean)*(y[i]-y_mean)
    for i in range(n):
        x_pow += math.pow(x[i]-x_mean,2)
    for i in range(n):
        y_pow += math.pow(y[i]-y_mean,2)
    sumBottom = math.sqrt(x_pow*y_pow)
    p = sumTop/sumBottom
    return p

# 计算每个特征的Pearson系数,返回数组 
def calcAttribute(dataSet):  
    prr = []  
    n,m = shape(dataSet)    # 获取数据集行数和列数 
    x = [0] * n             # 初始化特征x和类别y向量 
    y = [0] * n  
    for i in range(n):      # 得到类向量 
        y[i] = dataSet[i][m-1]  
    for j in range(m-1):    # 获取每个特征的向量,并计算Pearson系数,存入到列表中 
        for k in range(n):  
            x[k] = dataSet[k][j]  
        prr.append(calcSpearman(x,y))  
    return prr 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124700.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java中Scanner的理解大总结「建议收藏」

    Java中Scanner的理解大总结「建议收藏」Scanner类常用的方法:Scnaner(Filefile);Scnaner(Stringfilename);创建一个从特定文件扫描的扫描器hasNext();还有可读取的书库返回truenext();返回下一个标志作为字符串nextLine();使用行分隔符从这个扫描器返回一个行结束nextByte();nextshort();nextInt();nextLong()

    2022年7月20日
    17
  • 基于matlab的机械臂仿真_移动机器人matlab运动学仿真

    基于matlab的机械臂仿真_移动机器人matlab运动学仿真目的  本文手把手教你如何在Mathematica软件中搭建机械臂的三维仿真环境,包括以下几部分:  1. 如何导入机械臂的三维模型;  2. 如何进行(正/逆)运动学仿真;  3. 如何进行(正/逆)动力学仿真;  4. 如何进行碰撞检测;  5. 如何进行控制方法的验证;  先看一下效果(先尝后买):  对于机器人研发设计人员,一款好用的仿真软件能对他的

    2022年10月20日
    1
  • 计算三角形面积_三角形怎么算平方

    计算三角形面积_三角形怎么算平方参考:已知三点坐标,求三角形面积1:已知直角坐标系3点p(a,b),m(c,d),n(e,f)求三角形pmn面积两倍三角形面积是整型代码模板:llsolve(lla,llb,llc,

    2022年8月5日
    4
  • webservice有哪些框架_web前端主流框架有哪些

    webservice有哪些框架_web前端主流框架有哪些1摘要 开发webservice应用程序中离不开框架的支持,当open-open网站列举的就有很多种,这对于开发者如何选择带来一定的疑惑。性能Webservice的关键要素,不同的框架性能上存在较大差异,而当前在官方网站、网络资料中可以方便的找到各自框架的介绍,但是很少有针对不同框架性能测试数据。本文选择了比较流行几个框架:Apache Axis1、Apache Axis2、Codeh

    2022年9月21日
    0
  • initramfs-kernel_ubuntu initramfs

    initramfs-kernel_ubuntu initramfsLinux系统启动时使用initramfs(initramfilesystem),initramfs可以在启动早期提供一个用户态环境,借助它可以完成一些内核在启动阶段不易完成的工作。当然initramfs是可选的,Linux中的内核编译选项默认开启initrd。在下面的示例情况中你可能要考虑用initramfs。加载模块,比如第三方driver定制化启动过程(比如打印welcomeme…

    2022年8月11日
    6
  • 图像处理用matlab还是python_python和matlab对比

    图像处理用matlab还是python_python和matlab对比由于需要frost滤波进行滤波,一通查找到了matlab版本,以前电脑上有matlab软件,但是一直没用到,现在东西好不容易找到了,就搜了下相关教程,整理一个博客。感觉matlab语言和python语言很多类似操作,所以敲起代码来有种“春风得意马蹄疾”的感觉,废话不多说,上代码。下面代码matlab入门没啥问题…算法下载地址如下(如果不需要可以忽略下载,用matlab中自带的算法):differe…

    2022年10月4日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号