主成分分析(PCA)降维原理、特征值分解与SVD分解

您所在的位置:网站首页 pca协方差 主成分分析(PCA)降维原理、特征值分解与SVD分解

主成分分析(PCA)降维原理、特征值分解与SVD分解

2024-07-10 16:39| 来源: 网络整理| 查看: 265

文章目录 PCA介绍PCA降维原理最大化方差理论最小化投影理论对PCA两种理论的直观解释 方阵A求取特征值和特征向量方法(特征值分解)基于特征值分解协方差矩阵实现PCA算法SVD分解原理SVD分解求矩阵特征值的方法SVD分解的作用基于SVD分解协方差矩阵实现PCA算法保留主成分个数的评价指标

PCA介绍

主成分分析(PCA)的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。 PCA构建k维空间的具体过程: PCA从原始n维空间中顺序地找一组相互正交的坐标轴,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的正交坐标轴。 为什么要正交? 正交是为了使数据的损失最小,另外,特征值的特征向量是正交的。

PCA降维原理

PCA将原本的数据降低维度,而使得降低了维度的数据之间的方差最大(也可以说投影误差最小)。基于上面两种解释,我们有两种理论来解释PCA降维,即最大化方差理论和最小化投影理论,它们最终推导得出的结果是相同的。

最大化方差理论

即将PCA定义为一种正交投影,使得原始数据在降维后的空间中各个维度的方差最大化。 首先,给出原空间的中心点: x ‾ = 1 N ∑ n = 1 N x n \overline{x}=\frac{1}{N} \sum_{n=1}^{N} x_{n} x=N1​n=1∑N​xn​ 假设u1为投影向量,投影之后的方差为: 1 N ∑ n = 1 N ( u 1 T x n − u 1 T x ‾ ) 2 = u 1 T S u 1 \frac{1}{N} \sum_{n=1}^{N}(u_{1}^{T} x_{n}-u_{1}^{T} \overline{x})^{2}=u_{1}^{T} S u_{1} N1​n=1∑N​(u1T​xn​−u1T​x)2=u1T​Su1​ 上面公式的含义是每个xi和x的平均值点都乘以投影向量u1,这样所有点被转换成了新的正交基u1中的坐标,我们在新坐标系中求距离的平方差就是投影之后的方差。 要确保方差最大,这是一个带有约束条件的问题,约束条件为u1为正交基。我们可以使用拉格朗日乘子法解决。 拉格朗日函数为: u 1 T S u 1 + λ 1 ( 1 − u 1 T u 1 ) u_{1}^{T} S u_{1}+\lambda_{1}\left(1-u_{1}^{T} u_{1}\right) u1T​Su1​+λ1​(1−u1T​u1​) 上式对u1T求导,并令导数为0,可得: S u 1 = λ 1 u 1 S u_{1}=\lambda_{1} u_{1} Su1​=λ1​u1​ 这是一个标准的特征值表达式,λ1为特征值,u1为对应的特征向量。上式左边取得最大值的条件就是λ1最大,也就是取得最大的特征值的时候。假设我们是要将一个D维的数据空间投影到M维的数据空间中(M < D), 那我们取前M个特征向量构成的投影矩阵就是能够使得方差最大的矩阵u1。

最小化投影理论

即找到一个k维正交基,最小化原始数据点到投影后数据点的距离平方和。 假设我们已经找到了这个k维正交基: x n = ∑ i = 1 k α n i u i x_{n}=\sum_{i=1}^{k} \alpha_{n i} u_{i} xn​=i=1∑k​αni​ui​ 我们可以用近似法来表示投影后的点: x ~ n = ∑ i = 1 M z n i u i + ∑ i = M + 1 k b i u i \tilde x_{n}=\sum_{i=1}^{M} z_{n i} u_{i}+\sum_{i=M+1}^{k} b_{i} u_{i} x~n​=i=1∑M​zni​ui​+i=M+1∑k​bi​ui​ 上式得到的新x是由前M个基的线性组合加上后k - M个基的线性组合,注意这里的z是对于每个x都不同的,而b对于每个x是相同的,这样我们就可以用M个数来表示空间中的一个点,也就是使得数据降维。但是这样降维后的数据,必然会产生一些扭曲,我们用J描述这种扭曲,我们的目标是使J最小: J = 1 N ∑ n = 1 N ∥ x n − x ~ n ∥ 2 J=\frac{1}{N} \sum_{n=1}^{N}\left\|x_{n}-\tilde x_{n}\right\|^{2} J=N1​n=1∑N​∥xn​−x~n​∥2 上式的含义使对于每一个点,将降维后的点与原始的点之间的距离的平方和加起来,求平均值,我们就要使得这个平均值最小。令: ∂ J ∂ z n j = 0 ⇒ z n j = x n T u j , ∂ J ∂ b j = 0 ⇒ b j = x ‾ u j \frac{\partial J}{\partial z_{n j}}=0 \Rightarrow z_{n j}=x_{n}^{T} u_{j}, \quad \frac{\partial J}{\partial b_{j}}=0 \Rightarrow b_{j}=\overline{x} u_{j} ∂znj​∂J​=0⇒znj​=xnT​uj​,∂bj​∂J​=0⇒bj​=xuj​ 将上面得到的z与b带入上面xn降维的表达式,得: x n − x ~ n = ∑ i = M + 1 k ( ( x n − x ‾ ) u i ) u i x_{n}-\tilde x_{n}=\sum_{i=M+1}^{k}((x_{n}-\overline{x}) u_{i}) u_{i} xn​−x~n​=i=M+1∑k​((xn​−x)ui​)ui​ 将上式代入J,得: J = 1 N ∑ n = 1 N ∑ i = M + 1 k ( x n T u i − x ‾ ⋅ u i ) 2 = ∑ i = M + 1 k u i T S u i J=\frac{1}{N} \sum_{n=1}^{N} \sum_{i=M+1}^{k}\left(x_{n}^{T} u_{i}-\overline x \cdot u_{i}\right)^{2}=\sum_{i=M+1}^{k} u_{i}^{T} S u_{i} J=N1​n=1∑N​i=M+1∑k​(xnT​ui​−x⋅ui​)2=i=M+1∑k​uiT​Sui​ 接下来与最大化方差理论中类似,我们列一个拉格朗日函数,然后对UiT求导,最终可得: S u i = λ i u i S u_{i}=\lambda_{i} u_{i} Sui​=λi​ui​ 我们想要的前k个向量其实就是这里最大的k个特征值所对应的特征向量。

