PCA的作用
有时候维度太多计算太麻烦,通过降维来达到计算方便的目的。如图
如果我们的目标是聚类的话,在平面上的四个点,如果将这四个点投影到红线上,成了一维的点,但依旧能完成聚类,因为他们的分布状况被影响地不大。
PCA的过程
1.我们首先获得二维平面上的点的数据,写成如下的矩阵
(1 1 2 4 2 )
1 3 3 4 4
2.然后计算出上下排的均值分别为2和3,然后为了方便后面的方差的计算将上下每一个数分别减去自己的均值得到
(-1 -1 0 2 0)
-2 0 0 1 1
3.然后我们要求协方差矩阵
首先协方差矩阵是什么?
我们都知道方差,方差表示的是一组数据的离散程度,也就是说你的数据中有很多0到10000一定比另一组有很多0到1的数据方差来的大。
那么协方差表示的是什么呢?协方差表示的是维度之间的(线性)相关性。也就是说平面上的x轴和y轴的协方差是0因为他们是不相关的。但两个y轴的协方差就很高。
协方差的公式是
这里给数学和我一样不好的朋友们一个链接,就是一个小例题,3分钟内就能看完,却比起网上一堆不明所以的公式有用多了:协方差小例题
我们得出我们的协方差矩阵是
C=(1.2 0.8)
0.8 1.2
所以这步什么意思呢?将x轴和y轴相乘得出这些点在这两个维度上的相关性。如果还是不是很明白的话,我觉得这一步要和下一步结合起来看,他们其实是两步却是为了达到一个目的。
4.然后求出协方差矩阵的特征值和特征矩阵
先介绍一下特征值和特征矩阵的意义,链接在后面,看下正文就好,后面例子就不用看了,:知乎:特征值特征矩阵的意义
重点就是这句话:特征值越大,说明矩阵在对应的特征向量上的方差越大,功率越大,信息量越多。
那么协方差矩阵的特征值就是指,特征值越大,那么协方差在对应的特征向量上的方差就越大。我们因为需要将点分开,所以我们是希望方差尽量地大。所以我们想保证降维后方差尽量大,就要特征值尽量地大。
特征值怎么计算,其实我们有工具啦特征值特征向量计算工具
然后我们可以得到我们的特征值为
(2)
0.4
(0.7071 0.7071)
0.7071 -0.7071
这步什么意思呢?我来举个例子吧
我们先忽略绿点,只看蓝点,我们可以看到蓝点都集中在x轴附近。那么我们根据这些点算出协方差矩阵后,再计算出特征值和特征矩阵后。我们可以看到我们的特征向量一定是近乎(1 0)的矩阵,
0 1
然后特征值是(一个极大的数),根据这个过程我们决定哪个(如果降维降到不止一维就是哪些)维度上的分布性比较好。
一个极小的数
反过来我们只看绿点的话,我们得到的特征值可能就相差不是很大了,我们就要谨慎考虑是否要降维
5.然后我们根据特征值进行排序,选择分布性最好的几个维度,这里我们就选择特征值最大的那个也就是2,以及它对应的特征向量(0.7071 0.7071)。这就是我们最新的基向量了
6.我们最后通过内积求出在基向量上的投影作为这个维度上的值,内积的相关知识不难,在我参考的资料第一份资料中有很详细的介绍。其实那份资料很详细主要就是里面矩阵的表示很不清楚
然后最后提一提神经网络中的运用吧,在神经网络中是通过Oja来实现的,不过Oja是只降到一维的情况,降到多维的情况是Sanger算法,我查了下网上都没有相关资料。我这里稍微提一提
输入是x1,x2,x2 输出是y1,y2,y3
权重开始是随机的,然后学习算法是
在一个连接上的新权重 = 这个连接上的旧权重 + 步长* 这个输出神经元的输出*(输入神经元的输入 - 到现在为止所有神经元输出乘以各自权重的和(如果现在是计算第二个输出神经元的第三条连接那么这个变量就是 第一个神经元的输出*第一个神经元对应的第三条连接的权重+第二个神经元的输出*第二个神经元对应的第三条连接的权重))
参考资料参考资料一
参考资料二