x11⋮x1N⋯⋱⋯x1p⋮xNp∈Rp×n对应地,其样本均值 SampleMean (此处是每一列样本的均值)可以通过如下推导,利用矩阵的形式表示:
XXX=x1x2⋮xp=N1i=1∑Nxi∈Rp×1=N1(x1,x2,⋯,xN)11⋮1=N1XT⋅1N
同样地,也可以对其样本方差 SampleCovariance 的矩阵形式进行表达:
SSSS=S11⋮S1N⋯⋱⋯S1p⋮SNp=N1i=1∑N(xi−X)(xi−X)T=N1[x1−X,⋯,xN−X](x1−X)T⋮(xN−X)T=N1(XT−X⋅1NT)⋅(XT−X⋅1NT)T=N1XTHX∈Rp×p
其中,H=IN−N11N×N.
称H矩阵为:中心矩阵|CenteringMatrix,关于中心矩阵,它拥有如下性质:
- 对称性:HT=H
- 幂等性:Hn=H
证明:略
事实上,上述中的均值和方差以及符号只是便于理解,在多维空间中,均值通常记为μ,方差事实上是数据的协方差,记为Σ.
方法思想|Algorithm
主成分分析(Principal Component Analysis,PCA),是一种用于提取数据集中的模式的统计技术,也是目前最受欢迎的降维算法。
其主要思想可以概括为 “ 一个中心两个基本点 ”,一个中心指 对原式特征空间进行重构,使原本相关的向量空间重构为互相无关的向量空间;两个基本点分别指:最大投影方差、最小重构代价。(事实上是两个角度)
最大投影方差
从 最大投影方差 这个角度出发,我们的目的是找到一个低维超平面,使得将数据样本投影到该超平面上后的方差最大,也就是说这个超平面很很好地区分开每个样本。
以二维空间为例,如下图所示:
我们需要找到向量u1和u2(图中指向右上角的方向为u1),使得各个样本点在u1上的投影最分散,也就是各个样本投影在u1上后,它们与它们的均值(这个均值也投影在了u1 上)距离最远。于是有目标函数:
J=s.t.u1maxN1i=1∑N(xiTu1−xTu1)2u1Tu1=1
向量a在向量b上的投影为:∣a∣cos<a,b>
而:a⋅b=∣a∣∣b∣cos<a,b>
所以当b为单位向量时,二者的内积即是a在基b上的投影值
对上式进行求解:
=====N1i=1∑N(xiTu1−xTu1)2N1i=1∑N[(xi−x)Tu1]2N1i=1∑N[(xi−x)Tu1]T[(xi−x)Tu1]N1i=1∑N[u1T(xi−x)(xi−x)Tu1]u1T[N1i=1∑N(xi−x)(xi−x)T]u1u1TSu1
于是,原式化为:
J=u1maxu1TSu1s.t.u1Tu1=1
利用拉格朗日乘子法对该优化问题进行求解:
L∂u1∂L⇒Su1=u1TSu1−λ1(u1Tu1−1)=2Su1−2λ1u1=0=λ1u1
可见,λ1是协方差矩阵S 的特征值,u1 是其特征向量,于是整个问题转化为了求协方差矩阵S 的特征分解问题。
将Su1=λ1u1 带入目标函数,
待更
另一个角度;SVD分解的方法
代码实现|Code
根据上述分析,我们能够得出对数据集进行PCA的一般步骤:
sklearn库中的PCA
各参数介绍:https://blog.csdn.net/weixin_44781900/article/details/104839136
1 2 3 4 5
| import numpy as np from sklearn.decomposition import PCA data = np.random.rand(10, 5) pca = PCA(n_components=2) low_dim_data = pca.fit_transform(data)
|
自写PCA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| def myPCA(data,n): newData = zeroMean(data) covMat = np.cov(newData,rowvar=0) eigVals, eigVects = np.linalg.eig(np.mat(covMat)) eigValIndice = np.argsort(eigVals) n_eigValIndice = eigValIndice[-1:-(n+1):-1] n_eigVects = eigVects[:, n_eigValIndice] lowDData = newData * n_eigVects return np.array(lowDData)
|
拓展|Others
P-PCA
待更
Kernel-PCA
待更
https://vimsky.com/examples/usage/python-sklearn.decomposition.KernelPCA-sk.html
番外:PCA计算指标权重
https://blog.csdn.net/weixin_53972936/article/details/123310662
参考|Reference
- 机器学习白板推导系列|P22-P27
- 第八章——降维|博客园
- python实现PCA降维|博客园