PCA 原理简介

PCA ( Principal Component Analysis , PCA )是主成分分析,主要 用于数据降维,对于一系列例子的特征组成的多维向量,多维向量里的某些元素本身没有区分性,比如某个元素在所有的例子中都为1,或者与1差距不大,那么这个元素本身就没有区分性,用它做特征来区分,贡献会非常小。所以我们的目的是找那些变化大的元素,即方差大的那些维,而去除掉那些变化不大的维,从而使特征留下的都是“精品”,而且计算量也变小了。

       对于一个k维的特征来说,相当于它的每一维特征与其他维都是正交的(相当于在多维坐标系中,坐标轴都是垂直的),那么我们可以变化这些维的坐标系,从而使这个特征在某些维上方差大,而在某些维上方差很小。例如,一个45度倾斜的椭圆,在第一坐标系,如果按照x,y坐标来投影,这些点的x和y的属性很难用于区分他们,因为他们在x,y轴上坐标变化的方差都差不多,我们无法根据这个点的某个x属性来判断这个点是哪个,而如果将坐标轴旋转,以椭圆长轴为x轴,则椭圆在长轴上的分布比较长,方差大,而在短轴上的分布短,方差小,所以可以考虑只保留这些点的长轴属性,来区分椭圆上的点,这样,区分性比x,y轴的方法要好!

       所以我们的做法就是求得一个k维特征的投影矩阵,这个投影矩阵可以将特征从高维降到低维。投影矩阵也可以叫做变换矩阵。新的低维特征必须每个维都正交,特征向量都是正交的。通过求样本矩阵的协方差矩阵,然后求出协方差矩阵的特征向量,这些特征向量就可以构成这个投影矩阵了。特征向量的选择取决于协方差矩阵的特征值的大小。

        举一个例子:

         对于一个训练集,100个对象模板,特征是10维,那么它可以建立一个100*10的矩阵,作为样本。求这个样本的协方差矩阵,得到一个10*10的协方差矩阵,然后求出这个协方差矩阵的特征值和特征向量,应该有10个特征值和特征向量,我们根据特征值的大小,取前四个特征值所对应的特征向量,构成一个10*4的矩阵,这个矩阵就是我们要求的特征矩阵,100*10的样本矩阵乘以这个10*4的特征矩阵,就得到了一个100*4的新的降维之后的样本矩阵,每个特征的维数下降了。

当给定一个测试的特征集之后,比如1*10维的特征,乘以上面得到的10*4的特征矩阵,便可以得到一个1*4的特征,用这个特征去分类。

       所以做PCA实际上是求得这个投影矩阵,用高维的特征乘以这个投影矩阵,便可以将高维特征的维数下降到指定的维数。

        在opencv里面有专门的函数,可以得到这个这个投影矩阵(特征矩阵)。

void cvCalcPCA( const CvArr* data, CvArr* avg, CvArr* eigenvalues, CvArr* eigenvectors, int flags );

### PCA主成分分析)的原理讲解 #### 1. **PCA的基本概念** 主成分分析(Principal Component Analysis, PCA)是一种常用的数据降维技术,旨在通过线性变换将原始数据投影到一个新的坐标系中,使新的维度之间相互独立,并按照方差大小对新维度进行排序[^2]。这样可以在保留大部分信息的同时降低数据的维度。 --- #### 2. **数学基础** ##### (1)**协方差矩阵** 假设有一组 $ d $ 维数据样本集合 $\{x_1, x_2, ..., x_n\}$,每条样本是一个 $ d $-维列向量。为了消除不同特征间的尺度影响,通常先对数据进行标准化处理: $$ z_i = \frac{x_i - \mu}{\sigma} $$ 其中,$\mu$ 是均值,$\sigma$ 是标准差。 接着计算协方差矩阵 $ C $,定义为: $$ C = \frac{1}{n} \sum_{i=1}^n (z_i z_i^\top) $$ 该矩阵是对称半正定矩阵,其对角线上元素代表各变量自身的方差,而其余位置上的元素则表示两两变量之间的协方差[^2]。 --- ##### (2)**特征分解** 通过对协方差矩阵 $ C $ 进行特征值分解,得到一组特征值及其对应的特征向量。设特征值为 $\lambda_1, \lambda_2, ..., \lambda_d$,相应的单位特征向量为 $v_1, v_2, ..., v_d$。这些特征向量构成了新的坐标轴方向,称为“主成分”。 根据特征值的大小对主成分进行排序,前几个具有较大特征值的方向能够解释更多的数据变化。因此,可以选择前 $ k $ 个主成分构成低维子空间,完成降维操作。 --- #### 3. **几何意义** 从几何角度来看,PCA 的目标是寻找一个超平面,使得数据在这个平面上的投影最大化方差。具体来说: - 投影后的第一个主成分方向应最大程度地反映数据的变化情况; - 第二个主成分方向应在与第一个主成分垂直的前提下继续捕获剩余的最大方差; - 此过程依次类推直到所有可能的新维度都被考虑完毕[^1]。 --- #### 4. **计算步骤总结** 以下是 PCA 方法的主要流程[^2]: 1. 对原始数据进行中心化或标准化预处理; 2. 构造协方差矩阵或者相关系数矩阵; 3. 执行特征值分解/奇异值分解(SVD),求解出所有的特征根以及它们各自关联的特征矢量; 4. 根据累积贡献率挑选重要程度较高的若干个主分量形成最终转换矩阵W; 5. 利用 W 将原高维资料映射至较低维度的空间里表达出来。 --- #### 5. **Python 实现简介** 在 Python 中,可以借助 scikit-learn 库快速实现 PCA 。例如: ```python from sklearn.decomposition import PCA import numpy as np # 创建随机数据集 X = np.random.rand(100, 5) # 初始化PCA对象并指定目标维度 pca = PCA(n_components=2) # 拟合并转化数据 result = pca.fit_transform(X) print("Transformed Data Shape:", result.shape) ``` 这里 `n_components` 参数决定了希望降到多少维数[^3]。 --- ### 总结 综上所述,PCA 不仅提供了强大的理论支撑而且具备实际应用价值,在众多学科领域内都占据不可替代的地位[^4]。理解它的核心在于把握如何重构原有特性间关系并通过最优方式简化表征体系结构而不丢失过多本质属性的信息含量。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值