pca降维的基本思想_PCA降维

维度灾难

当样本数据的维度较高时,可能会面临维度灾难问题。https://zhuanlan.zhihu.com/p/87389704。概括来说,当数据的维度越高,要找到最优解甚至达到稍低维度时模型的同等performance,所需要的数据越多,而且是成几何数增长的。

一种有效的解决方法是降维。

样本均值和样本协方差

给定样本数据$X=(x_1,x_2,\cdots,x_N)^T_{N\times P}$,其中$N$表示样本个数,$P$表示样本的维度,$x_i=(x_{i,1},\cdots,x_{i,P})^T$,$x_i \in \mathbb{R}^P,i=1,\cdots,N$。

样本均值为,

$$\begin{equation}\begin{aligned}\overline{x}_{P\times 1}&=\frac{1}{N}\sum_{i=1}^N x_i\\&=\frac{1}{N}\underbrace{(x_1,x_2,\cdots,x_N)}_{X^T}\begin{pmatrix}1 \\1\\\vdots\\1\end{pmatrix}_{N\times 1}\\&=\frac{1}{N}X^T\mathbf{1}_{N}\end{aligned}\tag{1}\end{equation}$$

样本协方差为

$$\begin{equation}\begin{aligned}S_{P\times P}&=\frac{1}{N}\sum_{i=1}^{N}(x_i -\overline{x})(x_i - \overline{x})^T\\&=\frac{1}{N}\underbrace{(x_1-\overline{x},x_2-\overline{x},\cdots,x_N-\overline{x})}_{X^T-\frac{1}{N}X^T\mathbf{1}_N\mathbf{1}_N^T}\begin{pmatrix}(x_1-\overline{x})^T \\(x_2-\overline{x})^T\\\vdots\\(x_N-\overline{x})^T\end{pmatrix}_{N\times P}\\&=\frac{1}{N}X^T\underbrace{(I_N-\frac{1}{N}\mathbf{1}_N\mathbf{1}_N^T)}_{H}\underbrace{(I_N-\frac{1}{N}\mathbf{1}_N\mathbf{1}_N^T)^T}_{H^T}X\\&=\frac{1}{N}X^THH^TX\\&=\frac{1}{N}X^THX\end{aligned}\tag{2}\end{equation}$$

其中,$H$称为centering matrix,易证明$H^T=H,H^n=H$。

原始特征空间的重构

PCA将为的主要思想是:对原始特征空间进行重构,具体做法是找到一组线性无关的基(主成分)代替原来的线性相关的基。

角度一:最大投影方差

6e54c1b6d5afc36000932aca0691bcd1.png

以二维空间空间为例,将数据投影到$u_1$和$u_2$方向上,显然在$u_1$方向上的投影方差大于在$u_2$方向上的投影方差。如果样本的维度为$P$,希望降维到$Q$维,则就是要找到投影方差最大的$Q$个方向(相互正交),也称为主成分。

假设由向量$\mathbf{a}$和方向向量$\mathbf{b}$,并且$\mathbf{b}$的模为1,即$\mathbf{b}^T\mathbf{b}=1$,则$\mathbf{a}$在$\mathbf{b}$上的投影为$\mathbf{a}^T\mathbf{b}$。

假设希望找到方向$u$,使得投影方差最大,则最大化下式

$$\begin{equation}\begin{aligned}J&=\frac{1}{N}\sum_{i=1}^{N}((x_i-\overline{x})^Tu)^2\\&=\sum_{i=1}^N\frac{1}{N}u^T(x_i-\overline{x})(x_i-\overline{x})^Tu\\&=u^T(\sum_{i=1}^N\frac{1}{N}(x_i-\overline{x})(x_i-\overline{x})^T)u\\&=u^T Su\end{aligned}\tag{3}\end{equation}$$

最大化带约束的目标函数

$$\begin{equation}\begin{cases}\hat{u}=\arg\max_{u}J \\ s.t.u^Tu=1\end{cases}\tag{4}\end{equation}$$

使用拉格朗日乘子法,

$$\begin{equation}\mathscr{L}(u,\lambda)=u^TSu+\lambda(1-u^Tu)\tag{5}\end{equation}$$

对$u$求导,令其等于0

$$\begin{equation}\frac{\partial \mathscr{L}}{\partial u}=2Su-\lambda\cdot 2u=0\tag{6}\end{equation}$$

