Master的PCA + SVD理解

1. PCA

        其实PCA就是将数据的从旧的坐标投影到新的坐标,从而达到降低维度的目的,简单来说就是用以下这公式来表示:

X:数据(用旧坐标轴的坐标表示),P:新的坐标轴,Y:数据(用新的坐标轴的坐标表示)

X*P=Y

        接下来的任务就是怎么找到认为合适的P来表示,我们就用最大方差去衡量。为什么用方差去解释呢,因为方差的意义就是衡量了数据集中所有数值相对均值的偏离情况,方差越大,偏离情况就越大,倘若我们用方差小的属性去做坐标轴,那单看这个维度肯定是所有数据都粘在一起的,根本没有区分性,换句话来说就没有区分的意义,所以我们抛弃方差小的,选择方差大的属性来作为坐标轴。此时,任务就变成每一个属性的方差了,然后做一个从大到小的排序,按照列向量的方法从大到小排出来,形成一个由列向量构成的矩阵Y。

        接下来,我们对每一个列向量做一个约束,具体有,每一个列向量之间不可以是线性相关,如果相关那也没有分开表示的意义了。

        于是我们协方差去做线性不相关的处理,构造一个矩阵:

A = Y^TY

        换一个表现形式就是:

(XP)^T(XP) = P^TX^TXP = P^T(X^TX)P

let \ Cov = (X^TX)

        协方差矩阵就被构造出来了,对角线就是自己跟自己的方差,非对角线上的元素就是不同属性之间的方差,这个协方差矩阵是一个对角矩阵。接着我们将他对角化,具体过程就是求特征向量,特征值,然后对特征向量进行正交化和单位化,然后将特征值从大到小排列,形成正交矩阵,就是最终的坐标轴了。

        还有一点就是:PCA方差做完减均值后,好像还需要除以标准差,在第一步减均值之后,其实应该还有一步对特征做方差归一化。比如一个特征是汽车速度(0到100),一个是汽车的座位数(2到6),显然第二个的方差比第一个小。因此,如果样本特征中存在这种情况,那么在第一步之后,求每个特征的标准差,然后对每个样例在该特征下的数据除以标准差。(去掉量纲,将不同量纲的数据拉伸至同一水平。公平比较。 )

        summary:

​​​​​​​

我们注意哈,上面的图也很清晰地说的了,特征值是从大到小,按照顺序,从左到右挂在对角线上的,一列只挂一个,然后每一个特征值对应着的特征向量我们也是像挂腊肠一样,按照列的方式从左到右排列

根据老师给的PPT,我们可以看到:

原来矩阵 O 的shape是:n*m,n是样本数,m是属性数

我们用SVD去做PCA,左奇异矩阵矩阵 U 的维度是n * n,奇异值矩阵 S 的维度是n * m,右奇异矩阵 V 的维度是m * m

然后做PCA只去管右边的右奇异矩阵矩阵就好了,然后我们根据variance explained 去选我们需要保留多少个维度,注意哈,这里一个维度就是一个特征值了,所以我们就取右奇异矩阵的前多少列就好了 V[:feature_num]

然后用原来的矩阵 O(n*m) 点乘 V(m *feature_num ) 就得到一个降维后的矩阵了 Z (n * feature_num)

然后我们看每一个维度,就是单看每一列,我们拎出来,取每一个维度的最大值,最小值个前N个,这个就是代表当前维度的特征(feature_nums)负责以前维度(m)的什么特征了(单独拿出来是m*1的维度噢),其中正数的是代表正比,负数代表的是反比

在奇异矩阵里面,排第一个的肯定是最最最重要的(奇异值越大,代表越重要),然后我们怎么知道我们用多少个特征可以表达出 原矩阵的多少信息呢?

就是用这个Variance Explained了

这个怎么计算的呢?看下面的表达式:

其实就是算奇异值的占总比而已,协方差矩阵的迹 是 等同于 特征值/奇异值的平方和,然后算每一个特征值/奇异值的占比就好了

 

2. SVD

        SVD的核心就是下面的公式:

A=U* \sigma * V^T

        假设A是一个M*N的矩阵,U是一个M*M (左奇异矩阵),sigma是一个M*N(奇异矩阵),V是一个N*N矩阵(右奇异矩阵),U和V都是正交矩阵

        首先和上面一样,构建一个矩阵:

Y=A^TA

        然后做特征分解,得到特征值\lambda和特征向量V

Z*V = \lambda *V

        左奇异矩阵:

U=\frac{A*V}{\sqrt{\lambda}}

        奇异矩阵:我们计算出来的奇异值有n个,n_1,n_2,n_3...n_n,且n_1>n_2>n_3>...>n_n将他们都挂在对角线上,形成一个对角矩阵,这个矩阵未必是方阵,也可以是方阵,当他是方阵,我们当然希望不是方阵啦,不然降什么维呢,你看这个奇异矩阵,一旦不是方阵,那么左奇异矩阵和右奇异矩阵的shape都会跟着变。

        另外当这个奇异矩阵越接近n,也就是越能接近原矩阵A,我们现在就是想用小于n的维度尽可能地去表达出原矩阵A。

        其次,这个奇异值的大小可以近似用方差去衡量,当前这个属性的方差越大,那么奇异值也会越大

        接下来,就是去看哪个属性有用了,对,其实也说了方差最大的,用处最大,课堂上给了两个变量去表示。第一个是explained_variance_,它代表降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分。第二个是explained_variance_ratio_,它代表降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。

       

        我们可以用以上两个指标去选出奇异值矩阵有多少个。假如我们得出了n=3

        然后代入第一条式子:

        现在我们用SVD来表示PCA,

A=U* \sigma * V^T

        然后左式右乘一个V:

A*V = U*\sigma

        A就是一个M*N的矩阵,V^T是一个3*n,所以V就是N*3,然后右边很明显啦,就是PCA公式的Y了。这样就可以用SVD把PCA给表达出来了

        所以SVD是对原矩阵两个方向的压缩,一个是像PCA一样,对属性进行压缩,另一个是对样本进行压缩,把样本之间属性值看起来相差不大的样本给去掉。

3. 下面就是一些学PCA和SVD时的基础知识了

        范数就是为了方便度量而定义出的一个概念,主要就是面对复杂空间和多维数组时,选取出一个统一的量化标准,以方便度量和比较。请务必记住,范数是人为定义的一种度量方法。

        二范数指矩阵A的2范数,就是A的转置共轭矩阵与矩阵A的积的最大特征根的平方根值,是指空间上两个向量矩阵的直线距离。类似于求棋盘上两点间的直线距离。

        F范数它的作用就是衡量一个矩阵的大小,像我们的实数都是可以直接比较大小的,但是矩阵和向量无法直接衡量它的大小,这个F范数是为了得到矩阵到原点(原矩阵)的距离。

        F范数的计算:

正交矩阵满足的特点:

 

        如果:AA^T=E(E为单位矩阵,AT表示“矩阵A的转置矩阵”。)或A^TA=E,则n阶实矩阵A称为正交矩阵,若A为正交阵,则满足以下条件:

        1)A^T是正交矩阵

        2)(E为单位矩阵)

        3)A^T的各行是单位向量且两两正交

        4)A^T的各列是单位向量且两两正交

        5)(Ax,Ay)=(x,y)x,y∈R

        6)|A|=1或-1

有一个课后习题,只是单纯记录一下

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值