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

主成分分析(Principal Component Analysis,PCA)的个人理解

作为主成分分析学习的笔记,方便理解与复习。

一.主成分分析简介

主成分分析(PCA)是一种通过线性变换,将原始数据投影到一组按方差从大到小排列的、线性不相关的新坐标轴(称为主成分)上,从而得到一组新数据(称为主成分得分),以便于实现数据降维和特征提取的统计方法。

PS:这里的主成分可以理解为坐标轴,由主成分张成的空间才是坐标系。

1.核心思想与工作方式

主成分分析是一种经典的无监督线性降维技术。

  • 核心思想:通过一个线性变换,将原始可能存在相关性(统计学中的相关性)的多个变量,转换为一组数量更少的、线性不相关(向量空间上的线性无关)的新变量,这些新变量被称为主成分得分,它是原来的特征向量在主成分这个坐标轴上的投影

  • 工作方式

    PCA通过以下步骤构建一个新的坐标系:
    寻找第一个基向量:PCA寻找一个穿过数据云中心(均值点)的向量方向,使得当所有数据点投影到该向量上时,投影值的方差达到最大。这个方向所代表的向量,被定义为第一主成分,它将作为新坐标系的第一个坐标轴
    寻找后续基向量:接着,PCA寻找与之前找到的所有主成分向量都正交(即内积为零) 的下一个方向,并且在此约束下,使得数据在该方向上的投影方差尽可能大。这个方向所代表的向量,被定义为第二主成分,成为新坐标系的第二个坐标轴。此过程重复进行,直至找到所有主成分。

PS:PCA是有损的吗?

需要注意的一点是,PCA本身的数学变换方法是一个无损的计算,这个变换过程是可逆的信息损失来自于后续的“决策”而非“方法本身”,比如当我们执行降维的操作,主动选择只保留前k个主成分,而丢弃剩余的 (n-k) 个时,信息损失才发生。

PS:PCA是怎么确定主成分的?

主成分分析的有效性基于一个核心假设:数据的方差越大,其包含的信息量就越多。基于此,该方法通过前文提到的工作方式找到所有的主成分,组成一个主成分坐标轴,最终,PCA输出一组按信息量(即方差)从大到小排列的新综合特征。由于这个排序直接反映了各成分的信息含量,因此在降维时,我们可以舍弃后方信息量较小的主成分,从而在减少数据维度的同时,最大程度地保留原始数据中的主要信息。

2.目的

①降维:

在尽可能保留原始信息的前提下,减少数据的变量数目,这是PCA最直接、最功利的作用,其核心目标是解决“维度灾难”。

举个例子来说,假设训练数据包含100个特征,通过PCA可以创建出一组数量同样为100个的综合特征(也就是主成分),这些主成分按照所包含的信息量(方差)从大到小排序,保留前面信息量最大的几个特征,就可以达到降维的目的,同时保留尽可能多的信息量。

②去冗余:

消除原始变量之间可能存在的相关性,使生成的新变量(主成分)彼此独立。

举个例子来说,假设收集的数据包括一个人的身高、体重、鞋码这三个特征,通常来说,身高越高的人,体重越大,鞋码也应该越大,也就是身高与体重和鞋码具有一定的正相关,这就说明仅通过一个人的身高,就能大概猜测出这个人的体重和鞋码范围,这三个特征携带的信息量存在一定程度上的重叠,也就是信息冗余,而PCA可以很好地将其中相关的信息提炼出来,形成一组完全线性无关的特征向量,从而消除冗余。(这里的线性无关指的是统计学上的线性无关,也就是各特征之间没办法互相预测彼此,实际上在向量空间中原来的特征向量也是线性无关的,也就是说各向量间无法精确互相表示)

③揭示结构:

发现数据背后隐藏的、简单的驱动因素或基本结构。

揭示结构其实就是分析出这些成分的重要程度,然后给出主成分的从大到小排序,让我们评判时可以更注重重要程度大的成分,忽略重要程度较小的成分。

二.主成分分析举例

举个最简单例子来辅助理解:

1.原始数据(二维数据)

我们有两个特征(x_1,x_2),4个样本点:

  • A: (1, 1)

  • B: (2, 2)

  • C: (3, 1.5)

  • D: (4, 2.5)

