Scipy: корреляция расстояний выше 1

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

import numpy as np
from scipy.spatial import distance

x = np.random.uniform(-1, 1, 10000)
print distance.correlation(x, x**2)

1.00210811815

что здесь не так или как я могу это измерить?

upd1: ссылка на вопрос on на GitHub

3 ответов


Я не понимаю, почему это проблема в соответствии с документацией.

с документация:

расстояние корреляции между u и v определяется как 1 - \фрац{(U - бар \{у}) \cDOT на (в - \ - бар{в})} {{//(u - \bar{u})||}_2 {||(v - \bar{v}|//} _2}

на Неравенство Коши-Буняковского, выражение после знака минус имеет абсолютное значение, которое в большинстве 1. Нет ничего, что не было бы отрицательным - на самом деле это произойдет, если (средние нормализованные) векторы будут антикоррелированы.

AFAICT, вы должны быть удивлены, если вы получите значение больше 2 или меньше 0. Используя комментарий @Cleb и тот факт, что диапазон [0, 2], я предполагаю, что некоторые другие пакеты просто определяют расстояние как пол это выражение.


@josef-pkt ответ на github приведен ниже:

Это не корреляция расстояний, которая является нелинейной мерой зависимость. например, мое мнение http://jpktd.blogspot.ca/2012/06/non-linear-dependence-measures-distance.html Однако "корреляция" в scipy.пространственный.расстояние.корреляция-это немного вводит в заблуждение, потому что согласно формуле в docstring это мера расстояния, а не корреляция. идеально коррелирует с коэффициент корреляции, равный 1, имеет нулевое расстояние идеально отрицательно коррелирует с коэффициентом корреляции равен -1, то есть максимальное расстояние в 2.


корреляционное расстояние является обратным корреляции и только смотрит на угол/сходство между шаблонами (вроде нормализации). Корреляционное расстояние идет от 0 до 2, причем 0-идеальная корреляция, 1-отсутствие корреляции и 2-Идеальная АНТИКОРРЕЛЯЦИЯ. Таким образом, небольшое корреляционное расстояние означает близкое друг к другу в корреляционном пространстве (небольшая угловая разница). Corr = 1-dist; Корр дист = 1 – Корр; Итак, при высокой корреляции = высокая связь; низкая корреляция DISTINANCE = высокие отношения