Scipy:距离相关性高于1

Roc*_*etq 6 python scipy correlation python-2.7

我正在尝试找到列之间的距离相关性,请查看下面的代码.大多数时候它返回高于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)
Run Code Online (Sandbox Code Playgroud)

1.00210811815

这里有什么问题或我该如何衡量?

upd1: 链接到 github 上的问题

Ami*_*ory 8

根据文档,我不明白为什么这是一个问题。

文档

u 和 v 之间的相关距离定义为1 - \frac{(u - \bar{u}) \cdot (v - \bar{v})} {{||(u - \bar{u}) ||}_2 {||(v - \bar{v})||}_2}

根据柯西-施瓦茨不等式,减号后面的表达式的绝对值至多为 1。没有任何规定它不会是负数,尽管 - 事实上,如果(均值归一化)向量是反相关的,就会发生这种情况。

AFAICT,如果您得到的值大于 2 或小于 0,您应该会感到惊讶。使用 @Cleb 的评论以及范围是 [0, 2] 的事实,我猜其他一些包只是定义了距离作为这个表达式的一半

  • scipy 正在使用 Pearson 相关性。相关性是相似性的度量,因此为了将其用作距离度量,它计算 1-p。参考文献中的一个是对 Pearson 相关性的修改,该相关性也应该检测非线性关系。所以,它们是完全不同的。 (2认同)

Roc*_*etq 5

@josef-pkt在 github 上的回答如下:

这不是距离相关性,而是一种非线性的依赖性度量。例如我的看法 http://jpktd.blogspot.ca/2012/06/non-linear-dependence-measures-distance.html 然而,scipy.spatial.distance.correlation 中的“相关性”有点误导,因为根据公式在文档字符串中,它是距离度量而不是相关性。与等于 1 的相关系数完全相关具有零距离 完全负相关与等于 -1 的相关系数具有最大距离 2。