机器学习(5)无监督模型之降维PCA算法

主成分分析(Principal Component Analysis, PCA) 是一种经典的无监督学习算法,主要用于数据降维、特征提取和数据可视化。它通过线性变换将数据从原始空间映射到一个新的空间,使得数据的方差最大化,从而实现降维。PCA 可以有效减少数据的维度,同时保留数据中的大部分信息。

PCA 算法详解

1. PCA的目标

PCA 的核心目标是将数据从一个高维空间映射到一个低维空间,并尽量保留数据中的变异性(信息)换句话说,PCA 寻找数据中最重要的方向(主成分),以便用最少的维度表达数据的主要信息。

2. PCA的核心思想
  • 最大化方差:PCA 通过计算数据的方差来评估数据在不同方向上的分布情况。主成分是数据变异性(或方差)最大的方向。
  • 线性变换:PCA 通过线性变换将数据从原始的特征空间转换到新的特征空间,使得数据在新的空间中的方差最大化。新空间的每一个轴(即主成分)都是数据中最重要的方向。

PCA的主要任务是: 找到数据的主成分,并按方差的大小顺序对它们进行排序

这些标红的很重要

3. PCA的步骤

步骤1:数据标准化 PCA 是基于数据方差的,因此我们首先需要对数据进行标准化(归一化)。因为不同特征的量纲不同,若不进行标准化,某些具有大数值范围的特征可能会主导计算结果。

步骤2:计算协方差矩阵 协方差矩阵反映了不同特征之间的相关性。它是一个 n×n 的矩阵,其中 n 是特征的数量,矩阵中的每个元素代表了两个特征之间的协方差。

步骤4:排序特征值和特征向量 根据特征值的大小对特征向量进行排序。特征值大的对应着数据变化最大的方向,这些方向可以保留数据中的重要信息。

4. PCA的数学原理

PCA 的核心就是对数据进行正交变换,将数据从原始空间变换到新的空间,使得新空间的各个维度之间相互独立(即正交),而且这些新的维度(主成分)按照数据的方差从大到小排序。

这意味着:

  • 第一主成分(PC1)是数据方差最大的方向。
  • 第二主成分(PC2)是与第一主成分正交且方差次大的方向。
  • 以此类推,直到所有主成分。

5. PCA的优缺点

优点:

  • 降维:PCA 是一种强大的降维工具,能够有效减少数据的维度,并保留数据的大部分信息。
  • 数据可视化:通过将数据降到二维或三维,PCA 能够使数据可视化,帮助发现数据中的潜在模式。
  • 去噪:PCA 可以去掉那些低方差的特征,从而去除数据中的噪声。

缺点:

  • 线性假设:PCA 仅适用于线性数据结构,对于非线性数据,PCA 的效果可能不理想。
  • 难以解释:主成分往往是原始特征的线性组合,可能很难解释这些主成分的实际意义。
  • 数据标准化要求:PCA 对数据的标准化非常敏感,因此在应用 PCA 前需要对数据进行合适的预处理。

6. PCA的应用场景

PCA 适用于很多领域,常见的应用场景包括:

  • 图像压缩:PCA 可用于图像的降维和压缩,通过保留最重要的主成分,可以大幅度减少存储空间。
  • 数据可视化:PCA 可用于将高维数据降至二维或三维,以便进行可视化,帮助分析数据的分布和模式。
  • 特征选择:PCA 可以去除数据中的冗余信息,保留最重要的特征,减少模型的复杂度,提升训练速度。
  • 噪声去除:通过将数据映射到低维空间,PCA 可以去掉那些含有噪声的低方差维度。

PCA 算法经典例题

为了帮助理解 PCA 的应用,下面我们通过一个经典的降维例子来详细讲解 PCA 的步骤。

问题描述

假设我们有一个包含 5 个样本和 3 个特征的数据集,我们希望将其从 3 维降到 2 维。我们使用 PCA 来找到最能表达数据变异性的主成分,并将数据投影到这两个主成分上。

原始数据

假设我们的数据集 X 如下(每行代表一个样本,每列代表一个特征):

样本 特征1 特征2 特征3
1 2 3 4
2 4 5 6
3 5 7 8
4 7 8 9
5 8 9 10

我们希望将其降维到 2 个维度。

步骤 1:数据标准化

PCA 对数据的标准化非常敏感。为了避免不同特征的量纲对计算结果产生影响,我们需要先对数据进行标准化。标准化的目的是使每个特征的均值为 0,方差为 1。

首先计算每个特征的均值和标准差,然后进行标准化:

标准化后的数据如下:

样本 特征1(标准化) 特征2(标准化) 特征3(标准化)
1 -1.29 -1.29 -1.29
2 -0.49 -0.49 -0.49
3 -0.09 0.31 0.31
4 0.73 1.11 1.11
5 1.14 1.50 1.50

步骤 2:计算协方差矩阵

步骤 5:数据投影

