理论
在PCA中,我们要做的是找到一个方向向量,当我们把所有的数据都投射到该向量上时,我们希望投射平均均方误差尽可能小。而投射误差是从特征向量向该方向向量作垂线的长度。
问题描述:
要将维数据降至维,目标是找到向量使得总的投射误差最小。
算法流程:
PCA减少维到维
1、均值归一化。计算出所有特征的均值,然后令。如果特征在不同的数量级上,我们还需要除以方差
2、计算协方差矩阵
3、计算协方差矩阵的特征向量
[U, S, V] = svd()
对于一个维度的矩阵,上式中的是一个具有与数据之间最小投射误差的方向向量构成的矩阵。维降至维,我们只需从中选择前个向量,获得一个的矩阵,新的特征向量
其中是维的,因此结果是维的。
其中的S是一个n×n的矩阵,只有对角线上有值,而其它单元都是0,我们可以使用这个矩阵来计算平均均方误差与训练集方差的比例:
也就是:
在压缩过数据后,我们可以采用如下方法来近似地获得原有的特征:
Python实现
假设我门得到2维度数据
假设样本数为,特征数为,减减去均值后的样本矩阵为, 选取的个特征向量组成的矩阵为,那么投影后的数据