一
高维数据向低维数据映射
我们此时有一个m行n列的样本矩阵X,此时的X样本矩阵代表有m个样本n个特征。通过前面的关于主成分的学习,此时假设我们已经求出针对X样本矩阵来说前k个主成分,每一个主成分对应的一个单位方向,用W矩阵来表示,此时的W矩阵为k行n列,代表前k个主成分,每一个主成分有n个元素。在上一小节提到主成分分析的本质就是从一组坐标系转移到另外一组新的坐标系的过程,而由于我们原来为n维坐标系,因此转换之后的坐标系也有n个维度,只不过对于转换后的坐标系来说,取出前k个更加重要的方向,因此W是k行n列的矩阵。
当然此时我们有m个样本,只需要将上面针对一个样本的计算过程重复m次即可,最终得到的就是所有样本从n维映射到k维。其实这个过程就是一个矩阵乘法的过程,只需要将X样本矩阵和Wk的转置进行矩阵乘法操作,最终得到的就是m行k列的Xk低维数据矩阵,这里需要使用Wk的转置,可以简单的通过矩阵乘法规则来判断。
至此就完成了将m个样本从高维n映射到低维k的操作。
低维数据映射回高维数据
在第一个部分介绍了如何将高维的样本数据映射到低维的样本数据。选定了k个主成分,最终得到的低维样本矩阵Xk是k行n列。而对于Wk来说,我们依然可以反过来将低维数据Xk恢复成原来的n维数据,恢复的过程其实也很简单。
此时降维后的数据矩阵Xk中每一行有k个元素,将这k个元素与Wk的每一列去做乘法。我们将Xk中的每一行,映射到Wk中每一列对应的方向中,一共有n列,最终又会恢复成原来的n维数据。当然恢复后的数据已经不是原来的结果了,这是因为我们在降维的过程中,其实会丢失一些信息,那么在恢复的时候,这些丢失的信息是恢复不会来的。这个反向操作的本身从数学的角度看是成立的,这个过程其实就是Xk乘上Wk,此时的Xk是m行k列的矩阵,而Wk是k行n列的矩阵,他们相乘的结果为m行n列的Xm,当然此时的Xm和原来的样本矩阵X已经不一样了,这里命名Xm仅仅是为了和原来的X样本矩阵进行区分。
三
编程实现
那么此时的Xm和X区别是怎么样的呢?下面就通过实际的编程来进行试验。
接下来就使用jupyter来调用封装好的pca类:
通过最终的绘制结果可以看出,数据经过降维再恢复之后,其实就回到了所有的数据点在主成分这个轴上相应的位置上。此时所有红色的点在一条直线上,但是每一个点是被一个二维特征所表示的,这些点在二维的平面上码成了一条直线,完全就可以把他放在一维的维度上,也就是就放在一根轴上,即用一个数值来表示每一个点,这就是使用pca降维基本的原理。
通过最后的图示可以看出,inverse将低维数据恢复到高维数据和原来的样本维度是不一样的,也就是说在我们在降维的过程中肯定失去了一些信息,当然失去的这些信息不能被恢复回来,恢复回来的数据只不过在高维的空间里表达这些低维的样本而已。
pca所做的事情其实就是寻找另外的一个坐标系,这个坐标系中每一个轴依次可以表达原来样本他们的重要程度,也就是主成分,我们取出前k个最重要的主成分,然后就可以将所有的样本映射到这k个轴上,获得一个低维度的数据信息。
本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!