【菜菜的sklearn课堂笔记】主成分分析PCA与奇异值分解SVD-降维的实现方法

视频作者:菜菜TsaiTsai
链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili

二维特征矩阵降维

  1. 输入原数据,结构为 ( 3 , 2 ) (3,2) (3,2),即三个样本,每个样本两个维度。找出原来的2个特征对应的直角坐标系,本质是找出2个特征构成的2为平面
  2. 决定降维后的特征数量:1
  3. 旋转找出一个新坐标系,本质是找出2个新的特征向量,以及它们构成的新二维平面,新特征向量让数据能够在压缩到少数特征上,并且总信息量不损失太多
  4. 找出数据点在新坐标系上,2个新坐标轴上的坐标
  5. 选取第1个方差最大的特征向量,删掉没有被选中的特征,成功将二维平面降为一维

p维特征矩阵降维

  1. 输入原数据,结构为 ( n , p ) (n,p) (n,p),即n个样本,每个样本p个维度。找出原来的p个特征向量构成的p维空间V
  2. 决定降维后的特征数量:k
  3. 通过某种变化,找出p个新的特征向量,以及它们构成的新p维空间V
  4. 找出原始数据在新特征空间V中的p个新特征向量上对应的值,即将数据映射到新空间中
  5. 选取前k个信息量最大的特征,删掉没有被选中的特征,成功将p为空间V降为k维

在步骤3当中,我们用来找出n个新特征向量,让数据能够被压缩到少数特征上并且总信息量不损失太多的技术就是矩阵分解。
PCA和SVD是两种不同的降维算法,但他们都遵从上面的过程来实现降维,只是两种算法中矩阵分解的方法不同,信息量的衡量指标不同罢了。PCA使用方差作为信息量的衡量指标,并且特征值分解来找出空间V。降维时,它会将特征矩阵X分解为 Q Σ Q − 1 Q \Sigma Q^{-1} QΣQ1三个矩阵,其中 Q Q Q Q − 1 Q^{-1} Q1是辅助的矩阵, Σ \Sigma Σ是一个对角矩阵(即除了对角线上有值,其他位置都是0的矩阵),其对角线上的元素就是方差。降维完成之后,PCA找到的每个新特征向量就叫做“主成分”,而被丢弃的特征向量被认为信息量很少,这些信息很可能就是噪音。
而SVD使用奇异值分解来找出空间V,分解为 U Σ V T U \Sigma V^{T} UΣVT,其中 Σ \Sigma Σ也是一个对角矩阵,不过它对角线上的元素是奇异值(即特征值的开方),这也是SVD中用来衡量特征上的信息量的指标。 U U U V T V^{T} VT分别是左奇异矩阵和右奇异矩阵,也都是辅助矩阵。

PCA和特征选择技术都是特征工程的一部分,它们有什么不同?

特征选择是从已存在的特征中选取携带信息最多的,选完之后的特征依然具有可解释性,我们依然知道这个特征在原数据的哪个位置,代表着原数据上的什么含义。
PCA,是将已存在的特征进行压缩,降维完毕后的特征不是原本的特征矩阵中的任何一个特征,而是通过某些方式组合起来的新特征。通常来说,新特征矩阵生成之后也不具有可读性,我们无法判断新特征矩阵的特征是从原数据中的什么特征组合而来,新特征虽然带有原始数据的信息,却已经不是原数据上代表着的含义了。以PCA为代表的降维算法因此是特征创造(feature creation,或feature construction)的一种。

实际上之前在白板推导系列笔记中有说到基本的PCA和SVD

关于SVD推导

