PCA降维算法详细推导

关于一个小小的PCA的推导


如果有概念不懂,请从目录中查找,或者直接检索。
如果想直入主题,请从第7小节开始看。

1 谱分解 (spectral decomposition)

矩阵中有一个概念叫做谱分解。

定理2.5.3

在这里插入图片描述

所以根据定理2.5.3的(a)(b)可知:**正规矩阵(请看第12条)都是酉可对角化(unitarily diagonalizable)**的,形式为:存在一个酉矩阵V使得A = V Λ V ∗ V \Lambda V^* VΛV, 并且 Λ = d i a g ( λ 1 , … , λ n ) \Lambda = diag (\lambda_1,\dots,\lambda_n) Λ=diag(λ1,,λn).

定理2.2.2 酉相似的两个矩阵的元素平方和相等。

在这里插入图片描述

由于酉相似的两个矩阵的元素平方和相等,所以自然就可以得到性质c.

根据舒尔三角化定理,任何复方阵都酉相似于一个三角阵,该三角阵的对角元素为其特征值。则写出它的舒尔分解形式:

A = U T U ∗ A = UTU^* A=UTU, 其中 U = [ u 1 , … , u n ] U = [u_1,\dots, u_n] U=[u1,,un]是一个酉矩阵, T = [ t i j ] ∈ M n T = [t_{ij}]\in M_n T=[tij]Mn是一个上三角矩阵。这样一个分解可以写成AU = UT,即A [ u 1 , … , u n ] [u_1,\dots,u_n] [u1,,un] = [ u 1 , … , u n ] [u_1,\dots,u_n] [u1,,un]T, 而T是对角阵,所以$Au_i = t_{ii}u_i $ for each i = 1 , … , n i = 1,\dots,n i=1,,n, 因此 U U U的n个列是A的标准正交的特征向量。

根据矩阵分析第134页首次出现谱分解给出的定义来看,谱分解的定义可以这么写:

其中酉矩阵的n个列向量就是A的特征向量。

一个正规矩阵可以表示成一个酉矩阵、一个对角矩阵、以及该酉矩阵的共轭转置的乘积。这样一个分解称作该正规矩阵谱分解。

谱分解中对角矩阵的对角元便是其特征值,酉矩阵的列向量便是其对应的特征向量。

2 奇异矩阵(singular matrix)

一个线性变换或者矩阵被称之为nonsingular(非奇异)(不奇怪),如果这个变换仅对0这个输入产生0的输出,否则它就是被称作singular(奇异)

对于这个概念,我觉得很有意思。singular这个英文单词百度百科上的英文意思是:奇怪的,独特的,独一无二的。根据上面的定义,如果某个变换将一个非零的东西映射成了0,则这个变换是很奇怪的,是异常的。

我觉得称之为非比寻常也是可以的,说明这样的变换具有一种超能力,能将非零的东西变成零,以至于独孤求败,无人可比(如果它是方阵,则没有与之对应的逆矩阵)。

方阵中,哪些矩阵不平常呢?

如果A是一个方阵,则下列条件是等价的。

A是非奇异矩阵, 等价于该矩阵存在逆矩阵 ,

等价于 Ax =0的有唯一解零向量 ,

等价于 0肯定不是A的特征值(因为矩阵的特征值的定义中需要从非零向量映射,而非奇异矩阵无法将非零向量映射到零向量,故0断然不是A的一个特征值)

3 酉相似(unitary similarity)

定义:对于酉矩阵来说,酉矩阵的共轭转置即为其逆矩阵。所以存在一个相似变换其对应的矩阵为酉矩阵,则称变换前后的两个矩阵是酉相似的。

性质

  • 如果两个矩阵酉相似,则两个矩阵的元素平方和相等,即二者的共轭转置与原矩阵的乘积的迹相等。 tr ⁡ B ∗ B = tr ⁡ A ∗ A \operatorname{tr} B^* B=\operatorname{tr} A^* A trBB=trAA

  • 如果某个矩阵酉相似于一个对角矩阵,则称该矩阵是酉可对角化的。

舒尔定理