数据矩阵:

 X = \begin{bmatrix} 1 & 1 \\ 2 & 2 \\ 3 & 1.5 \\ 4 & 2.5 \end{bmatrix}

其中第一列是特征x_1,第二列是特征x_2

2.中心化(Zero-Centering)

中心化,简单来说,就是将数据集中的每一个数据点都减去整个数据集的平均值。这个操作将数据的“中心”或“均值点”移动到了坐标原点(零点),从而确保PCA找到的主成分方向是数据真正的方差最大化方向,而不是被数据本身的偏移量所误导。

计算每个特征的均值:

  • 特征1 (x1) 均值: (1+2+3+4)/4=2.5(1+2+3+4)/4=2.5

  • 特征2 (x2) 均值: (1+2+1.5+2.5)/4=1.75(1+2+1.5+2.5)/4=1.75

将每个数据点减去均值:

  • A: (1-2.5, 1-1.75) = (-1.5, -0.75)

  • B: (2-2.5, 2-1.75) = (-0.5, 0.25)

  • C: (3-2.5, 1.5-1.75) = (0.5, -0.25)

  • D: (4-2.5, 2.5-1.75) = (1.5, 0.75)

中心化后的数据矩阵:

X_c = \begin{bmatrix} -1.5 & -0.75 \\ -0.5 & 0.25 \\ 0.5 & -0.25 \\ 1.5 & 0.75 \end{bmatrix}

3. 计算协方差矩阵 (Covariance Matrix)

公式:C = \frac{1}{n-1} X_c^T X_c

X_c^T = \begin{bmatrix} -1.5 & -0.5 & 0.5 & 1.5 \\ -0.75 & 0.25 & -0.25 & 0.75 \end{bmatrix}

C = \frac{1}{3} \begin{bmatrix} -1.5 & -0.5 & 0.5 & 1.5 \\ -0.75 & 0.25 & -0.25 & 0.75 \end{bmatrix} \begin{bmatrix} -1.5 & -0.75 \\ -0.5 & 0.25 \\ 0.5 & -0.25 \\ 1.5 & 0.75 \end{bmatrix}

所以协方差矩阵:

C = \begin{bmatrix} 1.667 & 0.667 \\ 0.667 & 0.417 \end{bmatrix}

4. 特征分解 (Eigen Decomposition)

解方程:

\det(C - \lambda I) = 0

\det\begin{bmatrix} 1.667 - \lambda & 0.667 \\ 0.667 & 0.417 - \lambda \end{bmatrix} = 0

(1.667 - \lambda)(0.417 - \lambda) - (0.667)(0.667) = 0 \\ \lambda^2 - (1.667 + 0.417)\lambda + (1.667 \times 0.417) - 0.445 = 0 \\ \lambda^2 - 2.084\lambda + 0.695 - 0.445 = 0 \\ \lambda^2 - 2.084\lambda + 0.25 = 0

利用求根公式解得:

\lambda_1=1.956,\lambda_2=0.128

求特征向量:

对于\lambda_1=1.956

(C-1.956I)v=0

\begin{bmatrix} 1.667 - 1.956 & 0.667 \\ 0.667 & 0.417 - 1.956 \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = \begin{bmatrix} -0.289 & 0.667 \\ 0.667 & -1.539 \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = 0

方程:$-0.289v_1 + 0.667v_2 = 0 => v_2 \approx 0.433v_1$

单位向量: v_1 = \begin{bmatrix} 0.918 \\ 0.397 \end{bmatrix}

这就是第一主成分(PC1),方向大致是(0.92, 0.40)

对于\lambda_2=0.128

(C-0.128I)v=0

\begin{bmatrix} 1.667 - 0.128 & 0.667 \\ 0.667 & 0.417 - 0.128 \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = \begin{bmatrix} 1.539 & 0.667 \\ 0.667 & 0.289 \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = 0

方程:1.539v_1 + 0.667v_2 = 0 => v_2 \approx -2.307v_1

单位向量:v_2 = \begin{bmatrix} -0.397 \\ 0.918 \end{bmatrix}

这就是第二主成分(PC2),方向与PC1垂直,大致是(-0.40, 0.92)

