Python - Как найти корреляцию между двумя векторами? - PullRequest
2 голосов
/ 15 июня 2010

Учитывая два вектора X и Y , я должен найти их корреляцию, то есть их линейную зависимость / независимость. Оба вектора имеют одинаковую размерность. Результатом должно быть число с плавающей запятой от [-1.0 .. 1.0].

Пример:

X=[-1, 2,    0]
Y=[ 4, 2, -0.3]

Найти y = cor (X, Y) такой, что y принадлежит [- 1.0 .. 1.0] .

Это должна быть простая конструкция, включающая понимание списка. Внешняя библиотека запрещена.

ОБНОВЛЕНИЕ: хорошо, если точечного произведения достаточно, вот мое решение:

nX = 1/(sum([x*x for x in X]) ** 0.5)
nY = 1/(sum([y*y for y in Y]) ** 0.5)
cor = sum([(x*nX)*(y*nY)  for x,y in zip(X,Y) ])

право

Ответы [ 3 ]

4 голосов
/ 15 июня 2010

Так как диапазон должен быть [-1, 1] Я думаю, что корреляция Пирсона может подойти для ваших целей.

Также точечный продукт будет работать, но вам придется нормализовать векторы перед его вычислением, и вы можете иметь диапазон -1,1, только если у вас есть и отрицательные значения ... в противном случае у вас будет 0,1

3 голосов
/ 15 июня 2010

Для меня звучит как точечное произведение .

Решите уравнение для косинуса угла между двумя векторами, который всегда находится в диапазоне [-1, 1],и вы получите то, что хотите.

Это равно точечному произведению, деленному на величины двух векторов.

2 голосов
/ 15 июня 2010

Не предполагайте, потому что формула алгебраически верна, что ее прямая реализация в коде будет работать.Могут возникнуть численные проблемы с некоторыми определениями корреляции.

См. Как точно рассчитать корреляцию

...