当前位置: 首页 > news >正文

特征降维实战:高效选择关键特征

特征工程-特征降维


特征降维

实际数据中,特征过多会增加计算量、引入噪声、降低模型泛化能力。降维的目标是:

  • 减少维度,同时尽可能保留重要信息

降维的好处

  • 降低计算成本:减少训练时间与资源消耗。
  • 去除噪声:移除冗余或无关特征,缓解过拟合。

降维方法分为两类

  • 特征选择:直接挑选最有用的原始特征。
  • 特征提取:将原特征通过变换生成新的低维特征(如 PCA)。

1. 特征选择

(a) 低方差过滤(VarianceThreshold)

核心思想:方差小的特征变化不大,区分度低,可删除。

  1. 计算方差
    σ2=1n∑i=1n(xi−xˉ)2 \sigma^2 = \frac{1}{n} \sum_{i=1}^n (x_i - \bar{x})^2 σ2=n1i=1n(xixˉ)2

  2. 设定阈值:方差低于阈值的特征视为无用。

  3. 过滤特征:移除低方差特征。

代码示例

from sklearn.feature_selection import VarianceThreshold
import numpy as np
np.random.seed(42)
data = np.random.randint(0,10,(5,3))
print(data)
transfer = VarianceThreshold(threshold=2)
data_new = transfer.fit_transform(data)
print(data_new)
transfer.variances_ # 获取每个特征方差

输出结果:

[[6 3 7][4 6 9][2 6 7][4 3 7][7 2 5]][[6 3][4 6][2 6][4 3][7 2]]array([3.04, 2.8 , 1.6 ])

从结果可以看出,特征从我们的三维到二维,保留原始的特征,只是将方差小的特征进行去除。

0f6a26956923bf7f3c6a4243af23cef4_720


(b) 皮尔逊相关系数(Pearson Correlation)

皮尔逊相关系数(Pearson correlation coefficient)是一种度量两个变量之间线性相关性的统计量。它提供了两个变量间关系的方向(正相关或负相关)和强度的信息。皮尔逊相关系数的取值范围是 [−1,1],其中:

  • r=1r=1r=1 表示完全正相关,即随着一个变量的增加,另一个变量也线性增加。
  • r=−1r=-1r=1 表示完全负相关,即随着一个变量的增加,另一个变量线性减少。
  • r=0r=0r=0 表示两个变量之间不存在线性关系。

正相关、负相关、不相关

  • 正相关:一个变量增加,另一个也增加;
  • 负相关:一个变量增加,另一个减少;
  • 不相关:变量变化无显著线性关系。

皮尔逊相关系数公式
r=∑i=1n(xi−xˉ)(yi−yˉ)∑i=1n(xi−xˉ)2∑i=1n(yi−yˉ)2 r = \frac{\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^n (x_i - \bar{x})^2} \sqrt{\sum_{i=1}^n (y_i - \bar{y})^2}} r=i=1n(xixˉ)2i=1n(yiyˉ)2i=1n(xixˉ)(yiyˉ)

  • ∣r∣≈1|r| \approx 1r1:强相关;

  • ∣r∣≈0|r| \approx 0r0:弱相关。

  • ∣r∣<0.4|r|<0.4r<0.4为低度相关; $ 0.4<=|r|<0.7$为显著相关; 0.7<=∣r∣<10.7<=|r|<10.7<=r<1为高度相关

    scipy.stats.personr(x, y) 计算两特征之间的相关性

    返回对象有两个属性:

    statistic皮尔逊相关系数[-1,1]

    pvalue零假设(了解),统计上评估两个变量之间的相关性,越小越相关

代码示例