假如 A A A m × n m \times n m×n维矩阵,则 A T A A^{T}A ATA为对称正定矩阵
对称性: ( A T A ) T = A T A ⇒ 对称性 (A^{T}A)^{T}=A^{T}A \Rightarrow 对称性 (ATA)T=ATA对称性
正定性: x T A T A x = ( A x ) T ( A x ) ≤ 0 ⇒ 正定性 x^{T}A^{T}Ax=(Ax)^{T}(Ax)\leq 0 \Rightarrow 正定性 xTATAx=(Ax)T(Ax)0正定性
对于矩阵 A A A,有
( A T A ) v i = λ i v i (A^{T}A)v_{i}=\lambda_{i}v_{i} (ATA)vi=λivi
其中 λ i \lambda_{i} λi为特征值, v i v_{i} vi为特征向量。假定 ( v i , v j ) (v_{i},v_{j}) (vi,vj)是一组正交基,那么有 v i T ⋅ v j = 0 v_{i}^{T}\cdot v_{j}=0 viTvj=0,那么
( A v i , A v j ) = ( A v i ) T ⋅ A v j = v i T A T A v j = v i T λ j v j = λ j v i T v j = 0 (Av_{i},Av_{j})=(Av_{i})^{T}\cdot Av_{j}=v_{i}^{T}A^{T}A v_{j}=v_{i}^{T}\lambda_{j}v_{j}=\lambda_{j}v_{i}^{T}v_{j}=0 (Avi,Avj)=(Avi)TAvj=viTATAvj=viTλjvj=λjviTvj=0
因此 A v i , A v j Av_{i},Av_{j} Avi,Avj也是一组正交基,根据上述公式可以推导出
( A v i , A v i ) = λ i v i T v i = λ i (Av_{i},Av_{i})=\lambda_{i}v_{i}^{T}v_{i}=\lambda_{i} (Avi,Avi)=λiviTvi=λi

定义(非方阵的行列式)
A ∈ M n × m ( R ) A \in M_{n \times m}(\mathbb{R}) AMn×m(R),其中 n > m n>m n>m,定义 ∣ det A ∣ = det ( A T A ) |\text{det}A|=\sqrt{\text{det}(A^{T}A)} detA=det(ATA)
A ∈ M n × m R A \in M_{n \times m}\mathbb{R} AMn×mR,其中 n < m nn<m,定义 ∣ det A ∣ = det ( A A T ) |\text{det}A|=\sqrt{\text{det}(AA^{T})} detA=det(AAT)

作者:castelu
链接:非方阵的行列式_哔哩哔哩_bilibili

从而可以得到
∣ A v i ∣ 2 = λ i ⇒ ∣ A v i ∣ = λ i |A v_{i}|^{2}=\lambda_{i}\Rightarrow |Av_{i}|=\sqrt{\lambda_{i}} Avi2=λiAvi=λi
根据上述公式,有
A v i ∣ A v i ∣ = 1 λ i A v i \frac{Av_{i}}{|Av_{i}|}=\frac{1}{\sqrt{\lambda_{i}}}Av_{i} AviAvi=λi 1Avi
1 λ i A v i = u i \begin{aligned} \frac{1}{\sqrt{\lambda_{i}}}Av_{i}=u_{i}\end{aligned} λi 1Avi=ui,可得
A v i = λ i u i = δ i u i Av_{i}=\sqrt{\lambda_{i}}u_{i}=\delta_{i}u_{i} Avi=λi ui=δiui
其中 δ i = λ i \delta_{i}=\sqrt{\lambda_{i}} δi=λi ,进一步推导
A V = A ( v i , v 2 , ⋯   , v n ) = ( A v 1 , A v 2 , ⋯   , A v n ) = ( δ 1 u 1 , δ 2 u 2 , ⋯   , δ n u n ) = U Σ \begin{aligned} AV&=A(v_{i},v_{2},\cdots ,v_{n})\\ &=(Av_{1},Av_{2},\cdots ,Av_{n})\\ &=(\delta_{1}u_{1},\delta_{2}u_{2},\cdots ,\delta_{n}u_{n})\\ &=U \Sigma \end{aligned} AV=A(vi,v2,,vn)=(Av1,Av2,,Avn)=(δ1u1,δ2u2,,δnun)=UΣ
从而得出 A = U Σ V T A=U \Sigma V^{T} A=UΣVT

作者:陈楠
链接:SVD奇异值分解逐步推导 - 知乎 (zhihu.com)

PCA需要对协方差矩阵 1 M X X T \begin{aligned} \frac{1}{M}XX^{T}\end{aligned} M1XXT进行特征值分解,SVD需要对 A T A A^{T}A ATA进行特征值分解,如果取 A = X T M \begin{aligned} A= \frac{X^{T}}{\sqrt{M}}\end{aligned} A=M XT,二者等价,此时PCA可以转化成SVD求解

你可能感兴趣的:(菜菜的sklearn课堂,sklearn,python,机器学习,算法,人工智能)