机器学习(1) - PCA的理解

总结一下PCA的东西

[1] 参考资料

(1) http://setosa.io/ev/principal-component-analysis/, 直观的理解

(2) A Tutorial on Principal Component Analysis 论文


[2] PAC overview

首先整理一下思路,PCA 是 Principal Component Analysis 主要的目的是给出一堆数据,然后找出这些数据的 Principal Component。 

Principal Component是数据在坐标系里面一些方向,方向就是一些单位的vector. 

PCA就是要在原来的坐标系里面找到一些单位方向向量,找到以后,把这些单位方向向量组成新的坐标系,然后把原来的数据投影到新的坐标系上去。这里的数据是mxn, m代表m个特征或者measurement, n代表数据样本的个数,相对于这里的一个样本是一个向量,竖向排列的。和通常编程时数据横向排列不一样。

#####################################################################################

数学知识:

1): 向量的点积-标量结果,a * b = |a| * |b| * cosθ ,意义是一个向量a先往b的方向上投影得到长度|a| cosθ,然后在和 |b| 向乘。点积的计算公式(a1,a2) * (b1,b2) = (a1*b1+a2*b2), 如果向量都是单位的,那么可以理解为点积越大,两个向量越相似,或者两者越相关?感觉数据分析的所有操作都是和点积相关,交叉熵,回归,逻辑回归,神经网络,点积是基本操作。

2): 一个矩阵乘以一个向量,可以认为矩阵的各个行向量,是新的坐标轴,那么矩阵乘以向量相当于是把向量投影到各个坐标轴上(这里认为坐标轴向量都是单位向量),乘法的结果是原始向量,在新坐标系下的坐标。

(这个地方需要在整理一下矩阵乘以向量的含义,一种理解是矩阵的列向量是新坐标的基,然后乘以向量,是这些基的线性组合,得到向量在新坐标系下的坐标,但是另外的理解矩阵的行向量依次与向量做点乘,而点乘又代表了投影,所以结果的含义是行向量是新坐标系的坐标方向,而乘法是向量在新的行向量坐标系下的坐标值)

#####################################################################################

[3] 对于参考资料1的理解


1:上图的两个小线段代表了找到的主成分方向,左边图的小线段代表的是在原坐标系下找到的主成分方向,而右边的话已经是变换了坐标系的概念。

2:上边的两幅图像;左边是原始图片,右边是PCA以后的结果图,坐标轴从(x,y)变到了(pc1,pc2),点的位置或者说点的坐标也发生了变化

3:下边的两幅图像;左边是原始点在原始坐标轴上的坐标值分布情况情况,或者说原始点对于原始坐标轴的投影,右边是PCA以后,新点在新坐标系下的投影。 PC1上是所有坐标轴可能选项中具有方差最大的情况。

通常情况下,可以将PC1和PC2中的PC2扔掉,因为PC1上点的方差大,认为数据之间差别比较大,能够区分开。而PC2上点的方差比较小,所以可以舍去PC2的坐标值,只用PC1的坐标值来代表新的点。

这个参考文献也给出了3个和多个特征或者观测量的情况下,用PCA降维可视化的结果,可以用一个Principle Component或者两个Principle Component来对数据进行可视化。


[4] 对于参考资料2的理解

4.1 PCA的实际步骤直观解释

1: Select a normalized direction in m-dimensional space along which the variance in X is maximized. Save this vector as P1.

2: Find another direction along which variance is maximized, however, because of the orthogonality condition, restrict the search to all directions orthogonal to all previous selected directions. Save this vector as Pi.

3: Repeat this procedure until m vectors are selected.

4.2 PCA推导的背景知识


4.2.1 Naive Basis 基础坐标系


这里的b1,b2,bm都是行向量,代表的是基础坐标系的各个向量,那么关键的话来了,所有的数据点都是在这个基础坐标系下进行recorded或者是产生的。而这些点的数据,可以看作是这些行向量的线性组合。这时候组合应该是以一个行向量的形式来vector*B,才能达到效果.


