对于PCA和MDS降维两种方法,在数据分析,还是建模中我用到了很多次,很多时候都是直接在sklearn中调函数,或者直接网上找现成的,现在终于到了分析它的处理原理(数学角度)。
PCA降维
PCA可谓是我用的第二多的,我知道的要晚一些,(我看好多人都是先知道PCA,然后知道MDS,我竟然是反的)这里只推导它的过程,矩阵的处理啥的。
公式推导
首先有个数据矩阵X,大小为m*n,一行为一个样本,也就是 x i x_i xi,共有n个样本,m表示数据的维度。
X X X
然后求X的平均值 X ‾ \overline{X} X后定义新的矩阵A
A = X − X ‾ A=X-\overline{X} A=X−X
定义矩阵B,B为A的转置矩阵*A
B = A T A B=A^{T}A B=ATA
然后求B矩阵的特征值,特征向量。将特征值进行大到小排序,如果你想降维到2维,那么只需要找到前两个特征值对应的特征向量,并将其组成2*m的矩阵P,然后即可求得降维后的矩阵D
D = X P D = XP D=XP
MDS降维
公式推导
第一步,需要定义一个距离函数,一般纯数据多采用欧氏距离,其他距离也可以具体数据具体分析。
数据矩阵为X,大小为m*n,一行为一个样本,也就是 x i x_i xi,共有n个样本,m表示数据的维度。
X X X
首先求得两两样本的距离矩阵D(主对角线元素为0)
D : d i j = d i s t ( x i , x j ) D: d_{ij}=dist(x_i,x_j) D:dij=dist(xi,xj)
然后分别定义3个dist函数
d i s t i ∗ : d i j = 1 m ∑ j = 1 m d i s t i j 2 dist_{i*}: d_{ij}=\frac{1}{m}\sum_{j=1}^{m}{dist_{ij}^2} disti∗:dij=m1∑j=1mdistij2
d i s t j ∗ : d i j = 1 m ∑ i = 1 m d i s t i j 2 dist_{j*}: d_{ij}=\frac{1}{m}\sum_{i=1}^{m}{dist_{ij}^2} distj∗:dij=m1∑i=1mdistij2
d i s t i j ∗ : d i j = 1 m ∑ i = 1 m ∑ j = 1 m d i s t i j 2 dist_{ij*}: d_{ij}=\frac{1}{m}\sum_{i=1}^{m}\sum_{j=1}^{m}{dist_{ij}^2} distij∗:dij=m1∑i=1m∑j=1mdistij2
然后根据以上3个dist求得矩阵B
B : b i j = − 1 2 ( d i s t i j 2 − d i s t i ∗ − d i s t j ∗ + d i s t i j ∗ ) B:b_{ij}=-\frac{1}{2}(dist_{ij}^2-dist_{i*}-dist_{j*}+dist_{ij*}) B:bij=−21(distij2−disti∗−distj∗+distij∗)
然后求B的特征值和特征向量,并对特征值排序并将其转换为矩阵,特征值在对角线,其他位置补充0,特征向量按特征值顺序也进行排序然后进行归一化处理(与PCA不同)。如果降维至2维,那么只需要从左上角开始取2*2的特征值,取前2个特征向量,分别定义为 B e B_e Be, B n B_n Bn那么最终降维结果为
Z = B e B n T Z=\sqrt{B_e}B_n^T Z=BeBnT