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

如何删除乳腺癌数据集中与目标相关性较低的高相关特征

乳腺癌数据集高相关特征筛选实现

1. 加载数据集

使用scikit-learn内置的乳腺癌数据集,加载代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_breast_cancer

data = load_breast_cancer()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target
df['target'] = df['target'].map({0:'malignant', 1:'benign'})

2. 绘制特征相关性热力图

通过以下代码计算特征间的相关性并绘制热力图:

corr_mat = df.corr()
mask = np.triu(np.ones_like(corr_mat, dtype=bool))
heatmap = sns.heatmap(corr_mat, vmin=-1, vmax=1, mask=mask, cmap='BrBG')

特征相关性热力图

3. 实现高相关特征筛选逻辑

设定相关性绝对值大于0.7为高相关阈值,对于每对高相关特征,删除与目标变量df['target']相关性较低的那个。完整实现代码如下:

# 计算每个特征与目标变量的相关性绝对值
target_corr = df.corr()['target'].abs()

# 用集合存储待删除的特征,避免重复操作
cols_to_drop = set()

corr_mat = df.corr()
for i in range(len(corr_mat.columns)):
    for j in range(i):
        col_i = corr_mat.columns[i]
        col_j = corr_mat.columns[j]
        # 跳过目标列以及已标记要删除的列
        if col_i == 'target' or col_j == 'target' or col_i in cols_to_drop or col_j in cols_to_drop:
            continue
        # 判断特征对是否高度相关
        if abs(corr_mat.iloc[i, j]) > 0.7:
            # 比较两个特征与目标变量的相关性,删除相关性更低的那个
            if target_corr[col_i] < target_corr[col_j]:
                cols_to_drop.add(col_i)
            else:
                cols_to_drop.add(col_j)

# 执行删除操作,得到筛选后的数据集
df_filtered = df.drop(cols_to_drop, axis=1)

代码说明

  • 先预计算所有特征与目标变量的相关性绝对值,简化后续比较步骤
  • 使用集合存储待删除列,避免重复删除同一特征
  • 遍历特征对时跳过目标列和已标记删除的列,减少无效计算
  • 对高相关特征对,始终保留与目标变量相关性更高的特征,确保筛选后的特征更具预测价值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:50:23