import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
from scipy.stats import pearsonrdata = load_breast_cancer()
X = pd.DataFrame(data.data,columns=data.feature_names)
y = data.target
# X.head()correlations = [] # 保存相关系数
p_values = [] # 保存p值for col in X.columns:corr, p = pearsonr(X[col], y)  # 计算相关系数和p值correlations.append(corr)p_values.append(p)corr_df = pd.DataFrame({"feature_names": X.columns,  # 特征名称"correlations": correlations,  # 相关系数"p_values": p_values,  # p值}
)corr_df
feature_namescorrelationsp_values
0mean radius-0.7300298.465941e-96
1mean texture-0.4151854.058636e-25
2mean perimeter-0.7426368.436251e-101
3mean area-0.7089844.734564e-88
4mean smoothness-0.3585601.051850e-18
5mean compactness-0.5965343.938263e-56
6mean concavity-0.6963609.966556e-84
7mean concave points-0.7766147.101150e-116
8mean symmetry-0.3304995.733384e-16
9mean fractal dimension0.0128387.599368e-01
10radius error-0.5671349.738949e-50
11texture error0.0083038.433320e-01
12perimeter error-0.5561411.651905e-47
13area error-0.5482365.895521e-46
14smoothness error0.0670161.102966e-01
15compactness error-0.2929999.975995e-13
16concavity error-0.2537308.260176e-10
17concave points error-0.4080423.072309e-24
18symmetry error0.0065228.766418e-01
19fractal dimension error-0.0779726.307355e-02
20worst radius-0.7764548.482292e-116
21worst texture-0.4569031.078057e-30
22worst perimeter-0.7829145.771397e-119
23worst area-0.7338252.828848e-97
24worst smoothness-0.4214656.575144e-26
25worst compactness-0.5909987.069816e-55
26worst concavity-0.6596102.464664e-72
27worst concave points-0.7935661.969100e-124
28worst symmetry-0.4162942.951121e-25
29worst fractal dimension-0.3238722.316432e-15

2. 主成分分析(PCA)

核心思想:找到方差最大的投影方向,用较少的新特征表示大部分信息。

PCA的核心目标是从原始特征空间中找到一个新的坐标系统,使得数据在新坐标轴上的投影能够最大程度地保留数据的方差,同时减少数据的维度。

(a) 原理

image-20240117115040883

x0x_0x0投影到LLL的大小为x0∗cosαx_0*cos \alphax0cosα

y0y_0y0投影到LLL的大小为y0∗sinαy_0*sin\alphay0sinα

使用(x0,y0)(x_0,y_0)(x0,y0)表示一个点, 表明该点有两个特征, 而映射到L上有一个特征就可以表示这个点了。这就达到了降维的功能 。

投影到L上的值就是降维后保留的信息,投影到与L垂直的轴上的值就是丢失的信息。保留信息/原始信息=信息保留的比例

(a) 几何解释
  • 将二维点投影到一条直线上;
  • 保留投影(信息最大化),舍弃垂直方向(信息最小化)。

img

img

(b) 数学步骤
  1. 数据中心化;

  2. 计算协方差矩阵;

  3. 求解特征值与特征向量;

  4. 选取前 kkk 个主成分;

  5. 投影:

    Z=XWkZ = X W_kZ=XWk

© 代码示例
import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
data = load_breast_cancer()
X = data.data
y = data.target
feature_names = data.feature_names
feature_names
# 标准化
scaler = StandardScaler()
X_std = scaler.fit_transform(X)
# PCA 降维保留2维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_std)
X_pca
# 可视化PCA结果
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falseplt.figure(figsize=(10, 10))
plt.scatter(X_pca[:,0],X_pca[:,1],c=y,cmap='coolwarm',edgecolor='k',s=100)
plt.xlabel('PC1-主成分1')
plt.ylabel('PC2-主成分2')
plt.title('PCA降维可视化')class_labels = {0:'良性',1:'恶性'}
# 设置颜色映射
colors = plt.cm.coolwarm(np.linspace(0,1,len(class_labels)))
# 创建图例
legend_elements = [Patch(facecolor=colors[i],label=class_labels[i]) for i in class_labels.keys()]
plt.legend(handles=legend_elements,title='类别')
plt.show()

image-20250804190714404


总结提炼

降维方法对比

方法思路是否保留原始特征适用场景
低方差过滤删除变化小的特征初步清洗
皮尔逊相关系数选择与目标或特征不冗余的特征可解释性强
PCA通过投影生成新特征高维连续特征

实践建议

  • 先用特征选择清理冗余;
  • 再用 PCA 压缩高维特征;
  • 注重可解释性时用特征选择,注重信息保留时用 PCA

好的,可以把 PCA矩阵左乘 结合起来总结矩阵乘法的几何意义。


1. PCA 本质是矩阵左乘

假设原始数据矩阵是:
X∈Rn×d X \in \mathbb{R}^{n \times d} XRn×d

  • nnn:样本数量
  • ddd:特征数量

PCA 通过线性变换把 dd-维特征降到 kk-维:
Z=XWk Z = X W_k Z=XWk
其中:

  • Wk∈Rd×kW_k \in \mathbb{R}^{d \times k}WkRd×k:投影矩阵,由协方差矩阵的前 kk 个特征向量组成;
  • Z∈Rn×kZ \in \mathbb{R}^{n \times k}ZRn×k:降维后的表示。

所以 PCA 实际上就是把原始矩阵 XXX 左乘 一个投影矩阵 WkW_kWk,将原特征映射到新的坐标系。


