scipy与dcor库中距离相关性指标的差异及结果分歧咨询
scipy与dcor库距离相关性结果差异的原因
两者计算的根本不是同一个指标,这是结果差异巨大的核心原因:
dcor.distance_correlation:衡量非线性依赖的距离相关系数
这个指标专门用于检测两个变量之间的非线性依赖关系,取值范围是[0,1]。0代表变量完全独立,1代表变量存在完全的依赖(包括线性和非线性)。你例子里的0.81,说明数组a和b之间有很强的非线性关联。scipy.spatial.distance.correlation:基于皮尔逊相关的距离指标
这个函数计算的是相关距离,公式为1 - 皮尔逊相关系数,本质是衡量两个变量的线性相关程度,取值范围是[0,2]。0对应完全线性正相关,2对应完全线性负相关,1对应无线性相关。你得到的0.34,反推皮尔逊相关系数是1-0.34=0.66,说明a和b的线性相关程度中等,但因为数据里存在明显的非线性成分(比如b的最后一个值从3跳至14),所以这个结果远低于dcor的非线性依赖检测值。
验证代码(修正原代码的语法错误)
import numpy as np import dcor from scipy.spatial.distance import correlation a = np.array([1., 2., 3., 4.]) b = np.array([5., 2., 3., 14.]) dcor_result = dcor.distance_correlation(a, b) scipy_corr_dist = correlation(a, b, centered=True) pearson_corr = 1 - scipy_corr_dist print(f"dcor距离相关系数: {dcor_result:.6f}") print(f"scipy相关距离: {scipy_corr_dist:.6f}") print(f"推导的皮尔逊相关系数: {pearson_corr:.6f}")
内容的提问来源于stack exchange,提问作者cristiandatum
相关产品推荐
相关产品推荐

