PCA 理论及应用
如何通俗易懂地讲解什么是 PCA(主成分分析)? - 马同学的回答 - 知乎
PCA算法流程
1、数据预处理:归一化和中心化
2、得到基矩阵U
3、得到降维矩阵Z
如何通俗易懂地讲解什么是 PCA(主成分分析)? - 武辰的回答 - 知乎
算法流程-吴恩达-机器学习
MATLAB代码实现-调用SVD(奇异值分解)
- 复现的是该博主的实战部分(二维降到一维)
代码
%数据预处理部分
%文件名: PcaDataProcess.m
function Y = PcaDataProcess(X)
%% Scale the features (pixel values) to [0,1]
% 理论上数据需要归一化和中心化处理,此处为了复习知乎文章结果,不在归一化
%
% mean normalization
% maxValue = max(max(X));
% X = X/maxValue;
%m:样本数量, n:每个样本的维度
%X(m-by-n)
[m, n] = size(X);
%数据中心化处理
u = zeros(m, 1);
for i = 1:n
u = u+X(:,i);
end
u = u/n;
for i = 1:n
X(:,i) = X(:,i)-u;
end
Y = X;
end
%文件名: PCA.m
%该函数调用PcaDataProcess函数
function [X_approx, U] = PCA(X, num_basis)
Y = PcaDataProcess(X);
[m, n] = size(X);
%完成缩放和中心化后的训练集
X = Y;
Sigma = (1/n)*(Y*Y');
[U, S, D] = svd(Sigma);
U = U(:, 1:num_basis);%U基矩阵(m-by-k)
Z = U'*X; %Z为降维后的矩阵(k-by-n)
X_approx = U*Z; %重建矩阵
save ('PCA_Z.mat','Z');
save ('PCA_U.mat', 'U');
save ('PCA_X_approx.mat','X_approx');
save ('PCA_X.mat','X');
end
输入
X = [10 2 1 7 3; 9 3 2 6.5 2.5]
PCA(X, 1);
输出
- 打开当前文件目录下的PCA_Z.mat文件