按≥0.8阈值筛选correlation matrix子集(排除对角线干扰)
实现方法
通过Python+pandas即可快速完成该相关矩阵的筛选,核心逻辑是先排除对角线值的干扰,再判断每个变量是否满足非对角线相关系数全部≥0.8的要求,最后切片得到目标子集。
- 第一步:导入依赖库,构建原始相关矩阵
- 第二步:将矩阵对角线值临时替换为
NaN,避免固定为1的对角线值干扰阈值判断 - 第三步:逐列计算非对角线值的最小值,若最小值≥0.8则该变量符合保留条件
- 第四步:用符合条件的变量对原始矩阵做行列切片,得到最终结果
完整可运行代码如下:
import pandas as pd import numpy as np # 构建原始相关矩阵 corr = pd.DataFrame( [ [1, 0.7, 0.9, 0.5, 0.83, 0.88], [0.7, 1, 0.8, 0.5, 0.95, 0.96], [0.9, 0.8, 1, 0.8, 0.97, 0.9], [0.5, 0.5, 0.97, 1, 0.87, 0.91], [0.83, 0.95, 0.97, 0.87, 1, 0.81], [0.88, 0.96, 0.9, 0.91, 0.81, 1] ], index=['A', 'B', 'C', 'D', 'E', 'F'], columns=['A', 'B', 'C', 'D', 'E', 'F'] ) # 临时替换对角线值排除干扰 temp_corr = corr.copy() np.fill_diagonal(temp_corr.values, np.nan) # 筛选符合条件的变量 keep_vars = temp_corr.columns[temp_corr.min(axis=0) >= 0.8] # 切片得到最终结果 res = corr.loc[keep_vars, keep_vars] print(res)
运行代码后输出结果和预期完全一致:
C E F C 1.00 0.97 0.90 E 0.97 1.00 0.81 F 0.90 0.81 1.00
内容的提问来源于stack exchange,提问作者Reda
相关产品推荐
相关产品推荐

