文章目录
- 1. 距离相关系数算法介绍
- 2. Python代码实现
- 3. 优缺点及作用
- 4.总结
- 4.1 线性依赖关系
- 4.2 非线性依赖关系
- 4.3 单调依赖关系
- 4.4 复杂依赖关系
1. 距离相关系数算法介绍
距离相关系数:研究两个变量之间的独立性,距离相关系数为0表示两个变量是独立的。克服了皮尔逊相关系数的弱点,皮尔逊相关系数为0并不一定表示两个变量之间是独立的,也有可能是非线性相关的。
利用 D i s t a n c e C o r r e c t i o n Distance \ Correction Distance Correction 距离相关系数来研究两个变量 u u u 和 v v v 之间的独立性,记为 d c o r r ( u , v ) dcorr(u,v) dcorr(u,v)
- d c o r r ( u , v ) = 0 dcorr(u,v)=0 dcorr(u,v)=0 时,说明两个变量之间互相独立
- d c o r r ( u , v ) dcorr(u,v) dcorr(u,v) 越大,说明两个变量之间相关性越强
设 { ( u i , v i ) , i = 1 , 2.... n } \{(u_i,v_i), i=1,2....n\} {(ui,vi),i=1,2....n} 是总体 ( u , v ) (u,v) (u,v) 的随机样本, S z e k e l y Szekely Szekely 等定义两个随机变量 u u u 和 v v v 的 DC样本估计值为:
d c o r r ( u , v ) = d c o v ( u , v ) d c o v ( u , u ) d c o v ( v , v ) dcorr(u,v) = \frac {dcov(u,v)} {\sqrt{dcov(u,u)dcov(v,v)}} dcorr(u,v)=dcov(u,u)dcov(v,v)dcov(u,v)
其中 d c o r r 2 ( u , v ) = S 1 + S 2 − 2 S 3 dcorr^2(u, v)= S_1+S_2-2S_3 dcorr2(u,v)=S1+S2−2S3 ,其中 S 1 , S 2 , S 3 S_1, S_2, S_3 S1,S2,S3 分别为:
S 1 = 1 n 2 ∑ i = 1 n ∑ j = 1 n ∣ ∣ u i − u j ∣ ∣ d u ∣ ∣ v i − v j ∣ ∣ d v S_1 = \frac {1}{n^2} \sum_{i=1}^n \sum_{j=1}^n ||u_i-u_j||_{d_u} ||v_i-v_j||_{d_v} S1=n21i=1∑nj=1∑n∣∣ui−uj∣∣du∣∣vi−vj∣∣dv
S 2 = 1 n 2 ∑ i = 1 n ∑ j = 1 n ∣ ∣ u i − u j ∣ ∣ d u 1 n 2 ∑ i = 1 n ∑ j = 1 n ∣ ∣ v i − v j ∣ ∣ d v S_2=\frac {1}{n^2} \sum_{i=1}^n \sum_{j=1}^n ||u_i-u_j||_{d_u} \frac{1}{n^2}\sum_{i=1}^n\sum_{j=1}^n ||v_i-v_j||_{d_v} S2=n21i=1∑nj=1∑n∣∣ui−uj∣∣dun21i=1∑nj=1∑n∣∣vi−vj∣∣dv
S 3 = 1 n 2 ∑ i = 1 n ∑ j = 1 n ∑ l = 1 n ∣ ∣ u i − u l ∣ ∣ d u ∣ ∣ v j − v l ∣ ∣ d v S_3 = \frac{1}{n^2} \sum_{i=1}^n \sum_{j=1}^n \sum_{l=1}^n ||u_i-u_l||_{d_u} ||v_j-v_l||_{d_v} S3=n21i=1∑nj=1∑nl=1∑n∣∣ui−ul∣∣du∣∣vj−vl∣∣dv
- 这里, ∣ ∣ u i − u j ∣ ∣ d u ||u_i - u_j||_{d_u} ∣∣ui−uj∣∣du 和 ∣ ∣ v i − v j ∣ ∣ d v ||v_i - v_j||_{d_v} ∣∣vi−vj∣∣dv 分别表示 u i u_i ui 和 u j u_j uj、 v i v_i vi 和 v j v_j vj 之间的距离。该项反映了每对样本点 u i , v i u_i, v_i ui,vi 与 u j , v j u_j, v_j uj,vj 之间的距离关系
- 同理计算 d c o v ( u , u ) dcov(u,u) dcov(u,u) 和 d c o v ( v , v ) dcov(v,v) dcov(v,v)
2. Python代码实现
python">from scipy.spatial.distance import pdist, squareform
import numpy as npfrom numbapro import jit, float32def distcorr(X, Y):""" Compute the distance correlation function>>> a = [1,2,3,4,5]>>> b = np.array([1,2,9,4,4])>>> distcorr(a, b)0.762676242417"""X = np.atleast_1d(X)Y = np.atleast_1d(Y)if np.prod(X.shape) == len(X):X = X[:, None]if np.prod(Y.shape) == len(Y):Y = Y[:, None]X = np.atleast_2d(X)Y = np.atleast_2d(Y)n = X.shape[0]if Y.shape[0] != X.shape[0]:raise ValueError('Number of samples must match')a = squareform(pdist(X))b = squareform(pdist(Y))A = a - a.mean(axis=0)[None, :] - a.mean(axis=1)[:, None] + a.mean()B = b - b.mean(axis=0)[None, :] - b.mean(axis=1)[:, None] + b.mean()dcov2_xy = (A * B).sum()/float(n * n)dcov2_xx = (A * A).sum()/float(n * n)dcov2_yy = (B * B).sum()/float(n * n)dcor = np.sqrt(dcov2_xy)/np.sqrt(np.sqrt(dcov2_xx) * np.sqrt(dcov2_yy))return dcor
代码地址:https://gist.github.com/satra/aa3d19a12b74e9ab7941
3. 优缺点及作用
优点:
- 度量任意类型的依赖关系:距离相关系数能够捕捉并度量变量之间的所有形式的依赖性,无论是线性还是非线性。因此,即使两个变量之间有复杂的依赖关系(如高阶的多项式关系),它仍然能够识别出这种依赖性
- 不依赖于数据分布假设:与皮尔逊相关系数不同,距离相关系数不依赖于数据的分布假设(如正态分布)。因此,它可以广泛应用于各种类型的数据集,尤其是当数据的分布未知或不符合正态分布时
- 适应非线性关系:即使两个变量之间没有线性关系,距离相关系数也能有效地度量它们之间的依赖性。通过距离度量,距离相关系数能够揭示出变量之间的更深层次的依赖关系
缺点:
- 距离相关系数的计算涉及到距离矩阵的计算和对每一对样本的处理,尤其是在高维数据时,计算量会迅速增加,导致计算复杂度较高。因此,距离相关系数的计算效率较低,可能在大数据集或高维数据中存在性能瓶颈。
- 虽然距离相关系数能够适应各种数据类型,但它对数据中的噪声较为敏感。如果数据中存在大量噪声,可能会影响计算结果,从而导致误差增大。
4.总结
距离相关系数(Distance Correlation, DCorr)用于度量两个随机变量之间的依赖性或相关性,特别是在它们之间存在非线性关系时。它能够反映变量之间的整体关系,而不仅仅是线性关系。因此,距离相关系数揭示了变量之间是否存在某种依赖关系,无论这种关系是线性还是非线性的。
4.1 线性依赖关系
- 线性依赖关系是指一个变量的变化与另一个变量的变化呈正比或负比关系,通常可以通过直线来表示。例如, Y = a X + b Y = aX + b Y=aX+b
- 皮尔逊相关系数可以有效度量线性关系的强度,但无法识别非线性关系。而距离相关系数不仅可以度量线性依赖关系,也能捕捉非线性依赖
- 示例:如果 Y = 3 X + 2 Y = 3X + 2 Y=3X+2,那么 X X X和 Y Y Y之间有线性依赖关系,距离相关系数会接近1,表示它们之间存在强相关
4.2 非线性依赖关系
- 非线性依赖关系是指变量之间的关系不是简单的比例或加法关系,而是通过其他函数形式(如多项式、指数、对数、指数衰减等)描述。例如, Y = X 2 Y = X^2 Y=X2 或 Y = e X Y = e^X Y=eX
- 皮尔逊相关系数可能为0,表示没有线性关系,但距离相关系数可以有效捕捉这种依赖性,反映它们之间的非线性关系
- 示例:如果 Y = X 2 Y = X^2 Y=X2,那么当 X X X 增加时, Y Y Y 的增长速率会越来越快,这就是一种非线性依赖关系。距离相关系数将揭示出它们之间的依赖性
4.3 单调依赖关系
- 单调关系指的是一个变量随着另一个变量的变化单方向变化,但不一定呈线性关系。单调性可以是递增的或递减的。即使这种关系不是线性的,变量之间也存在依赖性
- 距离相关系数可以捕捉单调性(单调递增或单调递减的关系),而皮尔逊相关系数可能会失效,因为它只能检测线性相关性
- 示例:如果 Y = ∣ X ∣ Y = |X| Y=∣X∣,那么 X X X 和 Y Y Y 之间有单调递增的关系。随着 X X X 增大, Y Y Y 也在不断增加,但这种关系并不是线性的。距离相关系数能够检测到这种依赖关系
4.4 复杂依赖关系
- 这种关系涉及更复杂的依赖,例如高阶的多项式关系、混合函数关系或系统中多个变量的交互作用等。通常,简单的线性或非线性模型无法充分捕捉到这些关系
- 距离相关系数能够处理这些复杂的依赖关系,尤其是当多个变量之间存在复杂的交互作用时
- 示例:如果 Y = sin ( X ) + X 2 Y = \sin(X) + X^2 Y=sin(X)+X2,则 Y Y Y 和 X X X 之间的关系同时具有周期性和多项式特征,这是一种复杂的依赖关系。距离相关系数能够揭示出这种复杂关系
本文参考:https://blog.csdn.net/jiaoaodechunlv/article/details/80655592