现在我们可以将原始标准化数据投影到这两个主成分上。投影的公式为:

Xnew=Xnorm⋅W2

得到降维后的数据:

样本 主成分1(PC1) 主成分2(PC2)
1 -2.24 0.00
2 -0.89 0.00
3 -0.29 0.00
4 1.47 0.00
5 2.94 0.00

步骤 6:结果分析

通过PCA,我们成功地将原始的 3 维数据降到了 2 维。在这个降维后的空间中,主成分 1 (PC1) 捕获了数据的大部分方差。虽然主成分 2 的方差非常小,但它仍然提供了额外的信息。

可视化

降维后的数据可以用于可视化,在 2D 平面上表示,可以帮助我们更好地理解数据的分布。

总结:

这个例子展示了如何应用 PCA 来从一个 3 维数据集降维到 2 维。关键步骤包括:

  1. 数据标准化。
  2. 计算协方差矩阵。
  3. 计算特征值和特征向量。
  4. 按特征值选择主成分。
  5. 投影到新的主成分空间。

PCA 的核心是将数据投影到方差最大的方向上,从而实现降维,同时尽量保留原数据中的信息。在实际应用中,PCA 常用于图像压缩、数据可视化、去噪和特征选择等任务。

有几个特征就是有几维

PCA 降维例题

问题描述

假设我们有一个包含 6 个样本和 4 个特征的数据集,我们希望将其从 4 维降到 2 维。我们将使用 PCA 来找出最能表达数据变异性的主成分,并将数据投影到这两个主成分上。

原始数据

假设我们的数据集 X如下(每行代表一个样本,每列代表一个特征):

样本 特征1 (X1) 特征2 (X2) 特征3 (X3) 特征4 (X4)
1 2 3 3 5
2 4 7 4 8
3 6 6 5 9
4 8 10 7 12
5 10 15 8 14
6 12 20 9 15

我们希望使用 PCA 将数据降维到 2 维,以便更容易进行可视化和分析。

步骤 1:数据标准化

PCA 对数据标准化非常敏感。在进行 PCA 之前,我们需要对每个特征进行标准化(即让每个特征的均值为 0,方差为 1)。假设我们已经计算出了每个特征的均值和标准差,并进行了标准化。标准化后的数据集 Xnorm​ 如下:

样本 特征1(标准化) 特征2(标准化) 特征3(标准化) 特征4(标准化)
1 -1.47 -1.47 -1.47 -1.47
2 -0.82 -0.82 -1.23 -1.23
3 -0.18 -0.18 -0.98 -0.98
4 0.47 0.47 -0.23 -0.23
5 1.11 1.11 0.02 0.02
6 1.96 1.96 0.70 0.70

步骤 2:计算协方差矩阵

计算标准化后的数据的协方差矩阵。协方差矩阵反映了不同特征之间的关系。协方差矩阵的计算公式为:

步骤 3:计算协方差矩阵的特征值和特征向量

接下来,计算协方差矩阵的特征值和特征向量。特征值表示了每个主成分的方差大小,而特征向量则表示了主成分的方向。

假设计算得到的特征值和特征向量如下:

步骤 4:选择主成分

根据特征值的大小,选择前两个主成分。因为我们希望将数据降到 2 维,因此我们选择特征值最大的前两个主成分,即:

  • 第一主成分(PC1): λ1=3.53\
  • 第二主成分(PC2): λ2=0.78

得到的降维后的数据如下:

样本 主成分1(PC1) 主成分2(PC2)
1 -2.74 0.12
2 -1.49 0.08
3 -0.53 0.14
4 0.47 -0.16
5 1.09 -0.07
6 1.80 -0.11

步骤 6:结果分析

通过 PCA,我们将原始的 4 维数据集成功降到 2 维。在降维后的数据中,第一主成分(PC1)捕获了数据的大部分变异性。第二主成分(PC2)捕获了剩余的变异性,但相对于 PC1 来说,其方差较小。

降维后的数据可以进行可视化,帮助我们更直观地理解数据的结构和分布。比如,我们可以将数据点绘制在二维平面上,根据主成分1和主成分2的位置来观察样本的分布。

总结:

  • PCA 可以有效地将高维数据降维,从而减少冗余信息并保留数据中的重要特征。
  • 在这个例子中,我们将一个 4 维数据集降维到 2 维,保留了最重要的两个主成分,成功地简化了数据。
  • PCA 的关键步骤包括数据标准化、计算协方差矩阵、特征值分解、选择主成分和投影数据。

m 代表的是样本的数量,即数据集中的样本数。

相关推荐
老白干1 小时前
jjwt 0.9.1 在 JDK 11+ 上的两个“坑”与完整解决方案
java·python·log4j
笨鸟先飞,勤能补拙8 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能9 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂9 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study10 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境10 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境10 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd12311 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy123931021611 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb0012 小时前
一个项目带你入门AI应用开发01
python