摘要:高相关性筛选法是机器学习中用于特征选择的技术,通过计算特征间的相关系数并设定阈值来移除冗余特征。该方法能减少多重共线性、提升模型性能并降低计算成本,但也存在信息丢失、无法处理非线性关系等局限。Python实现时需计算相关矩阵并设定阈值筛选特征,最终保留关键特征用于模型训练。该技术适用于线性关系数据集,但需权衡简化模型与潜在信息损失的风险。
目录
机器学习 - 高相关性筛选法
概述
工作原理
核心原理
实现步骤
优势
局限性
示例:Python 实现高相关性筛选法
输出结果
补充说明
优点详解
缺点详解
机器学习 - 高相关性筛选法
概述
高相关性筛选法是机器学习中一种特征选择技术,用于识别并移除数据集中高度相关的特征。该技术通过减少模型训练所用的特征数量,提升模型性能,同时避免多重共线性问题 —— 即两个或多个预测变量之间存在高度相关性的情况。
工作原理
高相关性筛选法的核心是计算数据集中每对特征之间的相关性,然后移除每对高度相关特征中的一个。具体操作是为特征间的相关系数设定阈值,若相关系数的绝对值超过该阈值,则移除其中一个特征。
核心原理
特征与目标变量的相关性衡量单个特征对目标变量的解释能力,相关性越高,该特征对模型的贡献可能越大。
- 连续型目标变量(回归任务):用皮尔逊相关系数(Pearson Correlation Coefficient),取值范围
[-1,1],绝对值越接近 1 相关性越强。 - 离散型目标变量(分类任务):用斯皮尔曼相关系数(Spearman Correlation Coefficient)、互信息(Mutual Information)或卡方检验(Chi-square Test)。
- 连续型目标变量(回归任务):用皮尔逊相关系数(Pearson Correlation Coefficient),取值范围
特征与特征之间的相关性衡量特征间的冗余程度,若两个特征高度相关,保留其中一个即可,避免多重共线性问题。
- 常用指标:皮尔逊相关系数、斯皮尔曼相关系数。
实现步骤
- 计算数据集的相关矩阵;
- 设定特征间相关系数的阈值;
- 找出相关系数超过阈值的特征对;
- 从每对高度相关的特征中移除其中一个;
- 使用剩余特征训练机器学习模型。
优势
使用高相关性筛选法具有以下优势:
- 减少多重共线性:可有效缓解多重共线性问题(多个特征间高度相关的情况),而多重共线性会对机器学习模型的性能产生负面影响;
- 提升模型性能:通过移除高度相关的特征,有助于改善机器学习模型的表现;
- 简化模型:特征数量减少后,模型更易于解释和理解;
- 节省计算资源:所需特征减少,训练机器学习模型的计算资源消耗也随之降低。
局限性
高相关性筛选法也存在一些局限性:
- 信息丢失:可能会移除包含重要信息的特征,导致数据信息丢失;
- 对非线性关系不适用:该方法假设特征间的关系为线性,对于特征间存在非线性关系的数据集,其效果可能不佳;
- 影响因变量:移除高度相关的特征有时可能对因变量产生负面影响,尤其是当这些特征与因变量高度相关时;
- 选择偏差:若移除了对预测因变量至关重要的特征,可能会引入选择偏差。
示例:Python 实现高相关性筛选法
# 导入必要的库 import pandas as pd import numpy as np # 加载糖尿病数据集 diabetes = pd.read_csv(r'C:\Users\Leekha\Desktop\diabetes.csv') # 定义预测变量(X)和目标变量(y) X = diabetes.iloc[:, :-1].values y = diabetes.iloc[:, -1].values # 计算相关矩阵 corr_matrix = np.corrcoef(X, rowvar=False) # 设置高相关性的阈值 threshold = 0.8 # 找出高度相关特征的索引 high_corr_indices = np.where(np.abs(corr_matrix) > threshold) # 创建待移除的特征对集合 features_to_remove = set() # 遍历高度相关特征的索引并添加到待移除集合 for i, j in zip(*high_corr_indices): if i != j and (j, i) not in features_to_remove: features_to_remove.add((i, j)) # 将特征对集合转换为列表 features_to_remove = list(features_to_remove) # 从每对高度相关特征中移除一个 X_filtered = np.delete(X, [j for i, j in features_to_remove], axis=1) # 打印筛选后数据集的形状 print('筛选后数据集的形状:', X_filtered.shape)输出结果
运行上述代码后,将得到以下输出:
筛选后数据集的形状: (768, 8)补充说明
优点详解
- 减少多重共线性:多重共线性会导致模型参数估计不稳定、不可靠,高相关性筛选法通过剔除冗余的相关特征,从源头降低这种影响;
- 提升模型性能:去除无关或冗余的高度相关特征后,模型能更聚焦于关键信息,减少噪声干扰,从而提升预测准确性;
- 简化模型解释:特征数量减少后,用户更容易理解每个特征对模型预测结果的影响,降低模型的复杂度;
- 节省计算成本:特征越少,模型训练、验证和预测过程中所需的内存、计算时间等资源越少,尤其适用于大规模数据集。
缺点详解
- 信息丢失风险:即使两个特征高度相关,其中一个特征可能仍包含另一个特征未覆盖的重要信息,直接移除可能导致模型性能下降;
- 仅适用于线性关系:该方法基于线性相关系数(如皮尔逊相关系数)计算,无法捕捉特征间的非线性相关关系,对非线性数据集适应性差;
- 可能影响因变量拟合:若被移除的特征与因变量存在强相关性,可能导致模型无法充分学习到与目标变量相关的信息,进而降低预测效果;
- 潜在选择偏差:筛选过程仅基于特征间的相关性,未考虑特征与因变量的关联程度,可能误删对预测至关重要的特征,引入选择偏差。