机器学习实战(8):降维技术——主因素分析(PCA)

打印 上一主题 下一主题

主题 1617|帖子 1617|积分 4851

第8集:降维技术——主因素分析(PCA)

在机器学习中,降维(Dimensionality Reduction) 是一种告急的数据处置惩罚技术,用于淘汰特征维度、去除噪声并进步模子服从。主因素分析(Principal Component Analysis, PCA) 是最经典的线性降维方法之一,广泛应用于数据可视化、特征提取和图像压缩等领域。今天我们将深入探究 PCA 的数学原理,并通过实践部分使用 MNIST 手写数字数据集 进行降维与可视化。

维度劫难题目

什么是维度劫难?

随着特征维度的增长,数据的稀疏性会急剧上升,导致模子练习变得更加困难。这种征象被称为 维度劫难(Curse of Dimensionality)。高维数据不但增长了计算复杂度,还可能导致过拟合。因此,降维技术成为办理这一题目的告急工具。
   图1:维度劫难表示图
(图片形貌:三维空间中展示了低维数据点的分布较为密集,而高维空间中数据点变得稀疏,难以捕捉模式。)

  
PCA 的数学原理

PCA 的焦点思想

PCA 的目的是通过线性变换将原始高维数据投影到一个低维子空间,同时尽可能保存数据的主要信息。详细步调如下:

  • 标准化数据:对每个特征进行零均值化和单位方差缩放。
  • 计算协方差矩阵:衡量特征之间的相关性。
  • 特征分解:求解协方差矩阵的特征值和特征向量。
  • 选择主因素:按特征值大小排序,选择前 $ k $ 个特征向量作为主因素。
  • 投影数据:将原始数据投影到主因素构成的低维空间。
公式如下:
                                         Covariance Matrix:                             Σ                            =                                       1                               n                                                 X                               T                                      X                                  \text{Covariance Matrix: } \Sigma = \frac{1}{n} X^T X                     Covariance Matrix: Σ=n1​XTX
                                         Eigen Decomposition:                             Σ                            v                            =                            λ                            v                                  \text{Eigen Decomposition: } \Sigma v = \lambda v                     Eigen Decomposition: Σv=λv
此中:


  • $ \Sigma $ 是协方差矩阵。
  • $ \lambda $ 是特征值,表示主因素的告急性。
  • $ v $ 是特征向量,表示主因素的方向。

如何解释主因素

主因素是数据变化方向的线性组合,每个主因素解释了数据总方差的一部分。我们可以通过以下指标评估主因素的告急性:

  • 特征值占比:每个主因素对应的特征值占总特征值的比例。
  • 累计贡献率:前 k 个主因素解释的总方差比例。
   图2:主因素累计贡献率图
(图片形貌:折线图展示了前 $ k $ 个主因素的累计贡献率,随着主因素数量增长,累计贡献率逐渐接近 100%。)

  
PCA 在图像压缩中的应用

PCA 可以用于图像压缩,通过保存最告急的主因素来淘汰存储空间。比方,对于一张灰度图像,可以将其像素矩阵展平为一维向量,然后使用 PCA 提取主要特征,从而实现压缩。

实践部分:使用 PCA 对 MNIST 手写数字数据集进行降维并可视化

数据集简介

MNIST 数据集包罗 70,000 张 28x28 像素的手写数字图像(0-9)。每张图像被展平为 784 维向量。我们将使用 PCA 将数据降维到二维空间,并对其进行可视化。
完备代码

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from sklearn.datasets import fetch_openml
  4. from sklearn.decomposition import PCA
  5. from sklearn.preprocessing import StandardScaler
  6. # 加载 MNIST 数据集
  7. mnist = fetch_openml('mnist_784', version=1)
  8. X, y = mnist['data'], mnist['target']
  9. # 数据标准化
  10. scaler = StandardScaler()
  11. X_scaled = scaler.fit_transform(X)
  12. # 使用 PCA 降维到二维
  13. pca = PCA(n_components=2, random_state=42)
  14. X_pca = pca.fit_transform(X_scaled)
  15. # 可视化降维结果
  16. plt.figure(figsize=(12, 8))
  17. for i in range(10):  # 遍历 0-9 数字类别
  18.     plt.scatter(X_pca[y.astype(int) == i, 0], X_pca[y.astype(int) == i, 1], label=f'Digit {i}', alpha=0.6)
  19. plt.title('MNIST Data Visualization using PCA', fontsize=16)
  20. plt.xlabel('Principal Component 1', fontsize=12)
  21. plt.ylabel('Principal Component 2', fontsize=12)
  22. plt.legend()
  23. plt.grid()
  24. plt.show()
  25. # 输出主成分的累计贡献率
  26. explained_variance_ratio = pca.explained_variance_ratio_
  27. print(f"主成分1解释的方差比例: {explained_variance_ratio[0]:.2f}")
  28. print(f"主成分2解释的方差比例: {explained_variance_ratio[1]:.2f}")
  29. print(f"累计贡献率: {sum(explained_variance_ratio):.2f}")
复制代码

运行结果

降维结果可视化

   图3:PCA 降维后的 MNIST 数据分布
(图片形貌:二维散点图展示了不同数字类别的分布情况,每个类别用不同颜色表示,清晰地展示了数字之间的聚类效果。)

  输出结果

  1. 主成分1解释的方差比例: 0.06
  2. 主成分2解释的方差比例: 0.04
  3. 累计贡献率: 0.10
复制代码

总结

本文介绍了 PCA 的数学原理及其在降维和图像压缩中的应用,并通过实践部分展示了如何使用 PCA 对 MNIST 数据集进行降维和可视化。盼望这篇文章能帮助你更好地明白 PCA!

参考资料



  • Scikit-learn 文档: https://scikit-learn.org/stable/documentation.html
  • MNIST 数据集: https://www.openml.org/d/554*

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表