5. 计算主成分得分 (Scores)

投影矩阵:

W = \begin{bmatrix} 0.918 & -0.397 \\ 0.397 & 0.918 \end{bmatrix}

\text{Scores} = X_c \cdot W = \begin{bmatrix} -1.5 & -0.75 \\ -0.5 & 0.25 \\ 0.5 & -0.25 \\ 1.5 & 0.75 \end{bmatrix} \begin{bmatrix} 0.918 & -0.397 \\ 0.397 & 0.918 \end{bmatrix}

计算每个点的主成分得分(即向主成分坐标系投影):

主成分得分:

\text{Scores} = \begin{bmatrix} -1.675 & -0.093 \\ -0.360 & 0.429 \\ 0.360 & -0.429 \\ 1.675 & 0.093 \end{bmatrix}

6. 结果解读与降维

  • 方差:PC1的方差是 \lambda_1=1.956,PC2的方差是 \lambda_2=0.128

  • 方差解释率:PC1解释了 \frac{1.956}{1.956 + 0.128} \approx 93.9\% 的总方差,PC2只解释了约 \frac{0.128}{1.956 + 0.128} \approx 6.1\%

  • 降维:如果我们降维到一维,会选择丢弃PC2。

  • 一维表示:我们保留PC1得分 [-1.675, -0.360, 0.360, 1.675]。这个新的一维数据几乎完全保留了原始数据的结构(因为PC1解释了93.9\%的方差),但我们丢失了在PC2方向上的微小差异(例如,我们无法再区分B点和C点,因为它们的PC1得分绝对值相同)。

PS:三个坐标系

这个例子中,用到了三个坐标系,分别是:

坐标系1:原始坐标系 (Original Coordinate System)

这是我们最开始的数据所在的坐标系。

  • 坐标轴Feature 1 (x1) 和 Feature 2 (x2)

  • 数据点坐标

    • A: (1, 1)

    • B: (2, 2)

    • C: (3, 1.5)

    • D: (4, 2.5)

这个坐标系是任意给定的,代表了数据的原始测量值。

坐标系2:中心化坐标系 (Centered Coordinate System)

为了计算PCA,我们将原点移到了数据的中心(均值点)。

  • 坐标轴Feature 1' (x1') 和 Feature 2' (x2')。方向和原始坐标系一致,只是原点移动了。

  • 新原点:(2.5, 1.75) - 这是原始数据的均值点。

  • 数据点坐标

    • A: (-1.5, -0.75)

    • B: (-0.5, 0.25)

    • C: (0.5, -0.25)

    • D: (1.5, 0.75)

几何关系:这个坐标系只是原始坐标系的一个平移。

坐标系3:主成分坐标系 (Principal Component Coordinate System)

这是PCA找到的新坐标系,是整个过程的输出。

  • 坐标轴PC1 和 PC2

  • 原点:与中心化坐标系的原点相同(即原始数据的均值点)。

  • 坐标轴方向

    • PC1轴方向:沿着向量 [0.918, 0.397](在原始坐标系中的方向)

    • PC2轴方向:沿着向量 [-0.397, 0.918](在原始坐标系中的方向,且与PC1垂直)

  • 数据点在这个新坐标系中的坐标就是我们计算出的主成分得分

    • A: (-1.675, -0.093)

    • B: (-0.360, 0.429)

    • C: (0.360, -0.429)

    • D: (1.675, 0.093)

原始坐标:(x1, x2) - 在原始特征空间中定位

中心化坐标:(x1', x2') - 相对于数据中心的定位

主成分坐标/得分:(PC1, PC2) - 在优化后的新空间中的定位

三.主成分分析代码中的使用

scikit-learn 在 sklearn.decomposition 模块中提供了 PCA 的实现,这里给出使用方式的代码(注意事项附带在注释之中):

