主成分分析(principal component analysis, PCA)。
1、样本
1.1、样本数据集
导入一个二维的数据集并显示,得到。
>> load ('ex7data1.mat');
>> plot(X(:, 1), X(:, 2), 'bo');
>> axis([0.5 6.5 2 8]); axis square;
1.2、执行PCA算法
PCA算法包括如下几个部分:
对原始数据进行归一化:其归一化的算法为X:=(X-mu)/sigma,其中mu为数据的均值,sigma为数据的标准差。
计算数据的协方差矩阵:
对协方差矩阵进行奇异值分解:
若降为K维,则取Ureduce = U(:,1:K);
降维后的数据为Z = Ureduce’ * X 。
完善函数[U, S] = pca(X)有:
function [U, S] = pca(X)
[m, n] = size(X);
U = zeros(n);
S = zeros(n);
Sigma = X'*X/m;
[U,S,V] = svd(Sigma);
end
执行程序有:
Top eigenvector:
U(:,1) = -0.707107 -0.707107
1.3、使用PCA降维
完成映射函数Z = projectData(X, U, K):
function Z = projectData(X, U, K)
Z = zeros(size(X, 1), K);
Ureduce = U(:,1:K);
Z = X * Ureduce;
end
完善重构函数X_rec = recoverData(Z, U, K):
function X_rec = recoverData(Z, U, K)
X_rec = zeros(size(Z, 1), size(U, 1));
Ureduce = U(:,1:K);
X_rec = Z * Ureduce';
end
运行程序有:
Dimension reduction on example dataset.
Projection of the first example: 1.481274
(this value should be about 1.481274)
Approximation of the first example: -1.047419 -1.047419
(this value should be about -1.047419 -1.047419)
2、人脸图像数据集
原始数据中前100幅人脸图像为
将1024维图像降维至100维
原始图像与PCA重建的图像对比为