PCA降维代码带绘图matlab
时间: 2023-09-12 11:06:00 浏览: 109
下面是一个简单的PCA降维的MATLAB代码,包括数据预处理、协方差矩阵计算、特征值和特征向量计算、降维和绘图等步骤:
```matlab
% 加载数据
data = load('data.txt');
% 数据预处理,均值归一化
[X, mu, sigma] = featureNormalize(data);
% 计算协方差矩阵
Sigma = 1/size(X, 1) * X' * X;
% 计算特征值和特征向量
[U, S, V] = svd(Sigma);
U_reduce = U(:, 1:2); % 选择前两个主成分
% 降维
Z = X * U_reduce;
% 绘图
plot(Z(:,1), Z(:,2), 'o');
xlabel('Principal Component 1');
ylabel('Principal Component 2');
```
其中,`featureNormalize`函数用于数据预处理,将数据进行均值归一化:
```matlab
function [X_norm, mu, sigma] = featureNormalize(X)
% 归一化数据
mu = mean(X);
X_norm = bsxfun(@minus, X, mu);
sigma = std(X_norm);
X_norm = bsxfun(@rdivide, X_norm, sigma);
end
```
需要注意的是,在使用`svd`函数计算特征值和特征向量时,要将协方差矩阵作为输入参数,并且取前k个主成分时,只需要选取前k个特征向量即可。
阅读全文