Python中使用Spearman's Rho评估非线性降维技术的疑问
问题核心原因
你既没有调用错误的函数,也没有对文献产生误解,差异来自入参的输入逻辑和结果的取值规则:
scipy.stats.spearmanr传入两个矩阵时,默认会计算两个矩阵所有列两两之间的Spearman相关系数,最终返回的是相关系数矩阵,附带对应的p值矩阵,这是函数的正常表现。- 文献中的单个Spearman Rho值,本质是对「原始特征空间的样本间距离矩阵」和「降维后空间的样本间距离矩阵」的非重复元素计算秩相关系数,用来衡量降维方法对样本相对距离关系的保留程度,这也是流形降维效果评估的通用标准逻辑。
正确计算方法
你可以按照以下步骤调整代码,得到和文献形式一致的单个评估值:
- 先分别计算原始特征、降维后成分的样本两两距离向量,用欧氏距离即可:
from scipy.spatial.distance import pdist # 原始特征空间的样本对距离向量(直接取上三角展开结果,避免重复计算) dist_ori = pdist(features, metric='euclidean') # 降维后空间的样本对距离向量 dist_red = pdist(comp, metric='euclidean')
- 对两个距离向量调用spearmanr函数,得到的就是单值评估结果:
from scipy.stats import spearmanr rho, p_val = spearmanr(dist_ori, dist_red)
得到的rho就是对应每种降维技术的评估值,和你参考的文献结果形式完全匹配。
内容的提问来源于stack exchange,提问作者user120768
相关产品推荐
相关产品推荐

