一文搞懂机器学习中的特征降维!

作者:aicoting日期:2026/1/12

推荐直接网站在线阅读:aicoting AI算法面试学习在线网站

特征工程(Feature Engineering) 是机器学习流程中将原始数据转换为适合模型学习的特征的关键步骤。它直接决定了模型能否高效捕捉数据中的规律。好的特征可以显著提升模型性能,而差的特征即使模型再复杂也难以取得好效果。

特征工程的核心目标是:

  • 提取有效信息:将原始数据中有价值的信号转化为模型可以理解的特征;
  • 减少冗余与噪声:去掉无关或多余的特征,使模型更简洁、更泛化;
  • 增强表达能力:通过构造、组合或降维生成新的特征,使模型能够更好地捕捉数据的复杂关系;
  • 提高训练效率:减少特征维度、统一尺度,使模型训练更快、收敛更稳定。

特征工程通常包括三个主要环节:

  1. 特征选择:识别并保留对预测任务最有贡献的特征;
  2. 特征构造:基于现有特征生成新的、更具信息量的特征,例如多项式特征、交互特征;
  3. 特征降维:通过方法如 PCA、LDA、ICA,将高维特征压缩到低维空间,同时保留主要信息。

特征工程在机器学习中与算法本身同等重要。这也是机器学习和深度学习的最大区别所在,通过合理的特征处理,可以让简单的模型也取得出色的效果,为后续模型训练和优化打下坚实基础。

下面我们来看一下特征降维。

什么是特征降维?

特征降维是指在 保留数据主要信息的前提下,将高维特征映射到低维空间 的过程。它在机器学习中非常重要,尤其面对高维数据时,可以:

  • 减少计算成本和存储空间;
  • 降低过拟合风险,提高模型泛化能力;
  • 消除特征冗余和噪声,提高训练效率。

特征降维的基本思路

特征降维通常有两个目标:

  1. 保持数据的主要信息(方差/信息量);
  2. 降低维度,简化模型结构。 在数学上,给定原始数据矩阵 ,通过降维方法得到低维表示 ,其中 。

特征降维方法分类

1.主成分分析(PCA, Principal Component Analysis)

原理:PCA 通过线性变换,将原始特征投影到方差最大的方向(主成分),保留数据中最重要的信息。

步骤如下:

  1. 均值中心化:
  2. 计算协方差矩阵:
  3. 特征值分解:
  4. 选择前 k 个特征向量 构成投影矩阵 W,得到降维结果:
1import numpy as np
2from sklearn.decomposition import PCA
3
4# 构造数据
5X = np.array([[2.5, 2.4],
6              [0.5, 0.7],
7              [2.2, 2.9],
8              [1.9, 2.2]])
9
10# PCA 降到 1 
11pca = PCA(n_components=1)
12X_pca = pca.fit_transform(X)
13print(X_pca)
14

输出如下:

PCA常用于高维数据可视化、噪声去除,作为特征预处理,提高模型效率。

2.线性判别分析(LDA, Linear Discriminant Analysis)

原理:LDA 是一种监督降维方法,通过最大化类间方差、最小化类内方差,将数据投影到低维空间,增强类别可分性。

  • 类内散度矩阵 :
  • 类间散度矩阵 :
  • 求解广义特征值问题:
1# 用的是 iris 数据集
2from sklearn.datasets import load_iris
3from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
4
5data = load_iris()
6X = data.data   # shape (150, 4)
7y = data.target # shape (150,)
8
9lda = LinearDiscriminantAnalysis(n_components=1)
10X_lda = lda.fit_transform(X, y)
11print(X_lda.shape)
12

输出如下:

LDA常用于分类任务特征降维,提高模型的类别可分性,适合类别标签已知的数据集。

3.独立成分分析(ICA, Independent Component Analysis)

原理:ICA 假设观测数据是若干独立非高斯信号的线性混合,通过寻找独立成分分解原始特征。 优点:

  • 去除混合噪声;
  • 可用于信号分离(如 EEG、音频源分离)。
1from sklearn.decomposition import FastICA
2
3ica = FastICA(n_components=2)
4X_ica = ica.fit_transform(X)
5print(X_ica)
6

输出如下:

ICA常用于信号处理、音频源分离等任务,通过独立成分分析,将混合信号分离为原始独立信号。

4.非线性降维方法

  1. t-SNE:适合高维数据可视化,保留局部结构;
  2. UMAP:保留局部和全局结构,速度快,可扩展性好。
1from sklearn.manifold import TSNE
2
3tsne = TSNE(n_components=2, random_state=42)
4X_tsne = tsne.fit_transform(X)
5print(X_tsne.shape)
6