可能基本矩阵理论中最有用的一个事实要归于舒尔的一个定理:任何复方阵酉相似于一个三角阵,该三角阵的对角元素是矩阵的特征值,可以以任意特定的顺序排列。这就是大名鼎鼎的舒尔形式、舒尔三角化:任何一个方阵都酉相似于一个对角线元素为该方阵的特征值的上三角矩阵。

4 酉矩阵

定义:酉矩阵的逆矩阵是其共轭转置。

说明:酉矩阵这一类矩阵的逆矩阵的形式简单,就是其共轭转置。求共轭转置比求逆更加简单。

性质

  • 酉矩阵是非奇异矩阵,其逆矩阵就是其共轭转置。酉矩阵的行向量组和列向量组均是标准正交的。酉矩阵这个线性变换对向量是保持距离的,即向量 x x x和向量 U x Ux Ux有相同的欧式范数。
  • 两个酉矩阵的乘积(如果可以相乘)仍为酉矩阵。

5 共轭变换

通过一个非奇异矩阵以及它的共轭转置来对一个矩阵进行映射,这样的变换称作共轭变换,形如: A → S ∗ A S A \rightarrow S^* A S ASAS

6 酉等价

定义:将一个矩阵,通过两个酉矩阵变换到一个新的矩阵,这样一个变换称作酉等价。

性质:

  • 每一个矩阵均酉等价于一个非负的对角阵,该对角阵的元素为矩阵的奇异值。这些奇异值很重要。

7 矩阵的迹的计算以及PCA算法推导

在矩阵理论推导过程中,经常会使用到矩阵的迹的计算方法,所以掌握该类计算方法对于理论推导是大有裨益的。

B ∈ R d , n B \in \mathbb{R}^{d, n} BRd,n , D ∈ R d , d D\in \mathbb{R}^{d,d} DRd,d, 求 B T D B B^T D B BTDB的迹。

用到的一个技术叫做 分块矩阵中的列分块。

(将矩阵进行分块,可以简化计算。当然在分块计算时,要先检查矩阵的行数与列数,判断是否可以进行相乘)

这里需要补充分块矩阵的相关知识。

https://baike.baidu.com/item/%E5%88%86%E5%9D%97%E7%9F%A9%E9%98%B5/10234479 (分块矩阵,百度百科链接)

首先将B进行列分块, B = [ b 1 , … , b n ] , b i ∈ R d B = [b_1,\dots, b_n], b_i\in \mathbb{R}^d B=[b1,,bn],biRd

然后

在这里插入图片描述

在这里插入图片描述

看到这里,就可以来进行PCA算法的证明了。

PCA算法是一个降维算法,方法是使用一个线性变换将原来的高维空间的向量映射到一个低维空间。目标是找到这样一个线性变换,即一个矩阵。要求是不仅能够将原始向量从高维空间映射到低维空间,还要能够从低维空间映射回来,所以这就又需要一个变换,即又一个矩阵,并且要求映射回来的向量与原始向量尽可能的逼近。

x 1 , … , x m x_1,\dots, x_m x1,,xm R d \mathbb{R}^d Rd中的 m m m个向量, 我们要将其映射到 R n \mathbb{R}^n Rn中(n<d). 我们需要一个矩阵 W ∈ R n , d W \in \mathbb{R}^{n, d} WRn,d将其映射过去:
x ↦ W x \mathbf{x} \mapsto W \mathbf{x} xWx
然后还需要一个矩阵 U ∈ R d , n U \in \mathbb{R}^{d, n} URd,n,可以用来恢复每一个向量的压缩版本,即对于一个压缩后的向量 y = W x \mathbf{y}=W \mathbf{x} y=Wx, 我们可以构造 x ~ = U y \tilde{\mathbf{x}}=U \mathbf{y} x~=Uy,使得 x ~ = U y \tilde{\mathbf{x}}=U \mathbf{y} x~=Uy位于原始高维空间 R d \mathbb{R}^d Rd, 且尽可能与原始向量之间的平方距离尽可能小,就是下面这样一个优化问题:
argmin ⁡ W ∈ R n , d , U ∈ R d , n ∑ i = 1 m ∥ x i − U W x i ∥ 2 2 \underset{W \in \mathbb{R}^{n, d}, U \in \mathbb{R}^{d, n}}{\operatorname{argmin}} \sum_{i=1}^m\left\|\mathbf{x}_i-U W \mathbf{x}_i\right\|_2^2 WRn,d,URd,nargmini=1mxiUWxi22
首先,我们证明解集一定满足下面这种形式:

