![]() PCA简单的说,它是一种通用的降维工具。在我们处理高维数据的时候,
了能降低后续计算的复杂度,在“预处理”阶段通常要先对原始数据进行降维,而PCA就是干这个事的 本质上讲,PCA就是将高维的数据通过线性变换投影到低维空间上去,但这个投影可不是随便投投, 遵循一个指导思想,那就是:找出最能够代表原始数据的投影方法。这里怎么理解这个思想呢?“最 表原始数据”希望降维后的数据不能失真,也就是说,被PCA降掉的那些维度只能是那些噪声或是冗 数据。这里的噪声和冗余我认为可以这样认识: 噪声:我们常说“噪音污染”,意思就是“噪声”干扰我们想听到的真正声音。同样,假设样本中某 主要的维度A,它能代表原始数据,是“我们真正想听到的东西”,它本身含有的“能量”(即该维度 方差,为啥?别急,后文该解释的时候就有啦~)本来应该是很大的,但由于它与其他维度有那 些千丝万缕的相关性,受到这些个相关维度的干扰,它的能量被削弱了,我们就希望通过PCA 理后,使维度A与其他维度的相关性尽可能减弱,进而恢复维度A应有的能量,让我们“听的更清 楚”! 冗余:冗余也就是多余的意思,就是有它没它都一样,放着就是占地方。同样,假如样本中有 个维度,在所有的样本上变化不明显(极端情况:在所有的样本中该维度都等于同一个数),也 说该维度上的方差接近于零,那么显然它对区分不同的样本丝毫起不到任何作用,这个维度即 冗余的,有它没它一个样,所以PCA应该去掉这些维度。 ,PCA的目的就是“降噪”和“去冗余”。“降噪”的目的就是使保留下来的维度间的相关性尽可
能小,而“去冗余”的目的就是使保留下来的维度含有的“能量”即方差尽可能大。那首先的首先,我们得需 要知道各维度间的相关性以及个维度上的方差啊!那有什么数据结构能同时表现不同维度间的相关性以 及各个维度上的方差呢?自然是非协方差矩阵莫属。协方差矩阵度量的是维度与维度之间的关系,而非样本与样本之间。协方差矩阵的主对角线上的元素是各个维度上的 方差(即能量),其他元素是两两维度间的协方差(即相关性)。我们要的东西协方差矩阵都有了,先来 看“降噪”,让保留下的不同维度间的相关性尽可能小,也就是说让协方差矩阵中非对角线元素都基本为 零。达到这个目的的方式自然不用说,线代中奖的很明确——矩阵对角化。而对角化后得到的矩阵,其 对角线上是协方差矩阵的特征值,它还有两个身份:首先,它还是各个维度上的新方差;其次,它是各 个维度本身应该拥有的能量(能量的概念伴随特征值而来)。这也就是我们为何在前面称“方差”为“能量”的 原因。也许第二点可能存在疑问,但我们应该注意到这个事实,通过对角化后,剩余维度间的相关性已 经减到最弱,已经不会再受“噪声”的影响了,故此时拥有的能量应该比先前大了。看完了“降噪”,我们 的“去冗余”还没完呢。对角化后的协方差矩阵,对角线上较小的新方差对应的就是那些该去掉的维度。 所以我们只取那些含有较大能量(特征值)的维度,其余的就舍掉即可。PCA的本质其实就是对角化协方 差矩阵。 我也是刚学的,代码如下
for i=1:29
Xnor(i,:)=X(i,:)./sum(X(i,:)); end [p,t,latent]=princomp(Xnor,'econ'); latent=latent./sum(latent)*100; latent(1:10) 第一步导入矩阵29 X 14 前15对照组求特征值 plot(t(1:15,1),t(1:15,2),'o') hold on plot(t(16:29,1),t(16:29,2),'*') xlabel('PC1(36.3%)') ylabel('PC2(26.9%)') http://blog.sciencenet.cn/blog-265205-544681.html 此文来自科学网陈波博客,转载请注明出处。 上一篇:用Python进行生物信息学分析,Blast后结果的分析。 下一篇:网传浙大博士生月补助要涨到3500元(搜集相关资料报道应该真的) |
|