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