U U U的列向量组是标准正交的,且 W W W U U U的转置矩阵。

在这里插入图片描述

证明可参见矩阵分析引理23.1,由于时间关系,先放一放。

上述结论说明,解集是引理23.1中满足条件的U,W组成的集合的子集。

于是,上述优化问题可以将搜索范围进一步缩小:
argmin ⁡ U ∈ R d , n : U ⊤ U = I ∑ i = 1 ∥ x i − U U ⊤ x i ∥ 2 2 . \underset{U \in \mathbb{R}^{d, n}: U^{\top} U=I}{\operatorname{argmin}} \sum_{i=1}\left\|\mathbf{x}_i-U U^{\top} \mathbf{x}_i\right\|_2^2 . URd,n:UU=Iargmini=1 xiUUxi 22.
上述目标函数可以化为:
在这里插入图片描述

由于矩阵的迹是一个线性算子,所以累加符号可以与迹运算进行交换,进一步将上述问题转化为:
argmax ⁡ U ∈ R d , n : U ⊤ U = I trace ⁡ ( U ⊤ ∑ i = 1 m x i x i ⊤ U ) \underset{U \in \mathbb{R}^{d, n}: U^{\top} U=I}{\operatorname{argmax}} \operatorname{trace}\left(U^{\top} \sum_{i=1}^m \mathbf{x}_i \mathbf{x}_i^{\top} U\right) URd,n:UU=Iargmaxtrace(Ui=1mxixiU)
A = ∑ i = 1 m x i x i ⊤ A=\sum_{i=1}^m \mathbf{x}_i \mathbf{x}_i^{\top} A=i=1mxixi, 那么问题则转化为:
argmax ⁡ U ∈ R d , n : U ⊤ U = I trace ⁡ ( U ⊤ A U ) \underset{U \in \mathbb{R}^{d, n}: U^{\top} U=I}{\operatorname{argmax}} \operatorname{trace}\left(U^{\top} A U\right) URd,n:UU=Iargmaxtrace(UAU)
如何求解该优化问题?首先要能够对目标函数进行计算:

可以验证矩阵A是对称矩阵,而对称矩阵是正规矩阵,正规矩阵又可以进行谱分解,写出其谱分解形式 A = V D V T A = VDV^T A=VDVT, 其中 D D D为对角阵,对角元素为 A A A的特征值, V V V为酉矩阵,即 V V T = V T V = I VV^T = V^TV = I VVT=VTV=I, 且 V V V的列向量组为 A A A的特征向量。


trace ⁡ ( U ⊤ A U ) = trace ⁡ ( U ⊤ V D V T U ) \operatorname{trace}\left(U^{\top} A U\right) =\operatorname{trace}\left(U^{\top}VDV^T U\right) trace(UAU)=trace(UVDVTU)

进行一个变量代换,令 B = V T U ∈ R d , n B = V^T U \in \mathbb{R}^{d,n} B=VTURd,n

于是,便有了下面的推导:

注:经过一下演算(通过半正定二次型的定义),可知 A A A是半正定矩阵,所以矩阵D的对角元素均非负。

主要思路是通过Von Neumann提出的埃尔米特半正定复方阵乘积的迹不等式。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

8 幂等矩阵(idempotent matrix)

若一个矩阵是方阵,且矩阵的平方仍为自己,则称该方阵为幂等矩阵。(顾名思义,取幂仍为自己的矩阵称为幂等矩阵)

性质:

  • 幂等矩阵的迹等于幂等矩阵的秩。
  • 幂等矩阵要么相似于对角元全为1或者0的对角阵。(即对角阵的对角元的元素只能是0,1,不会出现其他值)。

9 Von Neumann’s 迹不等式 wiki链接

