用matlab实现PCA
时间: 2023-10-10 08:15:11 浏览: 85
MATLAB人脸识别PCA[库外人连,报警,GUI,论wen],matlab实现pca人脸识别,matlab
4星 · 用户满意度95%
PCA(Principal Component Analysis) 是一种常用的数据降维技术,可以将高维数据转化为低维空间,保留数据的主要方差信息。下面是用 MATLAB 实现 PCA 的简单代码示例:
假设我们有一个矩阵 X,其中每一行表示一个数据样本,每一列表示一个特征。我们的目标是将 X 转换为降维后的矩阵 Y。
1. 首先,我们需要将数据矩阵 X按列进行中心化,即每一列的数据都减去该列数据的均值。
```matlab
X = X - repmat(mean(X),size(X,1),1);
```
2. 计算协方差矩阵 C,其中每个元素 $c_{i,j}$ 表示第 i 列和第 j 列之间的协方差。
```matlab
C = cov(X);
```
3. 计算协方差矩阵 C 的特征向量和特征值。
```matlab
[V,D] = eig(C);
```
其中,V 是特征向量矩阵,每一列表示一个特征向量;D 是特征值矩阵,对角线上的元素表示每个特征向量的特征值。
4. 将特征向量按照对应的特征值大小降序排列,选择前 k 个特征向量组成变换矩阵 P。
```matlab
[~,I] = sort(diag(D),'descend');
P = V(:,I(1:k));
```
5. 将数据矩阵 X 乘以变换矩阵 P,得到降维后的矩阵 Y。
```matlab
Y = X * P;
```
完整代码如下:
```matlab
% 假设我们有一个数据矩阵 X,其中每一行表示一个数据样本,每一列表示一个特征
X = randn(100,10);
% 按列进行中心化
X = X - repmat(mean(X),size(X,1),1);
% 计算协方差矩阵
C = cov(X);
% 计算特征向量和特征值
[V,D] = eig(C);
% 取前 k 个特征向量进行降维
k = 2;
[~,I] = sort(diag(D),'descend');
P = V(:,I(1:k));
% 将数据矩阵 X 乘以变换矩阵 P,得到降维后的矩阵 Y
Y = X * P;
% 绘制降维后的数据散点图
scatter(Y(:,1),Y(:,2));
```
阅读全文