2. 矩阵左乘的几何意义

  1. 旋转(改变坐标系):如果 WkW_kWk 是正交矩阵(特征向量正交化),左乘相当于把数据旋转到“主成分方向”;
  2. 投影(降维):只取前 kkk 个主成分,相当于把高维点投影到一个低维超平面;
  3. 缩放(方差大小):如果再乘以特征值的平方根,会体现不同主成分的方差大小。

直观示例

二维数据 XXX
X=[x1y1x2y2x3y3] X = \begin{bmatrix} x_1 & y_1 \\ x_2 & y_2 \\ x_3 & y_3 \end{bmatrix} X=x1x2x3y1y2y3
PCA 找到两个主成分w1w_1w1, w2w_2w2,组成投影矩阵:
W=[w11w12w21w22] W = \begin{bmatrix} w_{11} & w_{12} \\ w_{21} & w_{22} \end{bmatrix} W=[w11w21w12w22]
降维到一维时只取第一列 w1w_1w1
Z=Xw1=[x1y1x2y2x3y3][w11w21]=[x1w11+y1w21x2w11+y2w21x3w11+y3w21] Z = X w_1 = \begin{bmatrix} x_1 & y_1 \\ x_2 & y_2 \\ x_3 & y_3 \end{bmatrix} \begin{bmatrix} w_{11} \\ w_{21} \end{bmatrix} = \begin{bmatrix} x_1 w_{11} + y_1 w_{21} \\ x_2 w_{11} + y_2 w_{21} \\ x_3 w_{11} + y_3 w_{21} \end{bmatrix} Z=Xw1=x1x2x3y1y2y3[w11w21]=x1w11+y1w21x2w11+y2w21x3w11+y3w21

几何意义:把每个点投影到“最大方差方向”的直线上。


3. 矩阵乘法的统一解释

  • 行视角:矩阵左乘 = “对所有样本进行同一个线性变换”;
  • 列视角:矩阵左乘 = “用原特征的线性组合生成新特征”。

4. 总结:矩阵左乘的作用

  1. 坐标系变换(旋转+投影):改变数据的表示方式;
  2. 信息压缩:PCA 通过舍弃小方差的方向,实现降维;
  3. 保留主要结构:前 kkk 个主成分最大化保留方差信息。
http://www.dtcms.com/a/314676.html

相关文章:

  • [Oracle] TO_CHAR()函数
  • PandasAI连接LLM对MySQL数据库进行数据分析
  • 衡石科技HENGSHI SENSE 6.0:技术架构全面革新,开启智能分析新纪元
  • 【Pytorch✨】神经网络训练分类器
  • 分布式光伏气象站:为分散电站装上 “智慧之眼”
  • 我的创作纪念日____在 CSDN一年来的成长历程和收获
  • 【2025-08-04 Java学习小记】
  • vxe-table 实现列个性化自定义列功能,自动记忆用户的操作列状态,完整的详细教程
  • 【学习笔记】Manipulate-Anything(基于视觉-语言模型的机器人自动化操控系统)
  • 系统信息及进程管理命令
  • 【0基础3ds Max】常用快捷键
  • Planner 5D v2.29.0 安卓高级解锁版,手机3D家装,全套家具免费
  • [3D数据存储] Archive (File Container) | 创建/写入/读取 | 存储格式HDF5
  • SpringMVC 6+源码分析(三)DispatcherServlet实例化流程 2--(url 与contrller类如何进行映射)
  • 人工智能开发框架 10. MNIST手写数字识别任务(三)
  • 补:《每日AI-人工智能-编程日报》--2025年7月27日
  • STM32 串口收发HEX数据包
  • 汇川PLC通过ModbusTCP转Profinet网关连接西门子PLC配置案例
  • Linux Epool的作用
  • el-image图片预览下标错乱--解决:initial-index
  • 体验Java接入langchain4j运用大模型OpenAi
  • [激光原理与应用-134]:光学器件 - 图解透镜原理和元件
  • stm32/gd32驱动DAC8830
  • 川翔云电脑:引领开启算力无边界时代
  • 【云馨AI-大模型】2025年8月第一周AI浪潮席卷全球:创新与政策双轮驱动
  • Spring核心之面向切面编程(AOP)
  • 专题:2025生命科学与生物制药全景报告:产业图谱、投资方向及策略洞察|附130+份报告PDF、原数据表汇总下载
  • mysql远程登陆失败
  • 昇思学习营-模型推理和性能优化学习心得
  • 北京手机基站数据分享:9.3万点位+双格式,解锁城市通信「基础设施地图」