瞎搞系列-PCA算法
瞎搞系列-PCA算法
一、背景
一直在用,但是有时候忘记了,还有一个就是协方差矩阵的一个更新。
PCA是一种比较常用的降维技术,PCA的思想就是将n维的特征映射到k维上面去,k维全部为正交矩阵,则k维为主元。其实和现在的CNN差不多,只是没有这个反馈机制,但是即使有了PCA神经网络,,,我觉得超参也蛮多的,一个就是维数得一个个调,另外没法进行GPU加速,所以这也是大家没有用的原因吧。。。
二、步骤:
对于步骤很多地方都能百度的到:
1,分别求每列的平均值,然后对于所有的样例,都减去对应的均值。
2,求特征协方差矩阵。
3,求协方差的特征值和特征向量。
4,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。
5,将样本点投影到选取的特征向量上。假设样例数为m,特征数为n,减去均值后的样本矩阵为DataAdjust(m*n),协方差矩阵是n*n,选取的k个特征向量组成的矩阵为EigenVectors(n*k)。那么投影后的数据FinalData为:
转自知乎:https://www.zhihu.com/question/30094611
三、细说:
这里细说一下几个问题:
1,为何采用特征值与特征向量进行求解:
要理解PCA它的目的是要将数据映射到方差分布最大的那些维度上,主成分的意思是使得数据分布方差最大的那些维就是主成分,如何让PCA的方差最大呢?采用拉格朗日乘数法:
即可求得。
2,协方差矩阵的求法:
一般来说我们的协方差会分为随机变量的协方差
样本的协方差:是样本集的一个统计量,可作为联合分布总体参数的一个估计。在实际计算中通常是样本的协方差。
样本的协方差矩阵为: