主成分分析PCA(Principal Component Analysis)介绍

本文详细介绍了K-L变换与PCA的基本原理及其在人脸识别领域的应用,包括人脸图像的最优表示、均方误差最小化等核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久之前,有一次做人脸识别的时候用过PCA,大概记得是降维用的,然后前段时间用到LDA的时候顺带看到PCA才发现忘的差不多了,干脆把一些资料整理一下吧。


一.K-L变换

说PCA的话,必须先介绍一下K-L变换了。

K-L变换是Karhunen-Loeve变换的简称,是一种特殊的正交变换。它是建立在统计特性基础上的一种变换,有的文献也称其为霍特林(Hotelling)变换,因为他在1933年最先给出将离散信号变换成一串不相关系数的方法。
K-L变换的突出优点是它能去相关性,而且是均方误差(Mean Square Error,MSE)意义下的最佳变换。

下面就简单的介绍一下K-L变换了。

设,随机向量X ∈Rn(n阶列向量),它的均值向量为mX,则其协方差矩阵可以表示为

Cx= E{(X-mx)*(X-mx)T}                           (2.1)

Cx是一个n*n阶的实对称阵。

K-L变换定义了一正交变换A ∈Rn*n,将X ∈Rn的向量映射到用Y ∈Rn代表的向量,并且使Y向量中各分量间不相关:
Y = A*(X-mx)                                            (2.2)

因为Y的各分量间不相关,则其协方差矩阵Cy为对角阵,即

Cy = diag(λ12,...,λn)

(优快云的编辑器不知道怎么打矩阵,diag这个符号忘了的同学自己百度吧)

而矩阵A总是可以找到的,因为对于实对称阵,总能找到一个正交阵A,使得ACxAT的运算结果为对称阵。K-L变换中,将A的每一行取为Cx的特征向量,并且将这些特征向量按对应的特征值大小进行降序排序,使最大特征值对应的特征向量在A的第一行,而最小特征值对应的特征向量在A的最后一行。而Cy是Cx对角化后的结果,所以两个矩阵的特征值是一致的(λ12,...,λn)。

这样就可以通过矩阵A实现由随机向量X到随机向量Y的K-L变换了,而由

X = ATY +mx                                          (2.3)

就可以实现Y反变换到X。
若选择的最大k个特征值对应的k个特征向量,组成k×n的转换矩阵A,则变换后Y降为k维的,则由Y对X的恢复公式如下:

X‘ = AKY +mx                                          (2.4)

这时候Cy = diag(λ12,...,λk),X与X’之间的均方误差可以由下式表达:

λk+1+.λk+2...+λn                                       (2.5)                            (没有公式编辑器啊)

上面我们提到了对于特征值λ是从大到小排序的,那么这时候通过式子2.5可以表明通过选择k个具有最大特征值的特征向量来降低误差。因此,从可以将向量X和它的近似X‘之间的均方误差降至最小这方面来说,K-L变换是最佳变换。


二.PCA,主成分分析

在二十世纪九十年代初,Kirby和Sirovich开始讨论利用PCA技术进行人脸图像的最优表示问题。并且由M.Turk和A.Pentland将此技术用于人脸识别中,并称为特征脸方法。M.Turk和A.Pentland将m×n的人脸图像,重新排列为m *n维的列向量。则所有的训练图像经此变换后得到一组列向量:{ xi },xi∈Rm*n,其中N代表训练样本集中图像的个数。将图像看成一随机列向量,并通过训练样本对其均值向量和协方差矩阵进行估计。

