是一种数据降维方法。保留具有代表性的主成分,舍弃比重较小的成分。
###算法步骤
- 预处理数据。均值标准化(零均值),特征缩放;
- 计算协方差矩阵;
- 对协方差矩阵进行特征值分解,求解特征值和特征向量;
- 数据降维。根据所要降低的维数k,提取前k个特征值所对应的主特征向量;计算各样本在主特征方向上的投影;
- 还原近似数据。求原始数据的k维近似重构矩阵。
###matlab代码实现
clear all;
close all;
clc;
load data.mat
[m,n] = size(X);
%%step1:预处理数据。均值标准化(零均值),特征缩放;
x = X - repmat(mean(X),50,1);
s = std(x,0,1);
x = x./repmat(s,50,1);
axis([-3 3 -3 3]);
hold on
plot(x(:, 1), x(:, 2), 'bo');
%%step2:计算协方差矩阵;
sigma = (x'*x)/m;
%%step3:对协方差矩阵进行特征值分解,求解特征值和特征向量;
[U,S,V] = svd(sigma);%采用奇异值分解,可以对任意阵进行求解,而且在S的对角线上,非负且按降序排列,便于提取主成分.
%%step4:数据降维;
k = 1;
u = U(:,1:k);%提取主特征向量
dr = x*u; %投影
%%step5:还原近似数据.
x_r = dr*u';%重构
plot(x_r(:, 1), x_r(:, 2), 'ro');
###效果图