即求u满足$Su=\lambda u$,可以看出$u$实际上就是样本协方差矩阵的特征向量,$\lambda$是其对应的特征值。将$Su=\lambda u$代入式(3),得到$J=u^T\lambda u=\lambda$,因此如果希望将原始维度由$P$降到$Q$,及选择前Q大的特征值对应的特征向量作为主成分,重构原始的数据。

对于原始数据$x_i$,可以用新得到的线性无关的基表示

$$\begin{equation}x_i=\sum_{k=1}^P((x_i-\overline{x})^Tu_k)u_k\tag{7}\end{equation}$$

假设主成分为$u1,\cdots,u_Q$,根据主成分重构数据,

$$\begin{equation}\hat{x}_i=\sum_{k=1}^Q((x_i-\overline{x})^Tu_k)u_k\tag{8}\end{equation}$$

角度二:最小重构距离

使用PCA降维后得到的重构数据,要尽量与原始数据相似。

$$\begin{equation}\begin{aligned}J&=\frac{1}{N}\sum_{i=1}^N||x_i-\hat{x}_i||^{2}\\&=\frac{1}{N}\sum_{i=1}^N||\sum_{k=Q+1}^P((x_i-\overline{x})^Tu_k)u_k||^2\\&=\frac{1}{N}\sum_{i=1}^N\sum_{k=Q+1}^P((x_i-\overline{x})^Tu_k)^2\\&=\sum_{k=Q+1}^P\frac{1}{N }\sum_{i=1}^Nu_k^T(x_i-\overline{x})(x_i-\overline{x})^Tu_k\\&=\sum_{k=Q+1}^Pu_k^TSu_k\end{aligned}\tag{9}\end{equation}$$

又因为u是线性无关的,因此最小化式(9)可以分别对$u_k^TSu_k,u_k^Tu_k=1,k=Q+1,\cdots,P$进行最小化,因此就等价于找到最小的$P-Q+1$个特征值对应的特征向量,剩余的Q个特征向量作为主成分。

PCA和SVD的关系

实对称矩阵的特征值分解

对于一个mxm的实对称矩阵$A$,可以分解为如下形式,

$$

\begin{equation}A = Q\Sigma Q^T=

Q\left[

\begin{matrix}

\lambda_1 & \cdots & \cdots & \cdots\\

\cdots & \lambda_2 & \cdots & \cdots\\

\cdots & \cdots & \ddots & \cdots\\

\cdots & \cdots & \cdots & \lambda_m\\

\end{matrix}

\right]_{m \times m}Q^T

\tag{10}

\end{equation}

$$

其中$Q$为标准正交阵,即有$QQ^T=I$,$I$为单位阵,$\lambda_i$为特征值,$q_i$是特征矩阵$Q$的列向量,为特征向量。

奇异值分解定义

对于一个$m\times n$的实数矩阵$A$,可以分解为如下形式

$$\begin{equation}A=U\Sigma V^T=U\left[\begin{matrix}\sigma_1 & 0 & 0 & 0 & 0\\0 & \sigma_2 & 0 & 0 & 0\\0 & 0 & \ddots & 0 & 0\\0 & 0 & 0 & \ddots & 0\\\end{matrix}\right]_{m\times n}V^T\tag{11}\end{equation}$$

其中,$U$和$V$为单位正交阵,即$UU^T=I$,$VV^T=I$,$U$称为左奇异矩阵,$V$称为右奇异矩阵,$\Sigma$为对角矩阵,主对角线上的值称为奇异值(主对角线上的元素非负,且不为0的个数取决于A的秩)。

对$HX$进行奇异值分解(SVD),

$$\begin{equation}HX=U\Sigma V^T\tag{12}\end{equation}$$

样本协方差矩阵$S_{P\times P}=X^THX=X^TH^THX$,将式(12)代入,得到

$$\begin{equation}S_{P\times P}=(U\Sigma V^T)^T U\Sigma V^T=V\Sigma^2V^T\tag{13}\end{equation}$$

假设$T=HXX^TH^T$,则代入式(12),得到

$$\begin{equation}T_{N\times N}=U\Sigma V^T(U\Sigma V^T)^T =U\Sigma^2U^T\tag{14}\end{equation}$$

