pca降维的理论知识( 五 )


在上图中, 也可以把降维的过程看作找到一个或者多个向量u1, u2, ...., un, 使得这些向量构成一个新的向量空间(需要学习矩阵分析哦), 然后把需要降维的样本映射到这个新的样本空间上 。
对于2D -> 1D 的降维过程, 可以理解为找到一个向量u1, u1表示了一个方向, 然后将所有的样本映射到这个方向上, 其实, 一个向量也可以表示一个样本空间 。
对于3D -> 2D 的降维过程, 可以理解为找到两个向量u1, u2, (u1, u2) 这两个向量定义了一个新的特征空间, 然后将原样本空间的样本映射到新的样本空间 。
对于n-D -> k-D 的降维过程, 可以理解为找到 k 个向量 u1, u2, ..., uk, 这k个向量定义了新的向量空间, 然后进行样本映射 。
3.2 Cost
既然样本映射存在误差, 就需要计算每次映射的误差大小 。采用以下公式计算误差大小:

pca降维的理论知识

文章插图
X-表示的是样本映射以后的新的坐标, 这个坐标如果位置如果用当前的样本空间表示, 维度和 样本X是一致的 。
要特别注意, PCA降维和 是不一样的, 虽然看上去很一致, 但是 的cost 的计算是样本上线垂直的到拟合线的距离, 而PCA的cost是样本点到拟合线的垂直距离 。差别如下图所示:
pca降维的理论知识

文章插图
3.3 PCA 计算过程
(A)
首先要对训练样本的特征进行归一化, 特别强调的是, 归一化操作只能在训练样本中进行, 不能才CV集合或者测试集合中进行, 也就是说归一化操作计算的各个参数只能由训练样本得到, 然后测试样本根据这里得到的参数进行归一化, 而不能直接和训练样本放在一起进行归一化 。
另外, 在训练PCA降维矩阵的过程中,也不能使用CV样本或者测试样本, 这样做是不对的 。有很多人在使用PCA训练降维矩阵的时候, 直接使用所有的样本进行训练, 这样实际上相当于作弊的, 这样的话降维矩阵是在包含训练样本和测试样本以及CV样本的情况下训练得到的, 在进行测试的时候, 测试样本会存在很大的优越性, 因为它已经知道了要降维到的空间情况 。
特征归一化直接给出代码参考:
[html] view plain copy
[,mu,sigma]=(X) % %(X) % %is1.n %.mu=mean(X); =(@minus,X,mu);sigma=std(); =(@,,sigma);%============================================================end
注意: 这里的X是一个m * n 的矩阵, 有 m 个样本, 每个样本包含 n 个特征, 每一行表示一个样本 。是最终得到的特征, 首先计算了所有训练样本每个特征的均值, 然后减去均值, 然后除以标准差 。
(B) 计算降维矩阵
B1. 首先计算样本特征的协方差矩阵
如下图所示, 如果是每个样本单独计算, 则采用图中横线上的公式, 如果是采用矩阵化的计算, 则采用横线下的公式 。
pca降维的理论知识

文章插图
B2. 计算协方差矩阵的特征值和特征向量
采用奇异值分解的算法计算协方差矩阵的特征值和特征向量, 奇异值分解是个比较复杂的概念, 如果有兴趣可以查看, 也可以直接使用或者已经提供的奇异值分解的接口 。
pca降维的理论知识

文章插图
在上图中, U 则是计算得到的协方差矩阵的所有特征向量, 每一列都是一个特征向量, 并且特征向量是根据特征大小由大到小进行排序的, U 的维度为 n * n。U 也被称为降维矩阵 。利用U 可以将样本进行降维 。默认的U 是包含协方差矩阵的所有特征向量, 如果想要将样本降维到 k 维, 那么就可以选取 U 的前 k 列, Uk 则可以用来对样本降维到 k 维 。这样 Uk 的维度为 n * k