PCA、SVD

一、PCA:

       principal component analysis

       主成分分析

PCA
pic1.寻找主成分方向

 

      PCA顾名思义,就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据。具体的,假如我们的数据集是n维的,共有m个数据(x^{(1)},x^{(2)},...,x^{(m)})。我们希望将这m个数据的维度从n维降到n'维,希望这m个n'维的数据集尽可能的代表原始数据集。我们知道数据从n维降到n'维肯定会有损失,但是我们希望损失尽可能的小,转化成数学术语,就是每个行向量的方差尽可能大,行向量间的协方差为0(让属性间尽量不想管,信息尽量转移到某几个单独的属性上,从而实现降维)。

      下面以矩阵X为例进行讲解,假设拿到的数据是矩阵X。

       

       它的协方差矩阵则为(假设已实现标准化):

       

       1.1线性变换。现在我们希望降维后的协方差矩阵对角元尽可能大,非对角元尽可能为0,即变成一个对角矩阵。因此我们需要对D做一个线性变换,使得做线性变换后的矩阵的协方差矩阵变成对角矩阵(相当于变化新的坐标)。具体的线性变化过程如下图:

  • 若A为实对称矩阵,则A的对应于不同特征值的特征向量也是正交的。
  • 实对称矩阵一定正交相似与对角矩阵。

       

      1.2降维。Cy变成对角矩阵后,此时需要将对角元上的特征值进行排序,此时可以把特征值小的那部分对应的信息丢掉,以达到降维的目的。特征值此时代表的就是信息量的大小。具体如下图中的例子:

        

 

二、SVD

       singular value decomposition

       奇异值分解

 

      1、SVD的原理

       SVD也是对矩阵进行分解,但是和特征分解不同,SVD并不要求要分解的矩阵为方阵。假设我们的矩阵A是一个m×n的矩阵,那么我们定义矩阵A的SVD为:

                                 A = U\Lambda U^T

       

       SVD的降维:

        

       \sigma _r为奇异值,且 \sigma _r>0

 

        3、SVD与特征分解的关系

        奇异值就是 AA^T非零的特征值开根号。在PCA应用中,协方差矩阵是正定矩阵,而正定矩阵的奇异分解实质等价于特征分解。

       

 

三、PCA与SVD应用的区别

       分解:本文中介绍PCA时,为了PCA的通用性,举例时先求A的协方差矩阵,再对A的协方差矩阵进行特征分解,因为PCA的特征分解实际上只能作用于方阵。而SVD使用的奇异值分解则没有这种限制。

       降维:SVD通过低秩逼近达到降维的目的。注意到PCA也能达到降秩的目的,但是PCA需要进行零均值化,且丢失了矩阵的稀疏性。

       数值稳定性:通过SVD可以得到PCA相同的结果,但是SVD通常比直接使用PCA更稳定。因为PCA需要计算XX^T的值,对于某些矩阵,求协方差时很可能会丢失一些精度。

 

       

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PCA主成分分析是一种常用的线性降维方法之一,它通过线性投影将高维数据映射到低维空间,并保留了原始数据的特征。在Python中,可以使用scikit-learn库进行PCA主成分分析的实现。下面是一个使用PCA进行降维的Python代码示例: ```python from sklearn.decomposition import PCA # 假设X_scaled是经过标准化后的特征矩阵 pca = PCA(n_components=2) pca.fit(X_scaled) X_pca = pca.transform(X_scaled) print(X_pca.shape) ``` 上述代码中,我们设置主成分数量为2,然后使用`fit()`方法对经过标准化的特征矩阵进行训练,再使用`transform()`方法进行降维。最后打印出降维后数据的形状。 另外,通过绘制散点图可以对降维结果进行可视化: ```python import matplotlib.pyplot as plt # X2是降维后的数据,wine.target是数据的标签 X2 = X_pca[wine.target==0] plt.scatter(X2[:,0], X2[:,1], c='r', s=60, edgecolor='k') plt.legend(wine.target_names, loc='best') plt.xlabel('component 1') plt.ylabel('component 2') plt.show() ``` 在绘制散点图时,我们选择两个主成分作为x轴和y轴,然后根据数据的标签进行分类绘制。此外,还可以使用热图来展示原始特征与主成分之间的关系: ```python plt.matshow(pca.components_, cmap='plasma') plt.yticks([0,1], ['component 1', 'component 2']) plt.colorbar() plt.xticks(range(len(wine.feature_names)), wine.feature_names, rotation=60, ha='left') plt.show() ``` 热图中的每个方格代表一个原始特征与主成分之间的关系,正数表示正相关,负数表示负相关。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值