主成分法的代码写得挺简洁的,尤其适合想快速上手 PCA 的你。思路也清晰:先规范化,再搞协方差矩阵,就求特征值和特征向量。核心主成分一眼就能挑出来,投影重构那块也挺好理解的。
PCA 的核心就是把高维数据“压扁”,但又不丢太多信息,挺适合图像压缩、特征提取这些场景。线性方法虽老但好用,配合 MATLAB 的pca
函数,用起来效率也不低。
比如下面这段代码:
%创建一个数据矩阵
X = [1 2 3 4 5;1 3 2 5 4];
X = X';
[coeff, ~, latent] = pca(X);
[i] = max(latent);
P = coeff(:,i);
Y = P'*X;
用起来直观,coeff
就是方向,latent
是你要找的方差,Y
就是低维结果。
哦对,pca
还会顺带给你一些别的东西,比如explained
(每个主成分的贡献率)和mu
(均值),这些也挺有用。
如果你是做图像或机器学习的,尤其经常碰高维数据,PCA 可以说是你绕不开的工具。想试试更复杂的,还可以搭配深度稀疏自动编码器一起玩。
不过要注意哦,PCA 是线性的,对非线性关系不太敏感。如果你数据太复杂,像是生物信号或语音这种,可以考虑用 EEMD 或者其他非线性降维。
想拓展学习的,也可以看看这些资源: PCA 特征提取的 Matlab 实现、 特征值与特征向量详解、 人脸特征提取案例。
如果你正好在用 MATLAB 高维数据,或者在训练模型前想做点特征筛选,真的可以拿来试试,响应也快,效果也蛮稳。