繁体   English   中英

在 python 中,我们如何找到两个矩阵之间的相关系数?

[英]In python, How do we find the Correlation Coefficient between two matrices?

我有两个矩阵,例如,T1 和 T2,每个矩阵的大小都是 mxn。 我想找到两个矩阵之间的相关系数
到目前为止,我还没有为它使用任何内置库 function。 我正在为此执行以下步骤:
首先,我将两个矩阵的平均值计算为:

M1 = T1.mean()
M2 = T2.mean()

然后我从相应的矩阵中减去平均值:

A = np.subtract(T1, M1)
B = np.subtract(T2, M2)

其中 np 是 numpy 库,A 和 B 是减法后的结果矩阵。
现在,我将相关系数计算为:

alpha = np.sum(A*B) / (np.sqrt((np.sum(A))*np.sum(B)))

但是,我得到的值远远大于 1,而且根本没有意义。 它应该在 0 和 1 之间才能从中获得一些意义。
我也尝试过使用矩阵 A 和 B 的绝对值,但这也没有用。
我也尝试使用:

np.sum(np.dot(A,B.T)) instead of np.sum(A*B)  

在分子中,但这也没有用。
编辑1:
这是我打算计算的公式:
此图显示了要计算的实际公式

在此图像中,C 是矩阵之一,T 是另一个矩阵。
'u' 是平均符号。

有人能告诉我我到底在哪里做错了吗?

你可以试试这个:

import numpy as np
x = np.array([[0.1, .32, .2, 0.4, 0.8], [.23, .18, .56, .61, .12]])
y = np.array([[2,4,0.1, .32, .2],[1,3,.23, .18, .56]])
pearson = np.corrcoef(x,y)
print(pearson)

好吧,我认为这个功能正在做我打算做的事情:

def correlation_coefficient(T1, T2):
    numerator = np.mean((T1 - T1.mean()) * (T2 - T2.mean()))
    denominator = T1.std() * T2.std()
    if denominator == 0:
        return 0
    else:
        result = numerator / denominator
        return result

分子的计算在这里似乎很棘手,它并不能完全反映上图中显示的公式,而分母只是两幅图像标准偏差的乘积。
但是,结果现在确实有意义,因为结果仅在 0 和 1 之间。

从 OP 中描述问题的方式来看,矩阵被视为 arrays,因此可以简单地将它们展平:

x = T1.flatten()
y = T2.flatten()

然后可以使用@AakashMakwana 提出的内置 numpy function之一:

import numy as np
r = np.corrcoef(x, y)[0,1]

备注:请注意,如果不展平,此解决方案将产生成对相关矩阵。

或者,可以使用等效的scipy function

from scipy.stats import pearsonr
r = pearsonr(x,y)[0]

Scipy 还提供了计算 Spearman 相关系数 ( spearmanr(x,y)[0] ) 或 Kendall tau ( kendalltau(x,y)[0] ) 的可能性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM