目录

一、核心方法:过滤法(Filter Method)

1.1 绘图定性判断相关性

1.2 单特征预处理:方差选择法

1.3 数值特征与数值特征的相关性检验

(1)协方差(Covariance)

(2)皮尔逊相关系数(Pearson Correlation Coefficient)

(3)斯皮尔曼等级相关系数(Spearman's Rank Correlation)

(4)肯德尔相关系数(Kendall's Tau Correlation)

(5)点二列相关系数(Point-Biserial Correlation)

(6)距离相关系数(Distance Correlation)

1.4 分类特征与分类特征的相关性检验

(1)卡方检验(Chi-Square Test)

(2)Fisher得分

(3)F检验

(4)互信息与最大信息系数(Mutual Information & MIC)

① 互信息

② 最大信息系数(MIC)

(5)列联系数(Contingency Coefficient)

1.5 数值特征与分类特征的相关性检验

1.6 过滤法完整实操流程

二、过滤法Python实操代码(完整可运行)

三、嵌入法(Embedded Method)

3.1 核心特点

3.2 常用方法

四、包装法(Wrapper Method)

4.1 核心特点

4.2 常用方法

五、三大方法对比与实操选型建议

实操选型核心策略

六、总结


在机器学习建模流程中,特征相关性分析是数据预处理阶段的核心环节,其核心价值在于识别特征与目标变量的关联强度、特征之间的冗余关系,从而筛选出优质特征、剔除无效或冗余特征,提升模型训练效率、避免过拟合,同时增强模型的可解释性。特征相关性分析的方法主要分为三大类:过滤法、嵌入法和包装法,其中过滤法因原理简单、计算高效、易于实现,成为入门级特征筛选的首选方法,且根据特征类型的不同(数值型、分类型),过滤法又分为多种具体的检验方式。本文将详细拆解三大方法的核心逻辑,重点补充过滤法的具体实现,包括数值特征与数值特征、分类特征与分类特征的相关性检验方法,兼顾理论性和实操性,助力快速掌握特征相关性分析技巧。

一、核心方法:过滤法(Filter Method)

过滤法的核心逻辑是基于特征本身的统计特性,通过可视化定性判断+预设量化指标定量检验的方式对所有特征进行“筛选过滤”,核心原则是保留与目标变量相关性强、特征间冗余度低的特征,剔除相关性弱、无实际预测价值的特征。其突出优势是计算速度快、通用性极强,无需依赖任何具体的机器学习模型,可快速处理大规模数据集,尤其适合在建模初期对数据进行初步筛选,降低后续建模的计算成本;不足之处在于,它仅考虑单个特征与目标变量的独立作用,未考虑特征之间的交互效应,可能会遗漏部分单独看相关性较弱、但与其他特征结合后具有强协同作用的优质特征。

过滤法的实操可分为三个核心步骤:绘图定性判断相关性单特征预处理剔除无效特征按特征类型选择量化方法精准检验,覆盖从定性到定量、从预处理到精准分析的全流程,具体详解如下。

1.1 绘图定性判断相关性

对于特征间的强相关性,无需先进行复杂的数值计算,通过绘制可视化图表即可快速定性判断是否存在相关关系,是过滤法的前置快速分析手段,常用图表包括散点图(含散点图矩阵)、折线图和箱形图,不同图表适配不同的特征分析场景。

  1. 散点图/散点图矩阵:适配数值特征与数值特征的相关性初判,散点图可看两个数值特征的分布趋势,若点呈现明显的线性聚集(如斜向上/斜向下),则说明存在线性相关;散点图矩阵可同时分析多个数值特征间的两两关系,实现多变量相关性的快速批量判断。

  2. 折线图:适配随时间/序列变化的数值特征相关性判断,通过折线的波动趋势是否一致,判断特征间的变化关联。

  3. 箱形图:适配分类特征与数值特征的相关性初判,通过分类特征不同取值下,数值特征的箱形图分布(均值、方差、取值范围)差异,判断两者是否相关,若分布差异大则相关性强,反之则弱。

1.2 单特征预处理:方差选择法

在进行特征间的相关性检验前,需先对单个特征进行有效性筛选,剔除无区分度的无效特征,最常用的方法是方差选择法:核心逻辑是若一个特征的方差接近于0,说明该特征的所有样本取值基本一致,无法对样本进行有效区分,对模型训练无任何价值,直接剔除即可。

方差选择法的操作阈值可灵活设定,默认剔除方差为0的特征,若需严格筛选,可将阈值适当提高(如0.1),剔除方差极小的弱区分度特征,是特征相关性分析的基础预处理步骤,能快速减少特征数量,提升后续分析效率。

1.3 数值特征与数值特征的相关性检验

数值特征是指取值为连续型数据的特征,这类特征的取值具有明确的大小、强弱或多少含义,例如年龄、收入、考试分数、体重、身高、时长等。对于数值特征与数值特征之间的相关性检验,核心目标是量化两个特征之间的线性关联程度,在协方差基础上,还有多种经典的量化检验方法,兼顾基础应用与进阶需求,同时补充距离相关系数解决非线性相关的判断难题:

(1)协方差(Covariance)

协方差是衡量两个数值特征之间相关性的最基础指标,其核心作用是判断两个数值特征的取值变化趋势是否一致,即相关方向。其计算公式为:

Cov(X,Y) = \frac{1}{n-1} \sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y})