对PCA两种理论的直观解释

上面的两种理论其实可以更加直观地解释。想象一个二维坐标系,上面有一堆数据点,我们首先找出这些数据的中心点,然后通过中心点画一对互相正交的直线(新坐标系),将这个坐标系不断旋转。我们把数据点分别对两个新坐标轴做垂线,得到落在新坐标系上的新数据点。随着坐标系的旋转,显然转到某个角度时会有一个新坐标轴上的所有新数据点到中心点的距离的平方之和达到最大,而此时原数据点到这个新坐标轴的投影距离平方之和恰好达到最小。 为什么会这样呢? 其中就是简单的勾股定理,两边平方之和一定等于斜边的平方,而在上面的例子中,原数据点到中心点的距离就是斜边,它是不会变化的,因此当落在新坐标轴上的数据点到中心点的距离平方达到最大时,原数据点到这个新坐标轴的投影距离的平方恰好达到最小。

方阵A求取特征值和特征向量方法(特征值分解)

要求Ax=λx,首先(λE-Ax)=0,E为单位矩阵。要求向量x有非零解,即求其次线性方程组(λE-Ax)=0有非零解的值λ。即求行列式|λE-Ax|=0。解行列式获得的值即为矩阵A的特征值。将此值回代入原式求得相应的x,即为输入这个行列式的特征向量。 计算实例: 计算矩阵A的特征值与特征向量。 A = [ 3 2 4 2 0 2 4 2 3 ] A=\left[ \begin{matrix}3 ; 2 ; 4 \\\\ 2 ; 0 ; 2 \\\\ 4 ; 2 ; 3\end{matrix}\right] A=⎣⎢⎢⎢⎢⎡​324​202​423​⎦⎥⎥⎥⎥⎤​ 计算行列式为: ∣ λ E − A ∣ = ∣ λ − 3 − 2 − 4 − 2 λ − 2 − 4 − 2 λ − 3 ∣ |\lambda E-A|=\left| \begin{array}{ccc}{\lambda-3} ; {-2} ; {-4} \\\\ {-2} ; {\lambda} ; {-2} \\\\ {-4} ; {-2} ; {\lambda-3}\end{array}\right| ∣λE−A∣=∣∣∣∣∣∣∣∣∣∣​λ−3−2−4​−2λ−2​−4−2λ−3​∣∣∣∣∣∣∣∣∣∣​ = ( λ − 8 ) ( λ + 1 ) 2 =(\lambda-8)(\lambda+1)^{2} =(λ−8)(λ+1)2 计算得λ: λ 1 = 8 , λ 2 = λ 3 = − 1 \lambda_{1}=8, \lambda_{2}=\lambda_{3}=-1 λ1​=8,λ2​=λ3​=−1 对λ1=8,求其特征向量: ( λ 1 E − A ) x = 0 \left(\lambda_{1} E-A\right) x=0 (λ1​E−A)x=0 求得 α 1 = [ 2 1 2 ] \alpha_{1}=\left[ \begin{array}{l}{2} \\\\ {1} \\\\ {2}\end{array}\right] α1​=⎣⎢⎢⎢⎢⎡​212​⎦⎥⎥⎥⎥⎤​ 对λ2=λ3=-1,求其特征向量: ( λ 2 E − A ) x = 0 \left(\lambda_{2} E-A\right) x=0 (λ2​E−A)x=0 求得 α 2 = [ 1 0 − 1 ] , α 2 = [ 1 − 2 0 ] \alpha_{2}=\left[ \begin{array}{c}{1} \\\\ {0} \\\\ {-1}\end{array}\right], \alpha_{2}=\left[ \begin{array}{c}{1} \\\\ {-2} \\\\ {0}\end{array}\right] α2​=⎣⎢⎢⎢⎢⎡​10−1​⎦⎥⎥⎥⎥⎤​,α2​=⎣⎢⎢⎢⎢⎡​1−20​⎦⎥⎥⎥⎥⎤​

