利用 主成分分析(PCA) 降维 个人理解

特征值分解:

从线性空间的角度看,在一个定义了内积的线性空间里,对一个N阶对称方阵进行特征分解,就是产生了该空间的N个标准正交基,然后把矩阵投影到这N个基上。N个特征向量就是N个标准正交基,而特征值的模则代表矩阵在每个基上的投影长度。
特征值越大,说明矩阵在对应的特征向量上的方差越大,功率越大,信息量越多。

PCA降维:

经过特征值分解,已经得到的N个特征向量和对应的特征值。根据特征值的模的大小,取前m个最大的特征值和对应的特征向量,就得到了原始矩阵的m个最主要的方向和在对应方向上的投影长度。这样,原始数据的主要信息就被保留了下来,而且数据维度从N降到了m。

举个栗子:

利用 主成分分析(PCA) 降维 个人理解_第1张图片利用 主成分分析(PCA) 降维 个人理解_第2张图片利用 主成分分析(PCA) 降维 个人理解_第3张图片
在3维空间中,数据分别如银河系,每颗星代表一个数据点(图1)。从图3中可以看出,数据在其中一维上,方差较其它两维要小得多,即,在该方向上的特征值的模较小。那么在保留大部分信息的前提下,去掉这一维,得到的二维数据(图2)也是能较好反应原始数据的。

matlab 代码:

% PCA dimensionality reduction
%lores 的行数表示原始数据的维数, 列数表示数据的个数
C = double(lores * lores');
[V, D] = eig(C);
D = diag(D);                % perform PCA on features matrix 
D = cumsum(D) / sum(D);
k = find(D >= 1e-3, 1);     % ignore 0.1% energy
V_pca = V(:, k:end);        % choose the largest eigenvectors' projection
lores = V_pca' * lores;

其中,eig()函数用于求矩阵的特征值和特征向量。

参考:

知乎上关于 如何理解矩阵特征值? 的回答https://www.zhihu.com/question/21874816/answer/19592526

你可能感兴趣的:(matlab,数据分析)