t-SNE常用于高维数据可视化,将数据映射到 2D 或 3D 空间,展示数据分布和聚类结构。

特征降维的部分到此就结束啦,是不是也没有那么难,你现在已经知道了特征降维是 特征工程的重要环节,与特征选择和特征构造结合,可以让模型在高维数据中保持高效和稳定。

最新的文章都在公众号aicoting更新,别忘记关注哦!!


一文搞懂机器学习中的特征降维!》 是转载文章,点击查看原文


相关推荐


Day 12:Git配置详解:用户信息、编辑器、颜色等配置
CNRio2026/1/4

“你有没有遇到过这样的尴尬:提交代码时,Git显示’Author: Unknown’,然后你发现是自己写的代码,却不知道是谁提交的?别担心,这就像你写了一封信,却没写署名一样!” 🌟 为什么说Git配置是"代码身份证"? 想象一下,你正在写一本小说,每章都署名"匿名作者"。读者会怎么想?他们可能会怀疑这本书是不是真的由你写的。Git配置就是你的"代码身份证",它告诉世界"这代码是我写的"。 正如《Pro Git》中所说: “Git的配置系统是分层的,有三个层次:系统级、全局级和本地级。系统


LeetCode 热题100 --- 双指针专区
谎言西西里2025/12/26

283. 移动零 - 力扣(LeetCode) 题目分析: 题目要求将数组 nums 中所有 0 移动至数组末尾,同时保持其他非零元素的相对顺序不变,并且要求在原数组上进行操作。 核心要求: 0 要移动至数组末尾 非零元素相对位置不变 在原数组上进行操作 解法一(暴力使用数组方法) 遍历数组将其中所有为 0 的数直接使用splice删除并且记录 0 的个数,最后通过push填入“移动”的 0 var moveZeroes = function(nums) { let n = 0;


【大前端】【Android】 Android 手机上导出已安装 App 的 APK
柯南二号2025/12/17

根据是否有 root / adb / 仅手机操作,常见有 4 种靠谱方式。按「实用度 + 成本」整理👇 一、最推荐:ADB 导出(无需 Root,最稳定)⭐️ 适合开发者、抓包、逆向、分析三方 APK 1️⃣ 开启 USB 调试 设置 → 关于手机 → 连续点击“版本号” → 开发者模式 开发者选项 → USB 调试 2️⃣ 找到 APK 路径 adb shell pm list packages | grep wechat 例如: package:com.tence


Agent 入门科普:从"人工智障"到"数字打工人"的进化史
无限大62025/12/9

🤖 Agent 入门科普:从"人工智障"到"数字打工人"的进化史 大家好,欢迎来到无限大的博客,这个专栏是新开的,打算讲一讲Agent,其实早就有学习的打算了 近期在逛github的时候看到一个高star项目,叫做Hello-Agents,项目地址是[github.com/datawhalech…] 我的文章也是参考了这个内容写的,这个系列更新比较慢,因为我也是边学边写的,所以会比较慢,但是我会尽量写的详细一些,用更多贴近生活的抽象案例来讲解,希望能帮助到大家 引言:当 AI 开始自己"打


浅谈C++与C语言二进制文件差异(从一次链接错误说起)
码事漫谈2025/11/29

"undefined reference to `func' ",这个看似简单的链接错误背后,隐藏着C与C++二进制文件的根本差异。很多开发者认为C++只是"C with Classes",却不知这对"亲密兄弟"在二进制层面早已分道扬镳。 在软件开发的演进历程中,C++作为C语言的延伸,始终保持着高度的语法兼容性。这种表面上的相似性却掩盖了两者在编译产物层面的深刻差异。本文将从二进制文件的视角,深入剖析C++与C语言在目标代码生成机制上的本质区别,揭示面向对象、泛型编程等高级特性在机器层面的实现


Polyfill方式解决前端兼容性问题:core-js包结构与各种配置策略
漂流瓶jz2026/1/20

简介 在之前我介绍过Babel:解锁Babel核心功能:从转义语法到插件开发,Babel是一个使用AST转义JavaScript语法,提高代码在浏览器兼容性的工具。但有些ECMAScript并不是新的语法,而是一些新对象,新方法等等,这些并不能使用AST抽象语法树来转义。因此Babel利用core-js实现这些代码的兼容性。 core-js是一个知名的前端工具库,里面包含了ECMAScript标准中提供的新对象/新方法等,而且是使用旧版本支持的语法来实现这些新的API。这样即使浏览器没有实现标准

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客