matlab pca 代码
时间: 2023-07-27 09:07:00 浏览: 45
以下是 MATLAB 中使用 PCA 进行数据降维的代码示例:
假设我们有一个 $m \times n$ 的数据矩阵 $X$,其中 $m$ 表示样本数量,$n$ 表示特征数量。我们要使用 PCA 对其进行降维,将其降到 $k$ 维。
首先,我们需要将数据进行中心化,使每个特征的均值为 0,这可以通过减去每个特征的平均值来实现:
```matlab
X = X - repmat(mean(X), m, 1);
```
然后,我们需要计算数据的协方差矩阵 $C$:
```matlab
C = cov(X);
```
接着,我们需要计算协方差矩阵的特征值和特征向量:
```matlab
[V, D] = eig(C);
```
其中,$V$ 是特征向量矩阵,$D$ 是特征值矩阵。
我们只需要保留前 $k$ 大的特征值和对应的特征向量,即可将数据降到 $k$ 维:
```matlab
[~, idx] = sort(diag(D), 'descend');
V = V(:, idx(1:k));
Y = X * V;
```
其中,$Y$ 是降维后的数据矩阵,它的大小为 $m \times k$。
完整的代码如下:
```matlab
% X: m x n 数据矩阵
% k: 降维后的维数
function Y = pca(X, k)
% 中心化
X = X - repmat(mean(X), size(X, 1), 1);
% 计算协方差矩阵
C = cov(X);
% 计算特征值和特征向量
[V, D] = eig(C);
% 保留前 k 大的特征值和对应的特征向量
[~, idx] = sort(diag(D), 'descend');
V = V(:, idx(1:k));
% 计算降维后的数据
Y = X * V;
end
```
使用示例:
```matlab
% 生成测试数据
X = randn(100, 5);
% 将数据降到 3 维
Y = pca(X, 3);
```