相关系数与python实现



1. 皮尔逊相关系数

适用数据:用于横向两个连续性随机变量间的相关系数。
数据要求:实验数据之间的差距不能太大
好比:研究人跑步的速度与心脏跳动的相关性,若是人突发心脏病,心跳为0(或者过快与过慢),那这时候咱们会测到一个偏离正常值的心跳,若是咱们把这个值也放进去进行相关性分析,它的存在会大大干扰计算的结果的 [1]。
在这里插入图片描述

  1. numpy 中的代码
import numpy as np
x=np.array([1,3,5])
y=np.array([1,3,4])
pc=np.corrcoef(x,y)
print(f"皮尔森相关系数:{pc}")
  1. 调用scipy.stats中的pearsonr方法,能够附加输出显著性水平
    输出值:
    r : float,皮尔逊相关系数,[-1,1]之间。
    p-value : float,Two-tailed p-value(双尾P值); p值越小,表示相关系数越显著,一般p值在500个样本以上时有较高的可靠性。
from scipy.stats import pearsonr
import numpy as np
# 待测的两个序列
x=np.array([1,3,5])
y=np.array([1,3,4])
pc = pearsonr(x,y)
print(f"相关系数:{pc[0]}; 显著性水平:{pc[1]}")
  1. pandas包
import pandas as pd
data=pd.DataFrame({"x":[1,3,5],"y":[1,3,4]})
pc = data.corr("pearson")
print(f"皮尔森相关系数:{pc}")

注意事项:在求皮尔森相关性系数之后,一般还会用t检验之类的方法来进行皮尔森相关性系数检验,而t检验是基于数据呈正态分布的假设的。

2. 斯皮尔曼相关系数

适用数据: 用于衡量分类定序变量间的相关程度。斯皮尔曼相关性系数,一般也叫斯皮尔曼秩相关系数。“秩”,能够理解成就是一种顺序或者排序,那么它就是根据原始数据的排序位置进行求解 [2]

2.1 首先对两个变量(X, Y)的数据进行排序,而后记下排序之后的位置(X’, Y’),(X’, Y’)的值就称为秩次,秩次的差值就是上面公式中的di,n就是变量中数据的个数,最后带入公式就可求解结果。
2.2数据要求
由于是定序,因此咱们不用管X和Y这两个变量具体的值到底差了多少,只须要算一下它们每一个值所处的排列位置的差值,就能够求出相关性系数了.

在这里插入图片描述

  1. pandas包
import pandas as pd
import numpy as np
 
#原始数据
x1=pd.Series([1, 2, 3, 4, 5, 6])
y1=pd.Series([0.3, 0.9, 2.7, 2, 3.5, 5])
 
#处理数据删除Nan
n=x1.count()
x1.index=np.arange(n)
y1.index=np.arange(n)
 
#分部计算
d=(x1.sort_values().index-y1.sort_values().index)**2
dd=d.to_series().sum()
p=1-n*dd/(n*(n**2-1))
 
#s.corr()函数计算
r=x1.corr(y1,method='spearman')
print(r,p) #0.942857142857143 0.9428571428571428
  1. scipy
    在这里插入图片描述
    在这里插入图片描述
from scipy import stats
stats.spearmanr([1,2,3,4,5], [5,6,7,8,7])
x2n = rng.standard_normal((100, 2))
y2n = rng.standard_normal((100, 2))
rho, pval = stats.spearmanr(x2n, y2n)

3. kendall 系数

在这里插入图片描述

肯德尔相关性系数,又称肯德尔秩相关系数,它也是一种秩相关系数,不过它所计算的对象是分类变量。
分类变量能够理解成有类别的变量,能够分为:
(1) 无序的,好比性别(男、女)、血型(A、B、O、AB);
(2) 有序的,好比肥胖等级(重度肥胖,中度肥胖、轻度肥胖、不肥胖)。
一般须要求相关性系数的都是有序分类变量。

import pandas as pd
import numpy as np
 
#原始数据
x=pd.Series([1, 2, 3, 4, 5, 6])
y=pd.Series([0.3, 0.9, 2.7, 2, 3.5, 5])
r = x.corr(y,method="kendall") #-0.2611165

参考资料

[1] https://blog.csdn.net/weixin_43876625/article/details/123919665
[2] http://www.javashuo.com/article/p-waavfymd-cx.html
[3] https://www.jianshu.com/p/652dcde6aa43

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
相关系数法(Correlation Coefficient)是一种常用的影像匹配方法,在OpenCV中也能够实现。 首先,我们需要准备两个待匹配的影像,分别称为源影像(source image)和目标影像(template image)。接下来,我们可以使用OpenCV中的相关系数函数`cv.matchTemplate()`进行匹配。 函数使用的语法如下: ``` result = cv.matchTemplate(source, template, method) ``` 其中,`source`是源影像,`template`是目标影像,`method`是指定使用的匹配方法。 常见的匹配方法有以下几种: - `cv.TM_CCORR`:相关系数匹配方法 - `cv.TM_CCORR_NORMED`:相关系数归一化匹配方法 - `cv.TM_CCOEFF`:相关系数系数匹配方法 - `cv.TM_CCOEFF_NORMED`:相关系数系数归一化匹配方法 - `cv.TM_SQDIFF`:平方差匹配方法 - `cv.TM_SQDIFF_NORMED`:平方差归一化匹配方法 例如,如果我们要使用相关系数法进行匹配,可以选择`cv.TM_CCORR`方法: ``` result = cv.matchTemplate(source, template, cv.TM_CCORR) ``` 匹配结果`result`是一个单通道灰度影像,其中每个像素值表示了对应位置的匹配度得分。我们可以通过寻找最高得分的位置来确定最佳匹配位置: ``` min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result) ``` 其中,`max_val`表示最高得分,`max_loc`表示最高得分位置。 最后,我们可以在原始影像上标记出最佳匹配位置: ``` cv.rectangle(source, max_loc, (max_loc[0] + w, max_loc[1] + h), (0, 0, 255), 2) ``` 其中,`w`和`h`分别是目标影像的宽度和高度,`(0, 0, 255)`是画矩形的颜色,`2`是矩形线条的粗细。 通过以上步骤,我们就能够使用OpenCV实现相关系数法影像匹配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cnjs1994

你的鼓励将是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值