2016-12-01 2 views
1

У меня есть две матрицы: T1 и T2 каждый размером mxn. Я хочу найти коэффициент корреляции между двумя матрицами
До сих пор я не использовал встроенную библиотечную функцию. Я делаю следующие шаги для этого:
Сначала я вычислить среднее из двух матриц, как:В python Как найти Коэффициент корреляции между двумя матрицами?

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

, а затем я вычесть среднее из соответствующих матриц, как:

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

где н.п. является библиотекой 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) 

в числителе, но это тоже не работает.
Edit1:
Это формула, что я намерен рассчитать:
This image shows the actual formula to be calculated

В этом изображении, С является одним из матриц и Т является еще одним.
'u' - средний символ.

Может кто-нибудь сказать мне, где на самом деле я делаю ошибку.

+0

Вы хотите, чтобы корреляция между той же строкой в ​​каждой матрице? – gauteh

+1

Или вы хотите просто получить корреляцию между всеми значениями в 'A' и всеми значениями в' B'? Если это так, просто сгладьте обе матрицы в векторы и вычислите правильный коэффициент корреляции – Simon

+0

См. Edit1, чтобы дать больше информации о проблеме. –

ответ

0

Вы можете попробовать это:

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) 
+0

возвращает матрицу, но мне нужно число, скалярное значение. –

0

Ну, я думаю, что эта функция делает то, что я намерен для:

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.

Смежные вопросы