皮尔森相关系数(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 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)
blank

相关推荐

  • 安装kafka eagle监控kafka集群

    安装kafka eagle监控kafka集群

  • 递归算法之阶乘算法

    递归算法之阶乘算法递归算法是一种比较难理解的算法,本人是一位学生,饱受编程之苦,为了给广大学编程的童鞋提供方便,这里总结了一些教科书中常见的递归算法案例。这是第一篇,简单的用递归实现的阶乘算法。#includeusingnamespacestd;intFactorial(intn){ intsum=0;//定义一个累乘的sum量 if(n==0)return

  • 数学建模五个步骤_思考问题的五步方法

    数学建模五个步骤_思考问题的五步方法五步方法五步方法顾名思义,通过五个步骤完成用数学模型解决实际问题。它包含以下五个步骤:提出问题 选择建模方法 推导模型的数学表达式 求解模型 回答问题第一步是提出问题,即对遇到的实际问题使用恰当的数学语言进行表达。一般而言,首要任务是对术语进行定义。无论是实际问题涉及到的变量,还是这些变量的单位、相关假设,都应当用等式或者不等式进行表达。在这一基础上,我们就可以用数学语言对实际问…

  • CSV文件编辑器——Modern CSV for mac

    CSV文件编辑器——Modern CSV for mac在编辑CSV文档时,大多数人都在寻找一种高度专业的工具来帮助他们做他们想做或实际需要做的任何事情。现代CSV正是这种类型的工具。它提供了大量的选项和功能,同时快速且易于使用。考虑到这一点,当涉及到CSV文档时,这个小程序可以做正确的事情。点击安装》ModernCSVformac快速编辑多单元格编辑复制行、列和单元格。移动行、列和单元格。插入行和列。删除行和列。大文件处理加载数十亿行的文件。只读模式,可实现更高效的文件处理。加载文件的速度比Excel快1

  • Java基础学习教程,eclipse简单使用教程(Java集成开发工具)

    Java基础学习教程,eclipse简单使用教程(Java集成开发工具)使用集成开发工具eclipse1、java的集成开发工具很多,包括:eclipse、IntellijIDEA、netbeans….. eclipse: IBM开发的。eclipse翻译为:日食。寓意吞并SUN公司(SUN是太阳。)最终没有成功,SUN公司在2009年的时候被oracle甲骨文公司收购。eclipse在以前的开发中使用非常多,但是由于IDEA工具的出现,让eclipse的用户大大减少,目前eclipse占市场份额30%。IDEA占市场份额60%,剩下10%是其他的开

  • ASI简单实现网络编程

    ASI简单实现网络编程

发表回复

您的电子邮箱地址不会被公开。

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