You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

互相关特征筛选:基于目标变量相关性保留唯一特征的实现方法

你可以按以下逻辑实现自动筛选:

核心逻辑

  1. 提前存储每个特征和Target的相关系数绝对值,方便后续对比优先级
  2. 只处理特征相关矩阵的上三角区域,避免重复处理同一对特征(比如A和B、B和A视为同一对)
  3. 对每对互相关超过阈值的特征,直接剔除和Target相关绝对值更低的那个
  4. 最终保留Target+未被剔除的特征即可

完整实现代码

import pandas as pd
import numpy as np

# 假设你已经计算好相关矩阵corr
corr = df.corr(method='pearson')
threshold = 0.5

# 提取所有非Target的特征,以及它们和Target的相关绝对值
feature_target_abs_corr = abs(corr['Target']).drop('Target')
all_features = feature_target_abs_corr.index.tolist()

# 生成特征间相关矩阵的上三角,过滤对角线(自身相关系数为1,无意义)和下半区重复对
feature_corr_matrix = corr.loc[all_features, all_features]
upper_triangle = feature_corr_matrix.where(np.triu(np.ones(feature_corr_matrix.shape), k=1).astype(bool))

# 收集待剔除的特征
drop_features = set()
for col in upper_triangle.columns:
    for row in upper_triangle.index:
        corr_val = abs(upper_triangle.loc[row, col])
        if corr_val > threshold:
            # 对比两个特征和Target的相关绝对值,剔除更低的
            if feature_target_abs_corr[row] > feature_target_abs_corr[col]:
                drop_features.add(col)
            else:
                drop_features.add(row)

# 生成最终数据集
keep_features = [f for f in all_features if f not in drop_features]
final_df = df[['Target'] + keep_features]

运行结果说明

拿你给出的示例数据运行上述代码,会识别到Medicine和School的互相关系数0.76超过阈值,对比两者和Target的相关绝对值:Medicine是0.08、School是0.04,因此School会被加入待剔除列表,最终得到的final_df包含的列就是你需要的Target、Politics、Medicine、Hospital、Domestic。

如果遇到两个特征和Target的相关绝对值完全相等的情况,你可以根据需求自行调整规则,比如优先保留业务含义更重要的特征,或者随机剔除其一即可。

内容的提问来源于stack exchange,提问作者LdM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:24:00