基于特征值分解协方差矩阵实现PCA算法

我们通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值特征向量,选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。 样本每一个特征的均值计算公式: x ‾ = 1 n ∑ i = 1 N x i \overline x=\frac{1}{n} \sum_{i=1}^{N} x_{i} x=n1​i=1∑N​xi​ 样本方差的计算公式: S 2 = 1 n − 1 ∑ i = 1 n ( x i − x ‾ ) 2 S^{2}=\frac{1}{n-1} \sum_{i=1}^{n}\left(x_{i}-\overline{x}\right)^{2} S2=n−11​i=1∑n​(xi​−x)2 样本X和Y的协方差计算公式: Cov ⁡ ( X , Y ) = E [ ( X − E ( X ) ) ( Y − E ( Y ) ) ] \operatorname{Cov}(X, Y)=E[(X-E(X))(Y-E(Y))] Cov(X,Y)=E[(X−E(X))(Y−E(Y))] = 1 n − 1 ∑ i = 1 n ( x i − x ‾ ) ( y i − y ‾ ) =\frac{1}{n-1} \sum_{i=1}^{n}\left(x_{i}-\overline{x}\right)\left(y_{i}-\overline{y}\right) =n−11​i=1∑n​(xi​−x)(yi​−y​) 设数据集为: X = ( x 1 , x 2 , x 3 , … , x n ) T X=(x_{1}, x_{2}, x_{3}, \dots, x_{n})^{T} X=(x1​,x2​,x3​,…,xn​)T 那么协方差矩阵为 1 n X X T \frac{1}{n} X X^{T} n1​XXT 利用特征值分解计算PCA的步骤: 首先将数据中每个特征的值去中心化,即减去该特征的均值。得到去中心化后的X。 然后计算协方差矩阵。 用特征值分解方法求上面协方差矩阵的特征值与特征向量。因为协方差矩阵是一个方阵,这里就是用线性代数中求其次线性方程组的特征值的方法。 对特征值从大到小排序,选择其中最大的k个。然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵P。 将数据转换到k个特征向量构建的新空间中,即Y=XP。

如果我们通过特征值分解协方差矩阵,那么我们只能得到一个方向的PCA降维。这个方向就是对数据矩阵X从列方向上压缩降维。

SVD分解原理

SVD分解的任务就是对任意MXN矩阵A,找到一组正交基使得经过它变换后还是正交基。 假设已经找到这样一组正交基: ( v 1 , v 2 , … , v n ) (v_{1}, v_{2}, \ldots, v_{n}) (v1​,v2​,…,vn​) 那么矩阵A将其映射为: ( A v 1 , A v 2 , … , A v n ) (A v_{1}, A v_{2}, \ldots, A v_{n}) (Av1​,Av2​,…,Avn​) 如果要让它们两两正交,即满足: A v i ⋅ A v j = ( A v i ) T A v j = v i T A T A v j = 0 A v_{i} \cdot A v_{j}=(A v_{i})^{T} A v_{j}=v_{i}^{T} A^{T} A v_{j}=0 Avi​⋅Avj​=(Avi​)TAvj​=viT​ATAvj​=0 由最初假设可得 v i T v j = v i ⋅ v j = 0 v_{i}^{T} v_{j}=v_{i} \cdot v_{j}=0 viT​vj​=vi​⋅vj​=0 如果正交基v选择为ATA的特征向量,由于ATA是对称阵,v之间两两正交,那么有: v i T A T A v j = v i T λ j v j = λ j v i T v j = λ j v i v j = 0 \begin{aligned} v_{i}^{T} A^{T} A v_{j}=; v_{i}^{T} \lambda_{j} v_{j} =\lambda_{j} v_{i}^{T} v_{j} =\lambda_{j} v_{i} v_{j}=0 \end{aligned} viT​ATAvj​=​viT​λj​vj​=λj​viT​vj​=λj​vi​vj​=0​ 这样就找到了一组正交基,这组正交基经过矩阵A变换后还是正交基。将映射后的正交基单位化(正交单位化后特征向量模为1)得: A v i A v i = λ i v i v i = λ i A v_{i} A v_{i}=\lambda_{i} v_{i} v_{i}=\lambda_{i} Avi​Avi​=λi​vi​vi​=λi​ 故有: ∣ A v i ∣ 2 = λ i ≥ 0 \left|\mathrm{A} v_{i}\right|^{2}=\lambda_{i} \geq 0 ∣Avi​∣2=λi​≥0 取单位向量: A v i = σ i u i A v_{i}=\sigma_{i} u_{i} Avi​=σi​ui​ σi就是奇异值,λi是特征值,这样我们就得到了奇异值与特征值之间的关系: σ i = λ i \sigma_{i}=\sqrt{\lambda_{i}} σi​=λi​ ​ 当k



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3