Matlab实现PCA
2014-04-24 13:55
239 查看
在主成分分析(PCA)中,介绍了PCA的数学原理,其实用Matlab可以很方便地对矩阵进行操作!
比如,用Matlab求多个样本的协方差矩阵、求矩阵的特征根和特征向量等。
下面介绍用Matlab实现PCA:
假设有4个样本A、B、C、D,每个样本都是6维。
>> A=[1,2,3,4,5,6];
>> B=[1,3,5,7,9,9];
>> C=[2,3,4,6,7,8];
>> D=[3,4,6,7,8,9];
将这4个样本组合成一个矩阵Q,矩阵Q的每一行为一个样本。
>> Q=[A;B;C;D]
Q =
1 2 3 4 5 6
1 3 5 7 9 9
2 3 4 6 7 8
3 4 6 7 8 9
根据cov()函数,求训练样本的协方差矩阵W(注意W是对称的,也即W==W‘)
>> W=cov(Q)
W =
0.9167 0.6667 0.8333 0.6667 0.4167 0.6667
0.6667 0.6667 1.0000 1.0000 1.0000 1.0000
0.8333 1.0000 1.6667 1.6667 1.8333 1.6667
0.6667 1.0000 1.6667 2.0000 2.3333 2.0000
0.4167 1.0000 1.8333 2.3333 2.9167 2.3333
0.6667 1.0000 1.6667 2.0000 2.3333 2.0000
由于cov()函数是按行处理的,也即它认为Q中每一行为一个样本,
所以如果Q写成Q=[A',B',C',D'](6*4的矩阵,每一列为一个样本),W将会为4*4的矩阵,显然不对。
根据协方差矩阵求特征根v、特征向量d(d中每一列为特征根v对应的特征向量)
>> [d,v]=eig(W)
d =
-0.0338 0.4409 -0.3021 0.3507 -0.7491 0.1704
-0.1133 -0.8695 -0.2299 0.0334 -0.3427 0.2444
0.0490 0.1429 0.1773 -0.8342 -0.2871 0.4092
-0.5987 0.0439 0.5673 0.2998 0.0718 0.4720
-0.1319 0.1552 -0.6568 -0.0176 0.4782 0.5460
0.7796 -0.0563 0.2668 0.2998 0.0718 0.4720
v =
-0.0000 0 0 0 0 0
0 0.0000 0 0 0 0
0 0 0.0000 0 0 0
0 0 0 0.1169 0 0
0 0 0 0 1.1473 0
0 0 0 0 0 8.9024
如果要降到3维,那么根据特征根大小,选择前三个特征根对应的特征向量组合成6*3的投影矩阵----PCA投影矩阵!
比如,用Matlab求多个样本的协方差矩阵、求矩阵的特征根和特征向量等。
下面介绍用Matlab实现PCA:
假设有4个样本A、B、C、D,每个样本都是6维。
>> A=[1,2,3,4,5,6];
>> B=[1,3,5,7,9,9];
>> C=[2,3,4,6,7,8];
>> D=[3,4,6,7,8,9];
将这4个样本组合成一个矩阵Q,矩阵Q的每一行为一个样本。
>> Q=[A;B;C;D]
Q =
1 2 3 4 5 6
1 3 5 7 9 9
2 3 4 6 7 8
3 4 6 7 8 9
根据cov()函数,求训练样本的协方差矩阵W(注意W是对称的,也即W==W‘)
>> W=cov(Q)
W =
0.9167 0.6667 0.8333 0.6667 0.4167 0.6667
0.6667 0.6667 1.0000 1.0000 1.0000 1.0000
0.8333 1.0000 1.6667 1.6667 1.8333 1.6667
0.6667 1.0000 1.6667 2.0000 2.3333 2.0000
0.4167 1.0000 1.8333 2.3333 2.9167 2.3333
0.6667 1.0000 1.6667 2.0000 2.3333 2.0000
由于cov()函数是按行处理的,也即它认为Q中每一行为一个样本,
所以如果Q写成Q=[A',B',C',D'](6*4的矩阵,每一列为一个样本),W将会为4*4的矩阵,显然不对。
根据协方差矩阵求特征根v、特征向量d(d中每一列为特征根v对应的特征向量)
>> [d,v]=eig(W)
d =
-0.0338 0.4409 -0.3021 0.3507 -0.7491 0.1704
-0.1133 -0.8695 -0.2299 0.0334 -0.3427 0.2444
0.0490 0.1429 0.1773 -0.8342 -0.2871 0.4092
-0.5987 0.0439 0.5673 0.2998 0.0718 0.4720
-0.1319 0.1552 -0.6568 -0.0176 0.4782 0.5460
0.7796 -0.0563 0.2668 0.2998 0.0718 0.4720
v =
-0.0000 0 0 0 0 0
0 0.0000 0 0 0 0
0 0 0.0000 0 0 0
0 0 0 0.1169 0 0
0 0 0 0 1.1473 0
0 0 0 0 0 8.9024
如果要降到3维,那么根据特征根大小,选择前三个特征根对应的特征向量组合成6*3的投影矩阵----PCA投影矩阵!
相关文章推荐
- PCA算法学习(Matlab实现)
- PCA matlab实现
- MATLAB自带工具箱实现PCA降维代码,着重介绍实现方法
- 基于MATLAB的PCA人脸识别实现
- PCA检测人脸的简单示例_matlab实现
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- Matlab实现PCA
- Yale人脸数据库、PCA算法实现Matlab中特征脸生成和简单的人脸识别
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- deep learning之PCA in 2D matlab 实现
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- 在matlab中实现PCA算法
- PCA的原理及MATLAB实现
- PCA算法学习_2(PCA理论的matlab实现)
- 主成分分析(PCA)原理与故障诊断(SPE、T^2以及结合二者的综合指标)-MATLAB实现
- PCA分析以及MATLAB实现
- PCA算法学习_2(PCA理论的matlab实现)
- 基于PCA的人脸识别_Matlab实现(个人研读之后的一些总结)
- PCA(主成分)分析及MATLAB实现
- 主成分分析PCA的matlab实现