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

机器学习(8)——主成分分析

文章目录

  • 1. 主成分分析介绍
  • 2. 核心思想
  • 3. 数学基础
  • 4. 算法步骤
    • 4.1. 数据标准化:
    • 4.2. 计算协方差矩阵:
    • 4.3. 特征分解:
    • 4.4. 选择主成分:
    • 4.5 降维:
  • 5. 关键参数
  • 6. 优缺点
  • 7. 改进变种
  • 8. 应用场景
  • 9. Python示例
  • 10. 数学推导(最大化方差)
  • 11. 注意事项
  • 12. 总结

1. 主成分分析介绍

主成分分析(PCA,Principal Component Analysis)是一种常用的降维技术,旨在通过线性变换将数据转换到一个新的坐标系中,使得数据的方差最大化,从而提取出数据中的主要特征。它在数据预处理、降维、噪声去除和数据可视化等领域有广泛应用。

2. 核心思想

PCA是一种无监督降维算法,旨在通过线性变换将高维数据投影到低维空间,同时保留最大方差信息。其核心思想是:

  • 方差最大化:选择数据变化最大的方向(主成分)作为新坐标轴。

  • 去相关性:新特征(主成分)之间线性无关。

3. 数学基础

  • 协方差矩阵:衡量特征间的线性关系。
    Cov ( X ) = 1 n X T X (假设数据已中心化) \text{Cov}(X) = \frac{1}{n} X^T X \quad \text{(假设数据已中心化)} Cov(X)=n1XTX(假设数据已中心化)
  • 特征分解:协方差矩阵的特征向量即为主成分方向,特征值表示各主成分的方差贡献。

4. 算法步骤

假设有一个数据集,包含 m m m个样本,每个样本有 n n n 个特征。数据集可以表示为一个 m × n m×n m×n 的矩阵 X X X,每一行表示一个样本,每一列表示一个特征

4.1. 数据标准化:

对每个特征进行标准化处理,使得每个特征的均值为0,方差为1

  • 中心化: X centered = X − μ , 其中  μ 是均值向量。 X_{\text{centered}} = X - \mu, \text{ 其中 } \mu \text{ 是均值向量。} Xcentered=Xμ, 其中 μ 是均值向量。
  • 标准化(可选): X scaled = X − μ σ X_{\text{scaled}} = \frac{X - \mu}{\sigma} Xscaled=σXμ其中, μ μ μ 是各列的均值, σ σ σ 是各列的标准差

4.2. 计算协方差矩阵:

协方差矩阵是描述数据集各个特征之间关系的矩阵。对于一个包含多个特征的向量数据集,协方差矩阵表示了各特征之间的线性相关性

  • 协方差矩阵 C 是一个 n×n 的矩阵,表示各个特征之间的协方差。
    C = 1 m − 1 X centered T X centered C = \frac{1}{m-1} X_{\text{centered}}^T X_{\text{centered}} C=m11XcenteredTXcentered

4.3. 特征分解:

协方差矩阵的特征值和特征向量决定了数据在新坐标系中的投影方向和方差。特征值越大,表示该方向上的方差越大,信息量越丰富。

  • 求解 C C C的特征值和特征向量,特征值 λ λ λ 表示在该特征向量方向上的方差,特征向量则表示主成分的方向:
    C v i = λ i v i C \mathbf{v}_i = \lambda_i \mathbf{v}_i Cvi=λivi
  • 按特征值降序排列: λ 1 ≥ λ 2 ≥ ⋯ ≥ λ d λ_1 ≥λ_2≥⋯≥λ_d λ1λ2λd

4.4. 选择主成分:

根据特征值的大小,选择前几个主成分,通常选择最大的几个特征值对应的特征向量。选择的主成分数量决定了降维后的维度

  • 保留前 k k k 个最大特征值对应的特征向量 v 1 , … , v k \mathbf{v}_1 ,…,\mathbf{v}_k v1,,vk ,构成投影矩阵 W W W

4.5 降维:

将原始数据投影到选定的主成分上,得到降维后的数据表示

Z = X centered W Z=X_{\text{centered}}W Z=XcenteredW

  • Z Z Z n × k n×k n×k 的降维后数据。
  • W W W是选定的前 k k k 个特征向量组成的矩阵

5. 关键参数

  • 降维后维度 k:

    • 通过累计方差贡献率选择:
      Explained Variance Ratio = ∑ i = 1 k λ i ∑ i = 1 d λ i \text{Explained Variance Ratio} = \frac{\sum_{i=1}^{k} \lambda_i}{\sum_{i=1}^{d} \lambda_i} Explained Variance Ratio=i=1dλii=1kλi
    • 通常选择累计贡献率≥95%的最小 k k k
  • 是否标准化:若特征量纲差异大,需标准化。