其中\bar{X}\bar{Y}分别为特征X和特征Y的样本均值,n为样本总量。

结果解读:当Cov(X,Y)>0时,说明两个特征呈正相关关系,即一个特征的取值增大时,另一个特征的取值也会随之增大;当Cov(X,Y)<0时,说明两个特征呈负相关关系,即一个特征的取值增大时,另一个特征的取值会随之减小;当Cov(X,Y)=0时,说明两个特征之间不存在线性相关关系,但需注意,这并不代表两者完全无关,可能存在非线性相关关系。

局限性:协方差的取值没有固定范围,可正可负、可大可小,无法直接衡量相关性的强弱,仅能判断相关方向;同时,它受特征尺度的影响较大,例如将收入单位从“元”改为“万元”,协方差会随之缩小10000倍,导致结果无法直接对比。

(2)皮尔逊相关系数(Pearson Correlation Coefficient)

皮尔逊相关系数是协方差的标准化形式,完美解决了协方差无固定取值范围、受尺度影响的局限性,是数值特征与数值特征相关性检验的首选方法。其计算公式为:

D_{X, Y}=\frac{cov(X, Y)}{\sigma_{X} \sigma_{Y}}

其中\sigma_{X}\sigma_{Y}分别为特征X、Y的样本标准差。

结果解读:取值范围固定为[-1,1],绝对值越大,说明两个特征的线性相关性越强,行业通用的相关性强弱划分标准为:0.8-1.0极强相关、0.6-0.8强相关、0.4-0.6中等程度相关、0.2-0.4弱相关、0.0-0.2极弱相关或无相关;系数为正表示正相关,为负表示负相关。

适用条件:要求两个数值特征均服从正态分布、且为线性相关关系,同时样本观测值成对且相互独立;若数据存在异常值,会严重影响检验结果的准确性,此时需更换非参数检验方法。

实操要点:若两个特征的皮尔逊相关系数绝对值>0.8,说明存在明显的线性冗余,只需保留其中一个(优先保留与目标变量相关性更高的特征)。