对于两个埃尔米特的n阶半正定复方阵A, 和B, 它们的特针织现在按照递减的顺序进行排列分别为 a 1 ≥ a 2 ≥ ⋯ ≥ a n a_1\ge a_2\ge\dots\ge a_n a1a2an b 1 ≥ ⋯ ≥ b n b_1\ge\dots\ge b_n b1bn,

则有 Tr ⁡ ( A B ) ≤ ∑ i = 1 n a i b i \operatorname{Tr}(A B) \leq \sum_{i=1}^n a_i b_i Tr(AB)i=1naibi

10 矩阵相似

如果两个矩阵相似,则这两个矩阵有相同的特征值。

11 矩阵的特征值与特征向量

对于一个n阶矩阵A来说,如果一个标量 λ \lambda λ和一个非零向量 x x x满足
A x = λ x , x ∈ C n , x ≠ 0 , λ ∈ C Ax = \lambda x, x\in C^n, x\ne 0, \lambda \in C Ax=λx,xCn,x=0,λC
λ \lambda λ称为A的一个特征值, x x x称为A属于 λ \lambda λ的特征向量。 ( λ , x ) (\lambda, x) (λ,x)是矩阵 A A A的一个特征对。

特征值和特征向量从来都是成对出现的。

12 正规矩阵

正规矩阵是非常重要的一类矩阵:它包括

酉矩阵、埃尔米特矩阵、斜埃尔米特矩阵(skew Hermitian)、实正交矩阵、实对称矩阵、实斜对称矩阵。

正规矩阵的定义: 如果一个n维矩阵A满足它和它的共轭转置矩阵是可交换的,则称该矩阵是正规矩阵。

正规矩阵的性质:

13 正定矩阵、半正定矩阵

有一类埃尔米特矩阵,它们有一个特殊的正的性质,它们自然地出现在很多应用中。带有这种正性的埃尔米特矩阵也将正数推广到了矩阵上。这个观察经常为正定矩阵的应用和性质提供了新的视角。下面一些例子也展现了这种特殊的埃尔米特矩阵的出现的方式。

例如 Hessian矩阵、协方差矩阵等。

正定矩阵

定义:称一个埃尔米特矩阵是正定的,如果对于任意的复数域上的非零向量,其二次型均为正数,则称该矩阵是正定矩阵。

同理,如果二次型为非负数,则称该矩阵为半正定矩阵。

参考文献

[1] https://math.stackexchange.com/questions/1902421/prove-that-the-trace-of-the-matrix-product-uau-is-maximized-by-setting-us

