转载:https://blog.csdn.net/dugudaibo/article/details/78931825
PCA 的原理相信大家十分熟悉了已经,但是很多人没有真正的进行过相关的推到。在这里本文将举一个利用 PCA 降维的手工计算实例。
1 .问题的描述
已知现在有一个二维矩阵如下所示
这个是一个已经去掉均值的矩阵。其中每一行是一个维度,而每一列是一个样本。去均值的运算是针对每一个维度进行的运算,也就是说每一行减去这一行的均值。
2. 计算过程
2.1 计算协方差矩阵
由于已经进行了去均值化,所以可以直接求取协方差矩阵。需要注意的是,协方差矩阵计算的是每一个维度之间的协方差,不是计算样本之间的协方差,所以本例中的协方差矩阵为一个2×2的矩阵。
在这里需要注意的是,通过MATLAB计算协方差矩阵与手工计算有两点不同:
(1) 这里前面乘以的是1515,这个是有偏估计,但是MATLAB计算的时候乘以的是1414,计算的是无偏估计。
(2) 在 MATLAB 中,默认每一列是一个维度。所以如果输入原始的数据(2行5列)会返回一个5行5列的协方差矩阵。所以应该先对矩阵进行转置在求解协方差矩阵。
2.2 计算协方差的特征值和特征向量
通过求解方程
可以得到两个特征值 λ=25λ=25 和 λ=2λ=2。通过求解下面的矩阵,可以得到协方差矩阵的特征向量。
将两个特征向量进行归一化,得到的特征向量如下
求中第一个特征向量为特征值 λ=2λ=2 的特征向量,第二个特征向量为特征值 λ=25λ=25 的特征向量。
2.3 构建变换矩阵并降维
到这里只需要将变换矩阵与原始矩阵相乘既可以完成降维的工作,在进行降维的过程中有两个容易出现的易错点。首先,特征向量的先后顺序要按照特征值的大小顺序进行排列;其次,如果原始数据的矩阵每一行是一个维度,每一列是一个样本的话,这个时候变换矩阵中的每一行是一个特征向量,如下变换矩阵P
最后我们用P的第一行乘以数据矩阵,就得到了降维后的表示:
如果原始的数据矩阵是每一行是一个样本,而每一列是一个维度的话,此时的变换矩阵中每一列是特征向量,即
P的第一列乘以数据矩阵,就得到了降维后的表示:
3. 参考文献
[1]《PCA算法》
--------------------- 本文来自 独孤呆博 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/dugudaibo/article/details/78931825?utm_source=copy