(3)斯皮尔曼等级相关系数(Spearman's Rank Correlation)

属于非参数检验方法,不依赖数据的分布类型,其核心逻辑是通过对两个特征的取值分别进行排序,计算排序后等级序列的皮尔逊相关系数,进而判断原特征的相关性。

结果解读:取值范围为[-1,1],解读逻辑与皮尔逊相关系数一致,绝对值越大相关性越强,0.10-0.29为小关联、0.30-0.49为中等关联、0.50及以上为大关联。

优势:抗异常值能力强,即使数据中存在极端值,也能保证检验结果的稳定性,适用于数值特征不服从正态分布、存在异常值,或特征之间存在非线性相关的场景,是皮尔逊相关系数的重要补充。

(4)肯德尔相关系数(Kendall's Tau Correlation)

同样属于非参数检验方法,核心是衡量两个特征取值排序的一致性,即两个样本在两个特征上的排序方向是否一致,通过计算“一致对”和“不一致对”的数量占比得到结果。

结果解读:取值范围为[-1,1],τ为1时表示两个特征的排序完全一致,τ为-1时表示排序完全相反,τ为0时表示两个特征相互独立。

适用场景:适用于样本量较小、存在异常值,或特征取值为有序分类(如评分、等级、排名)的场景,计算逻辑简单,但在样本量较大时,计算效率会低于斯皮尔曼等级相关系数。

(5)点二列相关系数(Point-Biserial Correlation)

专门用于**“一个数值特征+一个二分类特征(取值仅为0和1)”**的相关性检验场景,本质上是皮尔逊相关系数的特殊形式,是处理这类混合特征相关性的核心方法。

结果解读:取值范围为[-1,1],其绝对值越大,说明数值特征与二分类特征之间的相关性越强,适用于“收入(数值)与是否购买(0/1)”“分数(数值)与是否及格(0/1)”等典型场景。

(6)距离相关系数(Distance Correlation)

克服皮尔逊相关系数的弱点而生的检验方法,核心解决皮尔逊相关系数无法判断非线性相关的问题。

核心优势:若皮尔逊相关系数为0,无法断定两个特征独立(可能为非线性相关);但若距离相关系数为0,则可直接判定两个特征相互独立,能有效识别非线性相关关系。

实操要点:当特征间的关系接近线性相关时,皮尔逊相关系数仍为首选(计算速度快、能表征正负相关);当无法判断是否为线性相关时,用距离相关系数进行验证。

1.4 分类特征与分类特征的相关性检验

分类特征是指取值为离散型、无连续含义的特征,这类特征的取值仅代表不同的类别,不存在大小、强弱的对比关系,例如性别(男、女)、学历(本科、硕士、博士)、职业(教师、医生、工程师)等。对于分类特征与分类特征之间的相关性检验,核心目标是检验两个特征的取值分布是否相互独立,若相互独立则相关性弱,若不独立则存在明显相关性,除核心的卡方检验外,补充Fisher得分、F检验、互信息(含最大信息系数)等方法,适配不同的分析需求:

(1)卡方检验(Chi-Square Test)

卡方检验是分类特征与分类特征相关性检验中最常用、最基础的方法,其核心逻辑是基于列联表,通过对比观测值期望频数的偏差程度,判断两个分类特征是否相互独立。

核心步骤

  1. 构建列联表:根据两个分类特征的取值,构建m×n的列联表,记录每个(X_{i},Y_{j})组合的样本数量(观测值O_{ij});

  2. 计算期望频数:假设两个特征相互独立,计算每个组合的期望样本数量

  3. 计算卡方统计量:\chi^2 = \sum_{i=1}^{m} \sum_{j=1}^{n} \frac{(O_{ij} - E_{ij})^2}{E_{ij}},统计量越大,说明观测值与期望频数的差异越大,两个特征越不独立;

  4. 显著性检验:设定显著性水平α(通常取0.05),若p值<α,则拒绝“两个特征独立”的原假设,说明两者存在显著相关性。

实操注意:列联表中每个单元格的期望频数不宜过小,通常要求E_ij≥5,否则会影响检验结果的准确性,可通过合并类别解决;卡方检验对出现次数较少的特征易给出高分,需结合实际业务场景验证。

(2)Fisher得分

Fisher得分的核心逻辑是:好的特征应在同一类别内取值相似,在不同类别间取值差异大。Fisher得分越高,说明特征在不同类别间的差异性越大、在同一类别内的差异性越小,特征的区分度和相关性越强,适用于分类任务中特征与目标标签的相关性检验。

(3)F检验

主要用于判断分类特征与数值目标变量的线性相关性,也可用于分类特征间的相关性分析,核心通过计算F统计量衡量特征对类别的区分能力,F统计量越大,相关性越强。局限性:仅能表征线性相关关系,无法识别非线性相关。

(4)互信息与最大信息系数(Mutual Information & MIC)
① 互信息

基于信息论的相关性检验方法,核心是衡量两个分类特征之间的信息重叠度,即一个特征的取值能为另一个特征的取值提供多少有用信息,计算公式为:

I[X ; Y]=\sum_{X, Y} p(X, Y) \log _{2} \frac{p(X, Y)}{p(X) p(Y)}

结果解读:取值范围为[0, +∞),互信息值为0时表示两个特征相互独立,值越大说明信息重叠度越高,相关性越强。

核心优势:可处理多分类特征,不要求列联表的期望频数,适用范围比卡方检验更广,还能衡量非线性相关关系;同时会通过概率值打压出现次数较少的特征分数,避免卡方检验的高分偏差问题,是卡方检验的重要补充。

② 最大信息系数(MIC)

解决了互信息无法归一化、对连续变量离散化敏感的问题,是互信息的优化版本。其核心是先寻找最优的离散化方式,再将互信息值转换为标准化的度量方式,取值范围为[0,1],MIC值越大,特征间的相关性越强,适用于连续特征与分类特征、分类特征间的非线性相关检验。

(5)列联系数(Contingency Coefficient)

卡方统计量的标准化形式,核心解决卡方统计量无固定取值范围、无法直接衡量相关性强弱的问题,计算公式为:

C = \sqrt{\frac{\chi^2}{\chi^2 + n}}

其中\chi^2为卡方统计量,n为样本数量。

结果解读:取值范围为[0,1),越接近1说明两个分类特征的相关性越强,越接近0则相关性越弱,相比卡方统计量更便于直接解读相关性强弱。

1.5 数值特征与分类特征的相关性检验

针对数值特征与非二分类的多分类特征的相关性检验,无法直接使用点二列相关系数,需采用专属方法进行分析,核心分为三类,兼顾定性与定量:

  1. 数值特征离散化:将连续的数值特征通过分箱进行离散化,转换为有序分类特征,再使用分类特征与分类特征的相关性检验方法(如卡方检验、互信息)进行分析,是最常用的转换方法。

  2. 箱形图定性判断:绘制分类特征不同取值下数值特征的箱形图,若不同类别下数值特征的均值、方差、取值范围差异显著,则说明两者相关性强;反之则弱,可快速完成定性判断。

  3. Relief/Relief-F算法:Relief算法基于“假设间隔”思想,通过计算同类样本的近距离、异类样本的远距离,衡量特征对分类的贡献度,贡献度越高则相关性越强,适配二分类任务;Relief-F是其优化版本,适配多分类任务,是数值特征与分类特征相关性检验的经典定量方法。

1.6 过滤法完整实操流程

结合上述可视化、预处理、量化检验的全内容,过滤法的完整实操流程可总结为5步,适配所有特征类型的相关性分析,逻辑清晰、易上手:

  1. 可视化定性初判:根据特征类型选择散点图、折线图、箱形图,快速判断特征间是否存在明显的相关关系,初步筛选出疑似相关特征;

  2. 单特征方差筛选:使用方差选择法,剔除方差为0或接近0的无区分度特征,减少后续分析的特征数量;

  3. 划分特征类型:明确区分数值特征、二分类特征、多分类特征,确定分析场景(数值-数值、数值-二分类、数值-多分类、分类-分类);

  4. 选择量化检验方法:根据数据特点和分析场景匹配对应方法(如正态分布用皮尔逊、异常值用斯皮尔曼、分类特征用卡方/互信息、数值-多分类用Relief-F);

  5. 设定阈值筛选特征:根据检验结果设定合理阈值,保留相关性强的特征(如相关系数绝对值≥0.3、p值<0.05、互信息值≥0.1),剔除无关或冗余特征。

二、过滤法Python实操代码(完整可运行)

以下代码基于numpy、pandas、scipy、sklearn四大常用库,完整覆盖过滤法的全流程:包含可视化定性判断、方差选择法预处理、各类特征组合的量化检验,适配数值-数值、数值-二分类、数值-多分类、分类-分类四大核心场景,注释清晰,标注各方法的适用场景,可直接复制到Python环境中运行,也可根据实际数据集的特点灵活修改特征名称和筛选阈值。

# 1. 导入所需库,覆盖过滤法全流程(可视化、预处理、量化检验)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 导入相关性检验函数
from scipy.stats import pearsonr, spearmanr, kendalltau, chi2_contingency, pointbiserialr
# 导入特征选择相关函数(方差选择、互信息、卡方检验)
from sklearn.feature_selection import VarianceThreshold, mutual_info_classif, chi2, SelectKBest
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 2. 构造模拟数据集(覆盖所有检验场景,模拟真实业务数据分布)
np.random.seed(42)  # 固定随机种子,确保结果可复现
data = {
    # 数值特征(用于数值-数值、数值-二分类、数值-多分类检验)
    "age": np.random.randint(18, 60, 100),    # 年龄(18-60岁,连续数值)
    "income": np.random.randint(3000, 20000, 100),  # 收入(可能存在极端值)
    "score": np.random.randn(100)*10 + 80,    # 分数(服从正态分布,均值80,标准差10)
    # 二分类特征(用于数值-二分类检验)
    "is_purchase": np.random.randint(0, 2, 100),  # 是否购买(0=否,1=是)
    # 多分类特征(用于分类-分类、数值-多分类检验)
    "gender": np.random.choice(["男", "女"], 100),  # 性别(二分类)
    "education": np.random.choice(["本科", "硕士", "博士"], 100)  # 学历(多分类)
}
df = pd.DataFrame(data)
print("数据集前5行:\n", df.head())

# 3. 步骤1:可视化定性判断相关性
print("\n" + "="*60)
print("过滤法第一步:可视化定性初判相关性")
print("="*60)
# 3.1 散点图矩阵:数值特征间的两两相关性初判(age/income/score)
numeric_feats = ["age", "income", "score"]
pd.plotting.scatter_matrix(df[numeric_feats], figsize=(8, 8), c='k', marker='+',
                           diagonal='hist', alpha=0.8, range_padding=0.1)
plt.title("数值特征散点图矩阵", fontsize=12)
plt.tight_layout()
plt.show()

# 3.2 箱形图:数值特征与多分类特征相关性初判(score vs education)
plt.figure(figsize=(8, 5))
sns.boxplot(x="education", y="score", data=df)
plt.title("学历与分数的箱形图", fontsize=12)
plt.show()

# 4. 步骤2:单特征预处理——方差选择法剔除无效特征
print("\n" + "="*60)
print("过滤法第二步:方差选择法预处理")
print("="*60)
# 提取数值特征进行方差检验
selector = VarianceThreshold(threshold=0.1)  # 设定阈值,剔除方差<0.1的特征
selector.fit_transform(df[numeric_feats])
# 查看各特征方差
var_dict = dict(zip(numeric_feats, selector.variances_))
print("各数值特征方差:", var_dict)
# 保留方差达标特征
valid_numeric_feats = [k for k, v in var_dict.items() if v >= 0.1]
print("方差筛选后保留的数值特征:", valid_numeric_feats)

# 5. 步骤3-4:量化检验各类特征组合的相关性
# 5.1 场景1:数值特征与数值特征(皮尔逊、斯皮尔曼、肯德尔、协方差、距离相关系数)
print("\n" + "="*60)
print("场景1:数值特征与数值特征量化检验")
print("="*60)
for i in range(len(valid_numeric_feats)):
    for j in range(i+1, len(valid_numeric_feats)):
        x, y = df[valid_numeric_feats[i]], df[valid_numeric_feats[j]]
        # 皮尔逊(正态分布、无异常值)
        pear_r, pear_p = pearsonr(x, y)
        # 斯皮尔曼(异常值、非正态、非线性)
        spear_r, spear_p = spearmanr(x, y)
        # 肯德尔(小样本、有序分类)
        kend_tau, kend_p = kendalltau(x, y)
        # 协方差(仅判断相关方向)
        cov = np.cov(x, y)[0,1]
        # 输出结果,保留4位小数
        print(f"\n{valid_numeric_feats[i]} vs {valid_numeric_feats[j]}:")
        print(f"  皮尔逊相关系数:r={round(pear_r,4)}, p值={round(pear_p,4)}")
        print(f"  斯皮尔曼相关系数:r={round(spear_r,4)}, p值={round(spear_p,4)}")
        print(f"  肯德尔相关系数:tau={round(kend_tau,4)}, p值={round(kend_p,4)}")
        print(f"  协方差:{round(cov,2)}")

# 5.2 场景2:数值特征与二分类特征(点二列相关系数)
print("\n" + "="*60)
print("场景2:数值特征与二分类特征量化检验(点二列)")
print("="*60)
binary_feat = "is_purchase"
for num_feat in valid_numeric_feats:
    r, p = pointbiserialr(df[num_feat], df[binary_feat])
    print(f"{num_feat} vs {binary_feat}: 点二列r={round(r,4)}, p值={round(p,4)}")

# 5.3 场景3:分类特征与分类特征(卡方检验、互信息、列联系数)
print("\n" + "="*60)
print("场景3:分类特征与分类特征量化检验")
print("="*60)
cat_feats = ["gender", "education"]
# 卡方检验(构建列联表)
contingency = pd.crosstab(df[cat_feats[0]], df[cat_feats[1]])
chi2_val, chi2_p, _, _ = chi2_contingency(contingency)
# 互信息(多分类、非线性)
mi = mutual_info_classif(df[cat_feats], df[cat_feats[0]], discrete_features=True)[1]
# 列联系数(标准化卡方结果)
contingency_coef = np.sqrt(chi2_val / (chi2_val + len(df)))
# 卡方检验筛选topk特征(示例:k=1)
sk = SelectKBest(chi2, k=1)
sk.fit_transform(df[cat_feats].apply(lambda x: pd.factorize(x)[0]), df[binary_feat])
print(f"{cat_feats[0]} vs {cat_feats[1]}:")
print(f"  卡方统计量:{round(chi2_val,4)}, p值={round(chi2_p,4)}")
print(f"  互信息值:{round(mi,4)}")
print(f"  列联系数:{round(contingency_coef,4)}")

# 5.4 场景4:数值特征与多分类特征(互信息法)
print("\n" + "="*60)
print("场景4:数值特征与多分类特征量化检验(互信息)")
print("="*60)
multi_cat_feat = "education"
for num_feat in valid_numeric_feats:
    # 数值特征与多分类特征的互信息计算(需将分类特征编码)
    mi_val = mutual_info_classif(df[[num_feat]], df[multi_cat_feat].factorize()[0], discrete_features=False)[0]
    print(f"{num_feat} vs {multi_cat_feat}: 互信息值={round(mi_val,4)}")

# 6. 步骤5:设定阈值筛选最终特征(以score为目标变量)
print("\n" + "="*60)
print("过滤法第五步:设定阈值筛选最终特征(目标变量:score)")
print("="*60)
target = "score"
test_feats = ["age", "income", "is_purchase"]
# 设定筛选阈值
threshold_r = 0.3  # 相关系数绝对值阈值
threshold_p = 0.05  # 显著性p值阈值
selected_feats = []

for feat in test_feats:
    if feat in valid_numeric_feats:
        # 数值特征:皮尔逊相关系数
        r, p = pearsonr(df[feat], df[target])
        print(f"{feat} - {target}: 皮尔逊r={round(r,4)}, p值={round(p,4)}")
    else:
        # 二分类特征:点二列相关系数
        r, p = pointbiserialr(df[feat], df[target])
        print(f"{feat} - {target}: 点二列r={round(r,4)}, p值={round(p,4)}")
    # 判断是否通过筛选
    if abs(r) >= threshold_r and p < threshold_p:
        selected_feats.append(feat)

print(f"\n设定阈值(|r|≥{threshold_r} & p<{threshold_p})后,最终筛选的特征:{selected_feats}")

三、嵌入法(Embedded Method)

嵌入法是将特征筛选过程与机器学习模型的训练过程深度结合的特征相关性分析方法,核心逻辑是:在模型训练的同时,让模型自动学习每个特征对目标变量的重要性,并以特征重要性作为衡量特征相关性的核心标准,进而完成特征筛选,筛选出的特征与模型高度适配。

3.1 核心特点

  • 优势:充分考虑特征之间的交互效应,筛选结果的精准度高于过滤法;无需单独进行复杂的统计检验,在模型训练中同步完成筛选,流程更高效;

  • 劣势:高度依赖具体的机器学习模型,不同模型的特征重要性计算逻辑不同,筛选结果的通用性差;计算复杂度高于过滤法,不适用于超大规模数据集的初步筛选。

3.2 常用方法

  1. 决策树类模型:包括随机森林、GBDT、XGBoost、LightGBM等,通过计算特征的分裂增益(信息增益、基尼指数、平方误差减少量)衡量特征重要性,分裂增益越大,特征与目标变量的相关性越强;

  2. 线性/逻辑回归模型:通过特征的系数绝对值衡量相关性,系数绝对值越大,特征对目标变量的影响越大;注意:使用前需对特征进行标准化,消除尺度对系数的影响;

  3. L1正则化模型:即Lasso回归(回归任务)/L1逻辑回归(分类任务),通过对特征系数施加L1惩罚,将无关或冗余特征的系数压缩为0,自动实现特征筛选,留存的非0系数特征即为相关性强的特征。

四、包装法(Wrapper Method)

包装法是一种基于贪心策略的特征筛选方法,其核心逻辑与过滤法、嵌入法均不同:它不依赖统计指标或模型自带的特征重要性,而是将特征子集作为模型的输入,通过反复训练模型、评估模型性能(如准确率、AUC、MSE),判断特征子集的优劣,进而逐步筛选出最优特征子集,本质是“试错式”的特征组合优化。

4.1 核心特点

  • 优势:充分考虑特征之间的交互效应和组合效应,筛选出的特征子集能使模型性能达到最优,是三大方法中筛选精度最高的;

  • 劣势:计算复杂度极高,需要反复训练大量不同的特征子集,耗时耗算力,不适用于大规模数据集;容易出现过拟合,筛选结果过度依赖当前的模型和评估指标,泛化能力较差。

4.2 常用方法

  1. 向前选择:从空特征集开始,每次向子集中添加一个能使模型性能提升最明显的特征,反复训练模型,直至模型性能不再提升为止;

  2. 向后消除:从全特征集开始,每次从子集中删除一个对模型性能影响最小的特征,反复训练模型,直至模型性能不再提升为止;

  3. 逐步选择:结合向前选择和向后消除的优势,每次添加一个优质特征后,立即检查并删除子集中的冗余特征,兼顾筛选效率和模型性能,是实际应用中最常用的包装法。

五、三大方法对比与实操选型建议

过滤法、嵌入法、包装法各有优劣,核心差异体现在计算复杂度、特征交互考虑、通用性、筛选精度等方面,为方便实际建模时快速选型,现将三大方法的核心对比汇总如下:

对比维度

过滤法

嵌入法

包装法

核心逻辑

基于统计指标独立筛选

模型训练中嵌入筛选

贪心策略筛选最优子集

考虑特征交互

计算复杂度

低(最快)

高(最慢)

模型依赖性

无(通用性强)

强(通用性差)

强(通用性差)

筛选精度

基础(初步筛选)

较高(模型适配)

最高(性能最优)

适用数据集

大规模、超大规模

中等规模

小规模

实操选型核心策略

实际机器学习建模中,不建议单独使用某一种方法,优先采用**“过滤法→嵌入法→包装法(可选)”**的组合策略,兼顾效率、精度和模型性能:

  1. 过滤法做初步筛选:用可视化+方差选择法+量化检验,快速剔除无区分度、无关、高度冗余的特征,将特征维度降至合理范围,大幅降低后续建模的计算成本,这是所有场景的基础步骤

  2. 嵌入法做模型适配筛选:基于实际建模选择的模型(如随机森林、XGBoost、逻辑回归),通过特征重要性进一步筛选,保留与模型适配、具有交互效应的优质特征,提升模型核心性能;

  3. 包装法做极致优化(可选):仅当数据集为小规模、对模型性能要求极高(如竞赛场景)、且算力充足时,使用包装法对嵌入法筛选后的特征进行子集优化,追求模型性能的极致提升。

六、总结

特征相关性分析是机器学习建模前的关键准备工作,而过滤法作为三大方法的基础,是建模者必须掌握的核心技能,其优势在于流程简单、计算高效、通用性强,能快速完成特征的初步筛选,为后续建模奠定坚实基础。

本文对过滤法进行了全面拆解,补充了可视化定性判断、单特征方差预处理、距离相关系数、Relief-F、互信息与最大信息系数等关键内容,完善了数值-多分类这一易遗漏的场景,同时提供了覆盖全流程的Python实操代码,可直接应用于实际项目;对于嵌入法和包装法,需结合数据集规模和建模需求合理选择,核心作为过滤法的后续优化手段。

掌握特征相关性分析的核心逻辑和实操方法,能有效提升特征质量,减少模型过拟合风险,最终实现模型性能的大幅提升,是机器学习从数据到建模的重要桥梁。

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