通俗易懂的主成分分析法(PCA)详解

本文深入浅出地介绍了PCA(主成分分析)的基本数学原理及其在数据降维中的应用。PCA通过线性变换将原始数据转换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,特别适用于高维数据的降维。

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

转载自:http://blog.codinglabs.org/articles/pca-tutorial.html

文章分析脉络梳理:

 1.向量A和B的内积表示的是向量A在B上的投影长度。那么将一个向量与新的基做内积,结果则表示该向量在新的基下的坐标。

2.将新选定的基表示成矩阵形式,与原向量相乘,就得到了原向量在新选定的基所表示的空间(或坐标系)中的坐标表示了。

3.怎样选定这组基用于数据降维?(目标)

(1)首先将数据变换到选定基上后,数据的方差要大,尽量分散。

(2)各个基要正交(表示的信息要不相关,若单纯按方差选定基,则选定的基存在很大的相关性)

4.怎么做?怎么找这组正交基? (做法)

(1)协方差矩阵可以很好地表示各个特征的方差和不同特征之间的协方差

(2)按目标要求需要将协方差矩阵除去对角线元素化为0,对角线元素按从大到小排列。协方差矩阵对角化。

(3)对角化后按特征值大小排列,选定前k个最大的特征值对应的特征向量作为降维后的新基。


PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理。这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么。

当然我并不打算把文章写成纯数学文章,而是希望用直观和易懂的方式叙述PCA的数学原理,所以整个文章不会引入严格的数学推导。希望读者在看完这篇文章后能更好的明白PCA的工作原理。




进一步讨论

根据上面对PCA的数学原理的解释,我们可以了解到一些PCA的能力和限制。PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。

因此,PCA也存在一些限制,例如它可以很好的解除线性相关,但是对于高阶相关性就没有办法了,对于存在高阶相关性的数据,可以考虑Kernel PCA,通过Kernel函数将非线性相关转为线性相关,关于这点就不展开讨论了。另外,PCA假设数据各主特征是分布在正交方向上,如果在非正交方向上存在几个方差较大的方向,PCA的效果就大打折扣了。

最后需要说明的是,PCA是一种无参数技术,也就是说面对同样的数据,如果不考虑清洗,谁来做结果都一样,没有主观参数的介入,所以PCA便于通用实现,但是本身无法个性化的优化。

希望这篇文章能帮助朋友们了解PCA的数学理论基础和实现原理,借此了解PCA的适用场景和限制,从而更好的使用这个算法。


### 主成分分析法PCA)的具体实施步骤及原理 主成分分析(Principal Component Analysis, PCA)是一种常见的降维技术,用于将高维数据映射到低维空间,同时尽可能保留原始数据的重要信息。以下是PCA的具体实施步骤及其背后的原理: #### 1. 数据预处理 在进行PCA之前,通常需要对数据进行标准化处理。这是因为不同变量可能具有不同的量纲或取值范围,如果不进行标准化,可能会导致某些变量占据主导地位[^2]。 - **均值中心化**:对于每个变量,计算其均值并将其从该变量的每个观测值中减去。 - **方差缩放**:将每个变量的标准差调整为1,使得所有变量处于相同的尺度下。 ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() data_standardized = scaler.fit_transform(data) ``` #### 2. 计算协方差矩阵 为了捕捉变量之间的关系,需构建协方差矩阵。协方差矩阵是一个对称矩阵,其中第(i,j)个元素表示第i个变量与第j个变量之间的协方差[^3]。 \[ \text{Cov}(X,Y) = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{n-1} \] ```python import numpy as np cov_matrix = np.cov(data_standardized.T) print(cov_matrix) ``` #### 3. 特征分解 通过对协方差矩阵进行特征值分解,可以得到一组正交基向量(特征向量)以及对应的特征值。这些特征值反映了各个方向上的数据变异程度[^4]。 - **特征值**:衡量对应主成分的重要性。 - **特征向量**:定义了新的坐标轴的方向。 ```python eigenvalues, eigenvectors = np.linalg.eig(cov_matrix) print(eigenvalues) print(eigenvectors) ``` #### 4. 累积贡献率评估 根据特征值的大小排序,选择累积贡献率达到一定阈值(如95%)所需的最小数量的主成分作为最终结果[^4]。 \[ \text{Cumulative Contribution Rate} = \frac{\sum_{i=1}^{k} \lambda_i}{\sum_{j=1}^{p} \lambda_j} \] #### 5. 投影至新空间 利用选定的前k个特征向量构成变换矩阵,将原数据投影到由这k个主成分所张成的新子空间中[^2]。 ```python top_k_eigenvectors = eigenvectors[:, :k] transformed_data = data_standardized.dot(top_k_eigenvectors) print(transformed_data.shape) ``` --- ###
评论 58
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值