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

机器学习---特征降维

一、为什么要降维?

1. 直观比喻

假设你要描述一个人:

  • 高维描述:身高、体重、发色、鞋码、星座、血型、喜欢的电影...(100个特征)

  • 降维后:"运动型"(身高+体重)、"文艺型"(喜欢的电影+书籍)(2个特征)

2. 实际意义
  • 解决维度灾难:特征太多会导致数据稀疏,模型难以学习

  • 提升效率:减少计算时间,降低存储需求

  • 可视化需求:人类只能理解2D/3D图形


二、主流降维方法

方法1:PCA(主成分分析)

核心思想:找到数据中方差最大的方向,将数据投影到这些方向上。

生活化比喻

把三维的西瓜🍉拍成二维照片,选择最能体现西瓜特征的拍摄角度。

计算步骤
  1. 中心化数据(减去均值)

  2. 计算协方差矩阵

  3. 计算特征值和特征向量

  4. 选择前k大特征值对应的特征向量

Python实现
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris# 加载数据
iris = load_iris()
X = iris.data# 降维到2维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)print("原始形状:", X.shape)
print("降维后形状:", X_pca.shape)
print("各主成分解释方差比例:", pca.explained_variance_ratio_)
输出示例
原始形状: (150, 4)
降维后形状: (150, 2)
各主成分解释方差比例: [0.924 0.053]  # 第一主成分保留了92.4%的信息
 
优缺点
  • ✅ 优点:线性方法简单有效,可解释性强

  • ❌ 缺点:只能捕捉线性关系


方法2:t-SNE(t分布随机邻域嵌入)

核心思想:保持高维空间中数据点的局部相似性。

生活化比喻

把全世界城市的地理位置画到一张纸上,保证相邻城市在纸上仍然相邻。

Python实现
from sklearn.manifold import TSNEtsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X)
 
适用场景
  • 高维数据可视化(常降到2D/3D)

  • 探索数据聚类结构

注意事项
  • 计算成本高

  • 超参数敏感(困惑度perplexity)


方法3:LDA(线性判别分析)

核心思想:找到能最好区分不同类别的投影方向。

与PCA对比
PCALDA
目标最大化总体方差最大化类间方差/类内方差
有无监督无监督有监督
结果主成分与类别无关投影方向与类别相关
Python实现
from sklearn.discriminant_analysis import LinearDiscriminantAnalysislda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X, iris.target)
 

三、如何选择降维方法?


http://www.xdnf.cn/news/641647.html

相关文章:

  • C++指针与引用:const修饰的奥秘
  • 视频剪辑SDK定制开发技术方案与报价书优雅草卓伊凡
  • pinia状态管理使用
  • 星际旅行家(广度优先搜索+邻接表)
  • 直流电机 pwm 调速
  • 第五十一节:增强现实基础-单应性矩阵计算
  • MySQL#Select语句执行过程
  • LLMs之Qwen:《Qwen3 Technical Report》翻译与解读
  • 2025年5月系分论文题(回忆版)
  • C# 怎么做chat柱状图能实现不同的颜色,还带游标
  • 篇章二 基础——包装类
  • ADS学习笔记(二) 交流小信号仿真
  • Windows逆向工程提升之x86结构化异常SEH处理机制
  • Java 可扩展状态系统设计:备忘录模式的工程化实践与架构演进
  • TCP建立连接为什么不是两次握手,而是三次,为什么不能在第二次握手时就建立连接?
  • 基于AI自动生成测试用例
  • 有限时间 vs 固定时间 vs 预定时间滑模:稳定性分析与仿真验证方法对比(中)
  • 8.Java 8 日期时间处理:从 Date 的崩溃到 LocalDate 的优雅自救​
  • 【黑马点评】redis实战
  • Seaborn库的定义与核心功能
  • 【linux】mount命令中,data=writeback参数详细介绍
  • ubuntu 22.04安装和使用docker介绍
  • Java面向对象 二
  • GitHub Copilot 现已支持 AI Coding Agent
  • MySQL:12_视图
  • 08_模型训练篇-Torchvision(下):其他有趣的功能
  • 文件操作(C语言版)
  • 12.LCD、FSMC和ILI9341芯片
  • python中pandas之dataframe知识
  • 文本存入向量数据库流程