import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler# 1. 准备数据 (假设 X 是一个 n_samples x n_features 的矩阵,这里是4 x 2)
X = np.array([[1, 1],[2, 2],[3, 1.5],[4, 2.5]])
print("原始数据 X:\n", X)# 2. 数据预处理 (强烈建议标准化,尤其是特征量纲不同时)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print("标准化后的数据 X_scaled:\n", X_scaled)
# PS:这里的步骤并不属于PCA的范畴,PCA并不附带标准化的功能
# 但是PCA自带中心化的功能,不需要手动中心化处理# 3. 创建并拟合PCA模型
# 方法一:指定主成分保留个数
pca = PCA(n_components=2) # 保留所有成分,用于观察
# 方法二:指定保留的方差比例
# 保留95%方差的成分即取的主成分总共方差占比≥95%
# 少取一个都会让占比<95%
# pca = PCA(n_components=0.95) # 保留95%方差的成分# 可以理解为创造主成分的坐标系
pca.fit(X_scaled) # PCA模型从数据中学习主成分# 4. 转换数据 (计算主成分得分)
X_pca = pca.transform(X_scaled)
print("主成分得分 (X_pca):\n", X_pca)# 5. 查看模型信息
print("各主成分的方差 (解释方差):", pca.explained_variance_)
print("各主成分的方差占比 (解释方差比率):", pca.explained_variance_ratio_)
print("累计方差占比:", np.cumsum(pca.explained_variance_ratio_))

四.总结

核心认知要点:
  1. “坐标系”与“坐标值”:PCA的本质是寻找一个为数据量身定制的新坐标系。主成分是构成这个新坐标系的坐标轴(基向量),而主成分得分则是原始数据点在这个新坐标系下的坐标值。这是理解PCA工作流的基础。

  2. 方差即信息:PCA的整个数学框架建立在“数据的方差越大,所蕴含的信息量就越多”这一基本假设之上。其寻优目标就是找到能使投影方差最大化的方向。

  3. 无损变换与有损降维:PCA的数学变换过程本身是无损且可逆的。信息损失并非来自变换方法,而是源于后续的降维决策——即主动舍弃方差较小(信息量较少)的后几位主成分。

  4. 中心化的重要性:中心化确保了所有特征在分析中被公平对待,防止PCA的结果被数值范围大的特征所主导。

典型工作流:
  1. 预处理:对数据进行标准化(StandardScaler),消除量纲影响。

  2. 建模:创建PCA模型并拟合(.fit()),从数据中学习主成分方向,构建新坐标系。

  3. 转换:将数据投影(.transform())到新坐标系,得到主成分得分。

  4. 决策:根据主成分的解释方差比率,决定保留前k个主成分,实现降维。

http://www.dtcms.com/a/593995.html

相关文章:

  • sqlite数据库迁移至mysql
  • PostgreSQL 高并发优化:从 “连接数满到崩” 到 “支撑 10 万 QPS” 的实战技巧
  • 怎么免费建自己的网站网络营销课程培训机构
  • 团队开发者git仓库工作手册
  • 欧美风网站建设seo品牌优化整站优化
  • 2.8 模型压缩与优化技术
  • 数字孪生工厂浪潮来袭,众趣科技以实景智能筑牢智造基石
  • [設計模式]二十三種設計模式
  • 有视频接口怎么做网站哪个行业最需要做网站
  • 解锁AI工作流的终极密码:Semantic Kernel Process框架深度技术解析
  • 从0到1:Makefile自动化编译实战全解析
  • 广州网站推广教程中国建设银行网站会员用户名
  • 怎么做分享软件的网站php网站开发框架搭建
  • 网站跟网页的区别jsp做的网页是网站吗
  • 根据docker服务保存日志脚本,时间可选版本
  • 九、神经网络的构建方式详解
  • 第五章 神经网络
  • 网站建设相关的工作鸿顺里网站建设公司
  • 自己做网站卖手机网站建设电话
  • TypeScript 元组
  • LLM - 大模型融合 LangChain 与 OpenRouter 的框架
  • 南宁建企业网站公司办公室装修设计怎么收费
  • 天气形势时间层的选择策略
  • 一站式网站建设多少钱网站怎么会k
  • JAVA实现国密算法SM2/SM3/SM4签名与验签(基于 BouncyCastle)
  • 专门做继电器的网站如何用源码建站
  • ZSAR报错解决
  • CE(Linux的例行性工作)
  • Django中的clean()方法和full_clean()方法
  • 外贸网站怎么注册商城网站开发视频