均值向量μ通过下式估计:
μ = (1/N)*((x1+x2+...+xN)                        (3.1)
协方差矩阵

ST  = E{(xi-u)*(xi-u)T}  = X'X'T               (3.2)

其中X’ = [x1-μ, x2-μ,...., xN-μ]

则将投影变换矩阵A取为ST的前k个最大特征值对应的特征向量。利用K-L变换式对原图像进行去相关并降维:

Y = AK*(X-mx)                                          (3.3)

因为S=X'X'T,而X‘为(m*n)*N矩阵,但是因为X’为N阶矩阵,所以ST的秩最大为N-1,这样只要计算出ST的特征向量就可以计算出K-L变换矩阵了。

但是因为ST是(m*n)*(m*n)阶的矩阵,所以计算它的特征向量比较复杂,这里使用了一个技巧:

XTXviivi                                                (3.4)

(XXT)(Xvi)=δi(Xvi)                                    (3.5)

根据式子3.4与3.5可以看出,只要计算出XTX的特征值和特征向量δi与vi,然后就可以计算出XXT的 特征值和特征向量δi与Xvi,而XTX为N*N阶的矩阵,计算起来比较容易,除此以外,也可以使用SVD,这里就不提了。


三.PCA流程整理

PCA的整个变换过程整理了一下,如下:

1.将mxn的训练图像重新排列为m *n维的列向量。计算均值向量,并利用均值向量将所有样本中心化。
2.利用中心化后的样本向量,根据式(3.2)计算其协方差矩阵;对其特征值分解,并将特征向量按其对应的特征值大小进行降序排列。
3.选取第2步所得的k ≤N-1个最大特征值对应的特征向量组成投影矩阵A,将每幅已中心化的训练图像(x1-μ, x2-μ,...., xN-μ),向矩阵A投影,得到每幅训练图像的降维表示为(y1-μ, y2-μ,...., yN)
4.对测试图像中心化,并投影到矩阵A,得到测试图像的降维表示。
5.选择合适的分类器,对测试图像进行分类。

<think>好的,我现在需要回答用户关于主成分分析PCA)的概念、实现方法和应用场景的问题。首先,我得回顾一下自己了解的PCA知识,同时结合用户提供的引用内容,确保回答准确且符合要求。 用户提供的引用中有几个关键点需要注意。引用[1]提到PCA是数据降维的方法之一,引用[3]和[4]详细解释了PCA的原理,包括其作为非监督学习的方法,通过特征值分解进行数据压缩和去噪,以及主成分是原始数据的线性组合。引用[5]给出了一个使用scikit-learn实现PCA的代码示例。此外,引用[3]还提到了PCA的变种,如KPCA、增量PCA和稀疏PCA,这些可能在回答优化或应用部分有用。 首先,我需要明确用户的问题分为三个部分:概念、实现方法和应用场景。结构上应该分点回答,每个部分清晰。同时,根据系统级指令,行内数学公式需要用$...$,独立公式用$$...$$,并且正确使用LaTeX语法。还要生成相关问题,并在引用处添加标识。 概念部分,需要解释PCA的基本原理。根据引用[4],PCA是一种线性变换技术,用于降维并保留大部分信息。主成分是正交变换后的新坐标轴,是原始变量的线性组合。这里可能需要提到方差最大化,即PCA找到数据方差最大的方向作为第一主成分,后续成分与前面的正交且方差次大。需要数学表达式,比如协方差矩阵、特征值分解等。例如,协方差矩阵的计算公式,特征值和特征向量的作用。 实现方法部分,引用[5]中的代码示例是一个很好的起点。需要分步骤说明PCA的实现过程,包括数据标准化、计算协方差矩阵、特征分解、选择主成分、投影数据等步骤。同时,可以提到使用scikit-learn的PCA类简化流程。这里需要确保代码块正确,并解释关键参数如n_components。 应用场景部分,根据引用[1]、[3]、[4],PCA常用于数据压缩、可视化、去噪、特征提取等。比如在图像处理、金融数据分析、生物信息学等领域。需要具体例子,如人脸识别中的降维,或基因组数据中的特征提取。同时,引用[3]提到的变种应用场景,如KPCA处理非线性数据,可以补充说明。 在写作过程中,要检查数学公式的正确性。例如,协方差矩阵的公式是否正确,特征值分解的表示是否准确。例如,协方差矩阵的计算应该是$\frac{1}{n-1}X^TX$,其中$X$是标准化后的数据矩阵。特征分解部分,协方差矩阵分解为$W\Lambda W^T$,其中$W$是特征向量矩阵,$\Lambda$是特征值对角矩阵。 此外,需要确保每个引用标识正确对应到用户提供的引用内容。例如,提到PCA作为非监督学习的方法时引用[3],提到主成分是线性组合时引用[4],代码示例引用[5]。 生成相关问题部分,需要考虑用户可能进一步想知道的内容,比如PCA的优缺点、与其他降维方法的比较、参数选择的影响、数学推导细节等。例如,如何选择主成分的数量,PCA与LDA的区别,PCA的假设是否限制其应用等。 最后,要确保回答结构清晰,分点明确,语言通顺,符合中文习惯。同时,行内公式正确使用$符号,独立公式单独成段,并正确使用LaTeX语法,例如协方差矩阵、投影公式等。</think>### 主成分分析PCA)详解 #### 一、概念与数学原理 主成分分析PCA)是一种**非监督学习的线性降维方法**,核心是通过正交变换将高维数据映射到低维空间,同时保留最大方差信息[^3]。其数学原理包含以下关键步骤: 1. **数据标准化**:将原始数据去中心化(均值为0),公式为: $$X_{\text{norm}} = X - \mu \quad (\mu \text{为均值向量})$$ 2. **协方差矩阵计算**:标准化后的数据计算协方差矩阵: $$C = \frac{1}{n-1}X_{\text{norm}}^T X_{\text{norm}}$$ 3. **特征值分解**:对协方差矩阵$C$进行特征分解,得到特征值$\lambda_i$和对应特征向量$W$: $$C = W \Lambda W^T \quad (\Lambda \text{为特征值对角矩阵})$$ 4. **主成分选择**:按特征值从大到小排序,选取前$k$个特征向量构成投影矩阵$W_k$,将原始数据投影到低维空间: $$Z = X_{\text{norm}} W_k$$ 每个主成分对应一个特征向量,其重要性由特征值$\lambda_i$衡量,方差贡献率为$\lambda_i / \sum \lambda_i$[^4]。 --- #### 二、实现方法(Python示例) 使用`scikit-learn`实现PCA的完整流程: ```python from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler # 数据标准化(PCA前必须) scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 初始化PCA并降维 pca = PCA(n_components=2) # 指定保留2个主成分 X_pca = pca.fit_transform(X_scaled) # 查看方差贡献率 print("方差贡献率:", pca.explained_variance_ratio_) ``` **关键参数说明**: - `n_components`:可设为整数(目标维度)或小数(保留方差的百分比,如0.95) - `svd_solver`:优化算法选择(如`auto`, `full`, `randomized`) --- #### 三、应用场景 1. **数据可视化**:将高维数据降至2D/3D,便于绘制散点图观察分布。 2. **特征压缩**:减少图像、语音等数据的存储和计算成本[^4]。 3. **去噪与预处理**:通过保留主成分过滤噪声,提升模型鲁棒性。 4. **多变量分析**:在金融领域分析股票收益率的关联性,或在生物信息学中处理基因表达数据[^1][^4]。 **案例**: 在人脸识别中,PCA可将数万像素的图片降至几十个主成分(特征脸),显著提升分类效率。 --- #### 四、优化与限制 - **优化方法**: - **核PCA(KPCA)**:通过核函数处理非线性数据。 - **增量PCA**:适用于内存不足的大数据集[^3]。 - **局限性**: - 主成分的可解释性较弱(线性组合可能缺乏物理意义)。 - 对异常值敏感,需提前标准化处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值