一个对角阵\(A\),用它作变换时,天然坐标系的坐标轴不会发生旋转变化,而只会发生伸缩,且伸缩的比例就是\(A\)中对角线对应的数值大小。算法
对于普通矩阵\(A\)来讲,是否是也能够找到这样的向量,使得经\(A\)变换后,不改变方向而只伸缩?答案是能够的,这种向量就是\(A\)的特征向量,而对应的伸缩比例就是对应的特征值。学习
特征值会有复数是为何?spa
首先要知道,虚数单位\(i\)对应的是旋转\(90^o\),那么,若是特征值是复数,则对应的特征向量经矩阵\(A\)变换后将会旋转\(90^o\),且伸缩率是复数的模。排序
一个方阵\(A\),它的线性无关的特征向量个数不会超过其维度,不一样特征值对应的特征向量必定是线性无关的。而同一特征值对应的特征向量也不必定相关。ci
可是,若是重复特征值重复计数,特征值的个数必定是\(n\),对应的也有\(n\)个特征向量。那么矩阵就能够分解:数据分析
\(Ax_i=\lambda x_i\)it
\(AX=\Lambda X\)class
其中,\(\Lambda\)是将\(A\)的特征值做为对角元素的对角阵,\(X\)是与特征值位置对应的特征向量(列)排成的矩阵。变量
\(A=X^{-1}\Lambda X\)lambda
从而,能够将\(A\)分解为上面的形式,这样,在计算,分析性质等会颇有帮助。
一个应用就是PCA时,对协方差矩阵\(A^TA\)作特征分解,以提取主成分。
上面的特征值分解只针对于方阵,而对于通常矩阵,可不能够作相似分解呢?
这就是奇异值分解。
什么是奇异值:A的奇异值是\(A^TA\)的特征值的平方根。由于矩阵是变换,经非方阵\(A\)变换后也有向量其方向不变,只伸缩,这个伸缩率就是奇异值,对应的向量为\(A^TA\)的特征向量。
酉矩阵:\(A^T=A^{-1}\)的矩阵。
什么是奇异值分解?
具体来讲:对于非方阵\(A\),它的奇异值分解形式是:
\(A=U\sum V^T\)
其中,\(A:m*n;U:m*m ; \sum : m*n; V:n*n\),且\(、U、V\)都是酉矩阵。
\(\sum\)矩阵只有对角线元素不为0,称为奇异值。
而且:
\(V\)是矩阵\(A^TA\) 的标准化特征向量构成的矩阵,称为右奇异向量矩阵。右奇异向量实现列数压缩。
\(U\)是矩阵\(A^TA\)的标准化特征向量构成的矩阵,称为左奇异向量矩阵。左奇异向量实现列数压缩。
\(\sum\)矩阵对角线的奇异值就是矩阵\(A^TA\)的特征值的平方根。
下面推导一下为何是这样:
奇异值分解,将\(m*n\)的矩阵\(A\),分解为:
$A=U\sum V^T $
则:\(A^T=V\sum^T U^T => A^TA=V\sum^TU^TU\sum V^T=V\sum^2V^T\)
上面用到了\(U^TU=I\)。
即获得了:
$ A^TA=V\sum^TU^TU\sum V^T=V\sum^2V^T$
于是很显然,方阵\(A^TA\)的标准化特征向量排列成的矩阵就是\(V\),而特征值开根号就是奇异值。
因此,从这里也可知,奇异值的个数就是\(A^TA\)的特征值个数。
为何作主成分分析?
作数据分析处理,针对每一个样本都收集了大量特征,设样本数为\(m\),特征数为\(n\),则咱们获得的数据矩阵为:
\(A=[m*n]\);每行为一个样本,每列为一个特征。
大量的数据会致使处理计算复杂,而且多个特征相互之间可能存在多重相关关系,致使把全部数据放在一块儿处理过度拟合了某些指标;而盲目的删除一些特征又可能致使关键信息的损失。
如何减小特征数,又保留住绝大部分信息呢?+正则化项能够自动学习这个过程。PCA主成分分析能够实现这个目的,其本质是数据降维。
怎么作主成分分析?
1.找主成分方向:正交的
将列数\(n\)降维到\(n'\),怎么作呢?若是有一个维度它的变化不大,那么包含的信息就不多,天然能够删除,但在现有数据下,很难看出哪一个维度变化不大,数据是杂乱的。所以将其变换到以特征向量为基的坐标系下,\(n\)维矩阵天然能够变换到\(n\)维特征向量坐标系,这样,全部\(n\)个特征是相互正交的。变换到新的坐标系后,因为特征值的大小表征了离散程度,哪一个特征变化小就能够经过特征值大小看出来。
根据最大方差理论,变化大的维度含有的信息远大于变化小的。
求PCA方向就是\(A^TA\)的特征值方向。
为何要对\(A^TA\)求特征向量呢(为何是这个方向)?
这是由于,本来咱们想将列向量变换到正交的特征向量方向,即寻找新的坐标系,将每条数据在这个新的坐标系下标出。这个方向实际上就是\(A^TA\)的特征向量的方向。由于,根据第5部分,\(A=U\sum V^T=>AV=U\sum\),能够看到,\(V\)的各个向量的方向就是相互正交方向,这个方向使得数据\(A\)的列向量变换后依然正交。而如何将列向量变换到正交方向上去呢?投影。这个式子也给了咱们答案,即相乘,相似于内积,(一个向量到另外一个向量的投影)。所以,这样就将全部列向量(特征)映射到了相互正交的空间,假若有的变量变化不大,此时能够根据特征值大小看出,即特征值小则方差小,信息量小。
另外能够发现,中心化后,\(A^TA\)就是协方差矩阵,这是为何许多教材上直接说对协方差矩阵求特征向量,特征向量的方向就是主成分方向。
那么,肯定了主成分方向,如何肯定使用哪几个主成分呢?
特征值的意义就是特征向量方向上的伸缩率,所以,特征值的大小衡量了该主成分方向上的离散程度,特征值越大,则越离散,方差越大,信息越多。
所以能够定义贡献率:该特征值/特征值之和。
因此,只要选取特征值最大的几个主成分方向以及对应的主成分向量(主成分特征)就能够了。这是为何教材中按特征值大小排序。
总结一下主成分步骤:
要将列特征变换到另外一个空间,使得特征之间是相互正交的,即变换后的\(n\)维特征正好处于新坐标系的轴上。
上面的过程很相似于奇异值分解,实际上,学习库中的PCA不会真的对\(A^TA\)求特征向量,这太费时了,由于求特征向量实际上就要首先求特征多项式,大于三阶不存在通用算法求解。实际上,scikit-learn作奇异值分解的途中,有算法能够直接获得右边的\(V\),从而肯定了方向。
PCA的缺点是解释性不强,即变换后的特征到底表明了什么是不可以解释的,但这不影响PCA颇有效,对我来讲更重要的是帮助理解特征值分解和奇异值分解。