都知道PCA能够作降维,那它为何能够降维,到底是怎么降维的呢?html
1. 为何咱们要降维?学习
咱们的样本数据好好的,为何要去作降维,第一个要想清楚这个问题。spa
总之不少缘由致使咱们要去作降维,可是有两个主要的因素,就是去除数据里的冗余和噪声。code
2. PCA是怎么去作降维的,怎么去除冗余和噪声的?htm
PCA有一个假设,数据中越是有区分度的维度,他的方差越大,例如咱们的信号自己。越是没有区分度的维度,方差越小能量越小,例如噪声;blog
另外,若是两个维度相关性很高,那么其中一个维度就是冗余的,对于学习分类器没有很大的帮助,例如一个大学生的成绩里面,他的线性代数的成绩,和他的矩阵分析的成绩这两个相关性就很高,分类器只须要其中的一个来判断这个学生是工科生仍是文科生。it
综合以上两点,咱们降维以后的数据必定要每一个维度的方差大,同时维度之间的相关性小。方法
如何描述方差和相关性,有一个东西能够同时描述他们两——协方差矩阵!im
协方差矩阵是一个方阵,i,j列表示样本的第 i 维和第 j 维之间的相关性 ( i = j 时描述的是第 i 维的方差)。总结
所以,理想的协方差矩阵的对角线应该是很大的值,而非对角线的位置都接近于0,这样才能保证方差大,相关性小呀!
若是当前样本的协方差矩阵已是对角矩阵了,那咱们就不用作PCA降维了,由于他们的特性已经很好了!很不幸,咱们的数据一般都不是那么好,协方差矩阵不是理想的样子,极可能相关性很大。那么很明确,咱们要作的就是使得降维以后的数据协方差矩阵是对角矩阵。
那么就要作矩阵对角化呗,什么方法能够获得对角矩阵,这个就是特征值分解,
A = P * B * P(T) (1)
B就是对角化的矩阵,A是原协方差矩阵,而咱们知道B对角线上都是特征值,P里面都是对应的特征向量。若是咱们降维以后的协方差矩阵张成B这个样就行了!
说到这里,协方差矩阵的公式还没提呢。
C = S(T) * S / (m - 1); (2)
C是协方差矩阵, S是m * d的样本数据矩阵,表明咱们有m个样本,每一个样本的维度是d。
那么当前有
A = S(T) * S / (m - 1);(3)
咱们想要的是
B = S’(T) * S’ / (m - 1);(4)
S’就是咱们降维以后的样本数据。 咱们把公式(1) A = P * B * P(T),变一个样子就是 P(T) * A * P = B; 结合式子(3),因而乎
B = P(T) * A * P = P(T) * S(T) * S * P / (m - 1) = (SP)(T) * (SP) / (m - 1);再结合式子(4)
SP不就是咱们想要的降维以后的数据S'吗?这里,若是把P中的特征向量去掉几个特征值低的,那么不只选出了方差大的数据,还去除了冗余。所以,PCA就达到了目的了。
3. 总结
因此降维的公式也出来了, S’ = S * P,P是特征值大的维度对应的特征向量。
这是今天看完PCA以后的一点小总结,关于如何作特征值分解,今天也看了许久,感受要补充的矩阵只是仍是颇有一些的。
贴一下http://mathfaculty.fullerton.edu/mathews/n2003/QRMethodMod.html 提到的用QR method来作特征值分解的伪代码。
QR Algorithm. The pseudocode for the QR method is:
1. i = 0
2.
3. repeat
4. Factor
5.
6. i = i+1
7. until convergence
迭代的方式用QR分解来求特征值。这都是题外话了!
总之,咱们须要理解PCA为何能用协方差矩阵作特征值分解来求解,为何这样作降维的结果就是好的结果,认真理解了才能更有效地使用它 。