2016-03-14 3 views
6

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

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:Link to issue на GitHub

+0

Это выглядит странно. Я попробовал его в R, используя энергетический пакет, и всегда получаю значения около 0.49, поэтому кажется, что отсутствует коэффициент 0,5. Нет подсказки ... возможно, стоит открыть проблему на своей странице github. – Cleb

+0

@Cleb, Конечно, я открою вопрос – Rocketq

+0

@Rocketq: почему вы думаете, что функция должна вычислять дистанционную корреляцию - в документации говорится, что она вычисляет расстояние корреляции --- что может быть совсем другое? –

ответ

4

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

От documentation:

Расстояние корреляции между и и V, определяется как 1 - \ гидроразрыва {(и - \ бар {и}) \ CDOT (v - \ бар {v})} {{|| (и - \ бар {и}) ||} {|| _2 (V - \ бар {v}) ||} _2}

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

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

+0

Возможно, что scipy определяет термин по-другому, но свойства чтения - расстояние не может быть меньше 0 – Rocketq

+1

@Rocketq Я не вижу, как он может выводить что-либо меньшее, чем 0. –

+1

scipy использует корреляцию Пирсона. Корреляция является мерой сходства, поэтому, чтобы использовать ее в качестве меры расстояния, она вычисляет 1-p. Один в ссылке - это модификация корреляции Пирсона, которая также должна обнаруживать нелинейные отношения. Таким образом, они совершенно разные. – ayhan

1

@ йозеф-ПКТ «s ответ на GitHub приведен ниже:

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

0

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

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