4.2.2 Change Basis 改变基础坐标系

PX = Y, 

X是数据,m x n, 按例排列,比如m=6, 6个特征,n = 1000, 1000个样本。 

P是新坐标系坐标向量集合,值得注意是这些坐标向量(主成份)又是以基础坐标系为参考,的形状是 m x m, P的行向量是新的坐标轴向量,

Y是对于X中的各个例,往P这个坐标系下投影所得到的新数据集合。形状还是( m x n )


4.2.3 PCA目的或者出发点


(1) 左边图的意义是说: 信号的方差会比噪声的方差大;方差大的方向是我们感兴趣的方向;通过最大化方差可以找到感兴趣的方向;从而找出对于原始坐标系的有效变换方法。--- 这条貌似对于为什么PCA可以舍去一些维度有关。

(2)右边图的意义是说:在测量时很多特征是多余的,或者说特征之间是有相关性的。-- 这条导出PCA的计算逻辑

那么上面从特征的多余性和减小特征之间相关性出发,引出PCA的计算逻辑

对于数据矩阵X, 首先是用计算出数据特征之间的协方差矩阵,X这里是按列排列的,计算出各个特征之间的相关性。

得到的Xc是一个对称矩阵,对角线上的值代表的是各个特征的方差,非对角线上的值代表的是各个特征之间的相关强度,从减小冗余的角度出发,我们希望手上的数据的特征之间是不相关的,意思是说非对角线上的元素都为0。

如果从数据变换的角度出发,我们希望,PX=Y对X进行变换以后,然后Yc=YYT 尽可能的是一个对角矩阵。

对于 Yc=YYT 对这个式子带入Y=PX  可以得到 Yc = PCxPT

那么换一个思路,尝试着直接对Xc进行对角化,由于Xc是一个对角矩阵,

#####################################################################################

数学知识:

(1) 对称矩阵,先考虑在满秩的情况下,对称矩阵可以由自己的特征向量构成的矩阵给对角化,证明的参考论文的附录4,单不满秩的情况下,那么可以对于矩阵E填充一些orthonomal vector, 让其能对角化,不会影响结果,按照论文的原话是: These addtional vectors do not affect the final solution because the variances associated with these directions are zero.

即对于矩阵A,如果A为对称矩阵,那么有A = EDET,这里E为A的特征向量组成的矩阵,按列排布

#####################################################################################

这PCA这里,如果我们取这里取 P= E ,相当于这里的P按行排布,(注意上面的E又按列排布) 有点绕。首先之所以能这么取是因为 EE-1  或者说  P-1  = P-T


4.2.4 PCA与SVD的关系

PCA的意义很明确,就是去除数据的冗余特征; 

SVD的意义是认为矩阵乘法是旋转,缩放,投影,把这几个部分分解; 另外的理解是有点类似傅立叶变换,分解成很多基的叉积;

我感觉从意义上理解好像PCA和SVD没有直间关系,之所以两者强相关是 因为在计算矩阵A的SVD的时候,是计算了两次特征向量,第一次是矩阵AAT 第二次是计算矩阵  ATA的特征值,所以对于A=UΣVT

 计算的时候,可以利用计算出来的U和V的结果来计算PCA。这里的数据矩阵A,数据是按行排列。 


[5] 实际计算方法 - 如论文附录所示,两种方法,直接通过定义来计算或者通过SVD分解来做

(1)方法1-通过特征值的协方差矩阵


这里的数据是按列排布的,首先是去均值,然后计算协方差矩阵,找出协方差矩阵的特征和特征向量,把特征向量排序,然后对数据进行投影变换。

(2)方法2-通过SVD分解


这里的数据也是按例排布的,但是在实际进行SVD计算之前需要转换成按行排布


[6] 感觉另外一些写得比较好的链接

https://www.cnblogs.com/pinard/p/6251584.html




猜你喜欢

转载自blog.csdn.net/hnshahao/article/details/80937284
今日推荐