6. 优缺点

  • ✅ 优点:

    • 降维效率高:线性复杂度,适合高维数据。

    • 去相关性:新特征互不相关。

    • 可解释性:主成分可反映原始特征的综合影响。

  • ❌ 缺点:

    • 线性假设:无法捕捉非线性关系(需核PCA)。

    • 方差≠信息:保留方差最大的方向未必最重要。

    • 丢失局部结构:可能破坏数据的局部几何关系。

7. 改进变种

  • 核PCA(Kernel PCA):通过核函数处理非线性数据。

  • 稀疏PCA:引入稀疏性约束,提升可解释性。

  • 增量PCA:适用于流式数据或内存受限场景。

8. 应用场景

  • 数据可视化:将高维数据降至2D/3D。

  • 特征工程:减少特征数量,提升模型效率。

  • 去噪:去除低方差成分(噪声)。

  • 人脸识别(如Eigenfaces)。

9. Python示例

from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt# 加载数据
X, y = load_iris(return_X_y=True)# 标准化并降维(k=2)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)# 可视化
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.xlabel('PC1 (Explained Variance: {:.2f}%)'.format(pca.explained_variance_ratio_[0]*100))
plt.ylabel('PC2 (Explained Variance: {:.2f}%)'.format(pca.explained_variance_ratio_[1]*100))
plt.title('PCA of Iris Dataset')
plt.show()

10. 数学推导(最大化方差)

投影后的样本方差为:

Var ( Z ) = 1 n ∑ i = 1 n ( w T x i ) 2 = w T C w \text{Var}(Z) = \frac{1}{n} \sum_{i=1}^{n} (\mathbf{w}^T \mathbf{x}_i)^2 = \mathbf{w}^T C \mathbf{w} Var(Z)=n1i=1n(wTxi)2=wTCw

通过拉格朗日乘子法最大化 w T C w \mathbf{w}^TC\mathbf{w} wTCw,约束 w T w = 1 \mathbf{w}^T\mathbf{w}=1 wTw=1,可得: C w = λ w C \mathbf{w} = \lambda \mathbf{w} Cw=λw
即协方差矩阵的特征向量。

11. 注意事项

  • 特征缩放:量纲差异大时需标准化。

  • 解释性:主成分是原始特征的线性组合,物理意义可能模糊。

  • 非正交特征:若原始特征强相关,PCA效果显著。

12. 总结

PCA通过正交变换提取数据主要变化方向,是降维和特征提取的基石。理解其数学本质(特征分解)和局限性(线性假设)有助于在实际任务中合理应用。进阶方法(如核PCA)可解决非线性问题。

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

相关文章:

  • 基于单片机的游泳馆智能管理系统
  • 【网络】TCP/IP协议学习
  • Kafka 命令行样例大全
  • 【记录手贱bug日常】IDEA 配置vmoptions后打不开,重新安装,删注册表均无用
  • 软考:数值转换知识点详解
  • 矩阵系统源码搭建账号分组功能开发全流程解析,支持OEM
  • 图论---朴素Prim(稠密图)
  • 如何在 Vue 3 中实现一个自定义的 `v-html` 组件
  • 蓝桥杯嵌入式系统设计:高效编程与调试方法全解析
  • 基于大模型的食管平滑肌瘤全周期预测与诊疗方案研究
  • 解释器模式:自定义语言解析与执行的设计模式
  • nodejs之Express-介绍、路由
  • 《逃离云端束缚,拥抱GPT本地部署》
  • 深度学习-数值稳定性和模型初始化
  • ZooKeeper配置优化秘籍:核心参数说明与性能优化
  • 实时数字人——DH_LIVE
  • 矩阵运算和线性代数操作开源库
  • Unreal Niagara制作SubUV贴图翻页动画
  • 实现营销投放全流程自动化 超级汇川推出信息流智能投放产品“AI智投“
  • DDD领域驱动与传统CRUD
  • 缓存集群技术深度解析:从原理到实战
  • 数据结构-排序
  • C#基于Sunnyui框架和MVC模式实现用户登录管理
  • PH热榜 | 2025-04-24
  • 【网络应用程序设计】实验四:物联网监控系统
  • 发币流程是什么,需要多少成本?
  • 深入详解人工智能数学基础——概率论中的KL散度在变分自编码器中的应用
  • 数据库安装和升级和双主配置
  • 深度解析:基于Python的微信小程序自动化操作实现
  • 优化uniappx页面性能,处理页面滑动卡顿问题