主成分分析
🥃 PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。
🎯 特征值和奇异值
🎨 主成分分析—-PCA
正如字面上的意思,主成分分析,首先得找出所谓的”主成分”,并且表示它,然后才能分析。
一n
维数据集,要找所谓的”主成分”,不如说是找主成分所在的方向,也就是说找一个新的坐标系,然后把数据投影过去。
🍑 那么新的坐标系怎么找?
对于PCA来说,认为一个随机信号最有用的信息体包含在方差里。自然而然,我们希望信号在方差最大的维度作为我们的”主成分”,方差小的维度的信号就可以看做是信息量小的或者不重要的数据,那么就可以丢弃。
假m
个n
唯随机信号X=(x_1,x_2,…,x_m),存在一个坐标系w^T。(信号各x维度都减去了其均值)
对于一个一维向量来说,方差可以度量其包含的信息。对于一个矩阵,可以用协方差来表示:
那么容易得到信号X的协方差:
投影后方差:
要求方S'最大,那么可以得到优化问题:
使用拉格朗日乘数法:
易得:
如果还没忘记什么叫做特征值的话,那么这个式子就可以告诉我们:求的坐标系w其实就是方差S的特征向量。
到这里,我们已经找到了新的坐标系w。
🍻 那么开始分析
第一步 自然是求出处理过后X*{n\times m}协方差矩阵S*{n\times n};
第二步 求出协方差矩阵的特征值及对应的特征向量(特征值分解),将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P_{k\times n}(舍去了k-1 行到n 行的数据达到压缩的目的);
第三步Y*{k\times m}=P*{k\times n}X*{n\times m},Y*{k\times m}就是最终得到的降维的数据。
🍟奇异值呢?从开始到结束似乎都没有用到奇异值分解?
考虑一个问题,在维度很低的时候,我们能轻松求出矩阵的协方差以及其特征值和特征向量。那么当维度很多的时候呢?
可见协方差以及以及特征值分解时计算时间随着维度增加呈类似指数型的增长。
此时,SVD就派上用场了:
🍕 上式中的一
*
和两颗**
均表示V的共轭转置,一*
的V表示$n\\times n$的酉矩阵。上述表示是因为都是一*
的时候出BUG
,公式显示不了╮(╯▽╰)╭。
其中U是m\times m的酉矩阵;\Sigma是m\times n非负实数对角矩阵。当前k行的奇异值之和奇异值总体之和的比值接近1
约等号成立。
和方阵的特征值分解对比:
有一些SVD的实现算法可以不求先求出协方差矩阵 X^{T}X ,也能求出我们的右奇异矩阵V。那么有:
这样,我们就通过SVD(SVD对方阵一样适用)避免了暴力特征分解,得到了最终的降维数据Y_{m\times k}。
这里用的是右奇异矩阵V,对维度进行了压缩。
假设能不先求出协方差也能求出左奇异矩阵U,那么我们就可以左乘对样本进行压缩。那么怎么求呢?实际上只要把原始数据X*{m\times n}转置一下得到X’* {n\times m}作为输入就好了(0.0)。
🎭 PCA小结
1、PCA假设源信号间彼此非相关,认为主元之间彼此正交,样本呈高斯分布。
2、PCA认为数据内的信息存在方差之中,所以在寻求新的坐标系的时候实际上求的就是方差最大的方向,然后通过拉格朗日乘子法确定实际上新的坐标系其实就是方差(原始数据的方差)的特征向量。
3、特征值分解只能针对方阵,奇异值分解任意矩阵(包括方阵)都可以。实际上都是求协方差的特征向量作为新的坐标系,一个是P_{k\times n},一个是V。只不过奇异值的好处就是可以减少计算量直接求解矩阵V。
4、PCA适用于线性相关的维度,对于非线性的数据来说可以考虑用K-PCA也就是基于核函数的PCA。
水平有限,如有错误还请批评指正!
以上。(づ●─●)づ