PCA降维算法
——最大方差和最小协方差联合解释(线性代数看PCA)机器学习
注:根据网上资料整理而得,欢迎讨论函数
机器学习算法的复杂度和数据的维数有着密切关系,甚至与维数呈指数级关联。所以咱们必须对数据进行降维。学习
降维固然意味着信息的丢失,不过鉴于实际数据自己经常存在的相关性,咱们能够想办法在降维的同时将信息的损失尽可能下降。优化
PCA是一种具备严格数学基础而且已被普遍采用的降维方法。spa
协方差矩阵及优化目标数学
若是咱们必须使用一维来表示这些数据,又但愿尽可能保留原始的信息,你要如何选择?基础
经过上一节对基变换的讨论咱们知道,这个问题其实是要在二维平面中选择一个方向,将全部数据都投影到这个方向所在直线上,用投影值表示原始记录。这是一个实际的二维降到一维的问题。方法
那么如何选择这个方向(或者说基)才能尽可能保留最多的原始信息呢?一种直观的见解是:但愿投影后的投影值尽量分散。数据
方差
上文说到,咱们但愿投影后投影值尽量分散,而这种分散程度,能够用数学上的方差来表述。被形式化表述为:寻找一个一维基,使得全部数据变换为这个基上的坐标表示后,方差值最大,(即:投影以后的点比较分散,没有相关性。以达到一个很好的降维效果)
协方差
当协方差为0时,表示两个字段彻底独立。为了让协方差为0,咱们选择第二个基时只能在与第一个基正交的方向上选择。所以最终选择的两个方向必定是正交的。
至此,咱们获得了降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽量大(在正交的约束下,取最大的K个方差)。即:投影以后的点比较分散,没有相关性。以达到一个很好的降维效果)
协方差矩阵
在数学上研究计算方案。
设咱们有m个n维数据记录,将其按列排成n乘m的矩阵X,设C=1/m*XXT,则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差。
协方差矩阵对角化
根据上述推导,咱们发现要达到优化目前,等价于将协方差矩阵对角化:即除对角线外的其它元素化为0,而且在对角线上将元素按大小从上到下排列,这样咱们就达到了优化目的。这样说可能还不是很明晰,咱们进一步看下原矩阵与基变换后矩阵协方差矩阵的关系:
设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X对P作基变换后的数据。设Y的协方差矩阵为D,咱们推导一下D与C的关系:
D = 1/m*YYT= 1/m*(PX)(PX)T=1/m*PXXTPT =P(1/m*XXT)PT =PCPT
如今事情很明白了!咱们要找的P不是别的,而是能让原始协方差矩阵对角化的P。换句话说,优化目标变成了寻找一个矩阵P,知足PCPT是一个对角矩阵,而且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并知足上述优化条件。
至此,咱们离“发明”PCA还有仅一步之遥!
如今全部焦点都聚焦在了协方差矩阵对角化问题上,有时,咱们真应该感谢数学家的先行,由于矩阵对角化在线性代数领域已经属于被玩烂了的东西,因此这在数学上根本不是问题。
由上文知道,协方差矩阵C是一个是对称矩阵,在线性代数上,实对称矩阵有一系列很是好的性质:
1)实对称矩阵不一样特征值对应的特征向量必然正交。
2)设特征向量λ重数为r,则必然存在r个线性无关的特征向量对应于λ,所以能够将这r个特征向量单位正交化。
由上面两条可知,一个n行n列的实对称矩阵必定能够找到n个单位正交特征向量,设这n个特征向量为e1,e2,⋯,en,咱们将其按列组成矩阵:
E=(e1,e2,⋯en)
则对协方差矩阵C有以下结论:
ETCE=Λ;
其中Λ为对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复)。
到这里,咱们发现咱们已经找到了须要的矩阵P:P=ET
P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。若是设P按照Λ中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就获得了咱们须要的降维后的数据矩阵Y。
进一步讨论
PCA本质上是将方差最大的方向做为主要特征,而且在各个正交方向上将数据“离相关”,也就是让它们在不一样正交方向上没有相关性。
所以,PCA也存在一些限制,例如它能够很好的解除线性相关,可是对于高阶相关性就没有办法了,对于存在高阶相关性的数据,能够考虑Kernel PCA,经过Kernel函数将非线性相关转为线性相关,关于这点就不展开讨论了。
另外,PCA假设数据各主特征是分布在正交方向上,若是在非正交方向上存在几个方差较大的方向,PCA的效果就大打折扣了。
PCA是无监督学习的方式。