可以看出,式(11)和(12)是对$S$和$T$的矩阵分解,两者的特征值相同。$V$的列向量为$S$的特征向量,$U$的列向量为$T$的特征向量。有上文可知样本协方差矩阵的特征向量构成主成分,且原始数据使用新的基表示的坐标为$H^TXV=U\Sigma V^TV=U\Sigma$,而$TU\Sigma=U\Sigma^2U^TU\Sigma=U\Sigma \Sigma^2$,显然$U\Sigma$由$T$的特征向量组成,结合式(12),坐标可以通过标准正交阵$U$缩放得到。

因此,$S$的特征分解直接得到准成分,然后计算$HXV$得到坐标;而$T$的特征分解则可以直接得到坐标。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 数据降维是一种常用的数据处理方法,它可以将高维数据转化为低维数据,从而减少数据的复杂度和计算量。PCA(Principal Component Analysis)是一种常用的数据降维方法,它可以通过线性变换将高维数据映射到低维空间中,同时保留数据的主要特征。在Python中,我们可以使用scikit-learn库中的PCA模块来实现数据降维。 ### 回答2: 数据降维是一种数据预处理方法,它的作用是在保持数据的最重要特征的同时,将高维数据压缩为低维数据,减少存储空间和计算量,提高数据处理的效率。 在进行数据降维时,常用的方法PCA(Principal Component Analysis),即主成分分析。PCA可以将大量相关特征转化为少量无关特征,这些无关特征即为主成分,它们能够捕捉到数据中最重要的信息,减弱噪声的影响,提高数据的质量和准确性。 下面,以Python中的PCA例子为例,来介绍数据降维的具体实现: 1. 导入必要的库 ``` import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from sklearn.decomposition import PCA ``` 2. 准备数据 ``` # 生成随机数据 np.random.seed(10) mean = [0, 0, 0] cov = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] data = np.random.multivariate_normal(mean, cov, 1000) ``` 3. 数据可视化 ``` fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(data[:,0], data[:,1],data[:,2]) plt.show() ``` 4. 数据降维 ``` pca = PCA(n_components=2) new_data = pca.fit_transform(data) ``` 5. 降维后数据可视化 ``` plt.scatter(new_data[:,0],new_data[:,1]) plt.show() ``` 通过这个例子可以看到,通过PCA对数据进行降维后,原本在三维空间中的数据点被投影到了一个平面上,并且数据的分布更加清晰和紧凑,这能够帮助我们更好地理解数据并分析数据的关系。在实际应用中,数据降维可以用于图像识别、语音识别、基因表达等方面,为数据分析提供更高效、准确和有用的工具。www.lvvu.com ### 回答3: 数据降维是一种将高维数据压缩到低维空间中的技术,以便更好地理解数据和进行数据分析。降维可以减少特征数量,简化模型,降低计算复杂度,提高算法效率,同时还可以去除无意义的噪声和冗余信息,增强数据的可解释性和泛化能力。 在Python中,可以使用PCA算法来实现数据降维PCA全称为Principal Component Analysis,即主成分分析,是一种线性降维方法,可以把原始数据投影到新的坐标系中,使得每个维度之间的相关性最小化。PCA的核心方法是将数据进行奇异值分解(SVD),通过计算协方差矩阵的特征值和特征向量来确定主成分,然后按照特征值大小排序,选取前k个主成分组合成新的特征空间,以达到降维的效果。 下面是一个简单的Python代码示例,利用sklearn库中的PCA函数对手写数字数据进行降维: ``` import numpy as np from sklearn.decomposition import PCA from sklearn.datasets import load_digits import matplotlib.pyplot as plt # 数据预处理 digits = load_digits() X = digits.data y = digits.target # PCA降维 pca = PCA(n_components=2) X_pca = pca.fit_transform(X) # 可视化 plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y) plt.xlabel('1st principal component') plt.ylabel('2nd principal component') plt.colorbar() plt.show() ``` 首先加载手写数字数据,将特征数据存储在X中,将标签存储在y中。然后使用PCA算法将X数据降为2维,存储在X_pca中。最后利用Matplotlib库将降维后的数据可视化,不同数字用不同颜色表示。从图中可以看出,原来64维的数据已经被压缩至仅有2维,并且不同数字在低维空间中已经被分离开来,说明降维后的数据可以更好地进行分类和可视化。 综上所述,数据降维是一种非常有用的数据预处理技术,在机器学习、图像处理、信号处理等领域都有广泛的应用。Python中的sklearn库提供了便捷的PCA函数,可以快速进行数据降维,并通过可视化来直观地观察降维效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值