[英]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)
在此图像中,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.