<think>好的,用户想了解主成分分析(PCA)的工作原理和实现方法。首先,我需要回顾一下PCA的基本概念,确保自己理解正确。PCA是一种通过线性变换将高数据投影到低空间的技术,保留数据的主要特征,常用于和去噪。 接下来,我应该分步骤解释PCA的工作原理。第一步通常是数据标准化,确保每个特征的均值为0,方差为1,这样不同量纲的特征不会影响结果。然后计算协方差矩阵,协方差矩阵能反映特征间的相关性,这对找到主成分很重要。 接下来是计算协方差矩阵的特征值和特征向量。这一步是关键,因为特征向量代表了数据的主成分方向,而对应的特征值则表示了各个主成分的重要性,即方差大小。按特征值从大到小排序,选择前k个特征向量作为新的坐标轴,这样就能将数据投影到这些主成分上,实现。 用户可能需要具体的实现步骤,比如如何用代码实现。Python中使用NumPy和sklearn是比较常见的方法。我需要写出示例代码,并解释每一步的作用,比如标准化数据、计算协方差矩阵、特征分解等。同时,提醒用户在实际应用中使用sklearn的PCA类会更方便,但自己实现有助于理解原理。 还要注意用户提供的引用内容,特别是引用[1]到[4],需要适当引用到回答中。例如,引用[1]提到PCA通过线性组合提取信息,引用[2]和[4]提到了代码实现,可以结合起来说明。 用户可能对数学推导有疑问,比如为什么选择协方差矩阵,或者为什么要用特征值分解。这时候需要解释协方差矩阵反映了变量之间的关系,而特征向量则指向方差最大的方向,也就是数据变化最显著的方向,这样保留的主成分能最大程度保留原始数据的方差,减少信息损失。 另外,可能需要解释方差贡献率,即选择多少个主成分合适,通常通过累计贡献率超过某个阈值(如95%)来决定k的值。这部分在数学推导中可以提到特征值的累加比例。 在实现方法中,手动实现和库函数调用的对比也很重要。手动实现有助于理解,但实际应用中使用库函数更高效,特别是处理大数据时。 最后,生成相关问题需要考虑用户可能进一步想知道的内容,比如PCA的优缺点、优化方法、与其他技术的对比等。根据引用[3],提到PCA与最大可分性的关系,可以引导用户深入理解其数学基础。 需要检查是否遵循了系统级指令,比如数学公式使用$...$和$$...$$,LaTeX语法正确,引用标识自然添加。例如,在解释协方差矩阵时用$$...$$单独成段,特征值分解的公式也用正确格式。 总结下来,回答的结构应该是:原理分步骤讲解,数学推导,手动实现代码,库函数使用示例,最后相关问题。确保每个部分都清晰,并引用适当的参考文献。</think>### 主成分分析(PCA)算法详解 主成分分析(PCA)是一种通过正交变换将高数据投影到低空间的无监督方法,其核心目标是保留数据中的最大方差信息[^1]。以下从原理和实现两个层面进行说明: --- #### 一、工作原理(数学推导) 1. **数据标准化** 对原始数据矩阵$X$($n$个样本,$m$特征)进行标准化,使每个特征均值为0,方差为1: $$ z_{ij} = \frac{x_{ij} - \mu_j}{\sigma_j}, \quad \mu_j = \frac{1}{n}\sum_{i=1}^n x_{ij}, \quad \sigma_j = \sqrt{\frac{1}{n}\sum_{i=1}^n (x_{ij} - \mu_j)^2} $$ 2. **计算协方差矩阵** 协方差矩阵反映不同特征间的相关性: $$ C = \frac{1}{n} Z^T Z $$ 其中$Z$为标准化后的数据矩阵。 3. **特征值分解** 对协方差矩阵$C$进行特征分解,得到特征值$\lambda_1 \geq \lambda_2 \geq \dots \geq \lambda_m$和对应的特征向量$v_1, v_2, \dots, v_m$。每个特征向量代表一个主成分方向[^3]。 4. **选择主成分** 根据方差贡献率($\frac{\lambda_i}{\sum \lambda_j}$)选择前$k$个主成分,构造投影矩阵$W = [v_1, v_2, \dots, v_k]$。 5. **数据投影** 将原始数据投影到低空间: $$ Y = Z \cdot W $$ 其中$Y$为后的$n \times k$矩阵。 --- #### 二、实现方法(Python示例) **手动实现步骤** ```python import numpy as np # 1. 数据标准化 def standardize(X): mean = np.mean(X, axis=0) std = np.std(X, axis=0) Z = (X - mean) / std return Z # 2. 计算协方差矩阵并特征分解 def pca(Z, k): cov_matrix = np.cov(Z, rowvar=False) eigenvalues, eigenvectors = np.linalg.eigh(cov_matrix) sorted_indices = np.argsort(eigenvalues)[::-1] top_k_indices = sorted_indices[:k] W = eigenvectors[:, top_k_indices] return Z @ W # 示例调用 X = np.random.rand(100, 5) # 100样本,5特征 Z = standardize(X) Y = pca(Z, 2) # 至2 ``` **使用scikit-learn库** ```python from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler scaler = StandardScaler() Z = scaler.fit_transform(X) pca = PCA(n_components=2) Y = pca.fit_transform(Z) ``` --- #### 三、关键点说明 1. **最大可分性**:PCA通过最大化投影方差保留数据可分性,数学上等价于协方差矩阵的特征值分解[^3]。 2. **正交性约束**:主成分之间相互正交,消除冗余信息。 3. **应用场景**:图像压缩、特征提取、数据可视化等[^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chenglin_Yu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值