1. 使用 x=randn(2000,2)*[2 1;1 2]生成 2000 个样本,每个样本都是二维的,使用 scatter 函数画出这 2000 个样本。
%% datainput.m
clc,clear
x=randn(2000,2)*[2 1;1 2];
figure(1);
scatter(x(:,1),x(:,2));
xlim([-10,10]);
ylim([-10,10]);
saveas(gcf,'workone.png')
2. 对这些样本进行 PCA 变换,并保留所有的 2 个维度,使用 scatter 函数画出 PCA 后的样本。
%% selfpca.m
function pca=selfpca(x)
[row,~]=size(x);
c=cov(x); %求矩阵x的协方差矩阵
[F,~]=eigs(c); %F的列向量为对应特征向量
meanx=mean(x); %求矩阵每列的平均值
tempx=repmat(meanx,row,1); %堆叠矩阵
Y_pca=(x-tempx)*F;
pca=Y_pca(:,1:2); %取第1、2列
end
%% datainput.m
pca=selfpca(x);
figure(2)
scatter(pca(:,1),pca(:,2));
xlim([-10.5,10.5]);
ylim([-10.5,10.5]);
saveas(gcf,'worktwo.png')
3.对这些样本进行白化变换并保留所有的 2 个维度,使用 scatter 函数画出 PCA 后的样本
%% Whiten_process.m
function whitening=Whiten_process_self(x)
[row,~]=size(x);
c=cov(x); %求矩阵x的协方差矩阵
[F,V]=eigs(c); %F的列向量为对应特征向量,V为最大特征值对角阵
meanx=mean(x); %求矩阵每列的平均值
tempx=repmat(meanx,row,1); %堆叠矩阵
v=V^(-0.5);
Y_whiten=(x-tempx)*(F*v);
whitening=Y_whiten(:,1:2); %取第1、2列
end
%% datainput.m
whitening=Whiten_process_self(x);
figure(3)
scatter(whitening(:,1),whitening(:,2));
xlim([-4.5,4.5]);
ylim([-4.5,4.5]);
saveas(gcf,'workthree.png')
4.如果保留所有维度,为什么 PCA 是数据(在进行平移之后)的一个旋转?这一操作为什么会有用?
已知输入参数服从正态分布 x ∼ N ( x ‾ , σ ) x \sim N(\overline{x}, \sigma) x∼N(x,σ),PCA 的变换步骤如下:
- 获得训练样本: x 1 , x 2 , … , x n x_1,x_2,…,x_n x1,x2,…,xn
- 计算得到 x ‾ \overline{x} x和 Cov(x)
- 求得 Cov(x)的特征值和特征向量
- 根据特征值选定 T
- 根据 T 的值确定矩阵 W ^ \widehat{W} W
- 对于任何数据
x
x
x,其新的经过 PCA 变换得到的特征是
y = W ^ ( x − x ‾ ) y = \widehat{W}(x-\overline{x}) y=W (x−x)
重建则为 x ≈ x ^ = x ‾ + W ^ y x \approx \widehat{x} = \overline{x}+\widehat{W}y x≈x =x+W y当保留所有维度的时,即使用了全部特征向量,则 y = W ^ ( x − x ‾ ) y=\widehat{W}(x-\overline{x}) y=W (x−x)
- σ = ∑ i = 1 d λ i ξ i ξ i T = ∑ i = 1 d λ i w i w i T = W Λ W T \sigma = \sum^{d}_{i=1} \lambda_i \xi_i \xi^T_i = \sum^d_{i=1} \lambda_i w_i w^T_i = W\Lambda W^T σ=∑i=1dλiξiξiT=∑i=1dλiwiwiT=WΛWT
- 其中, Λ \Lambda Λ是一个由 Cov(x)的特征值所构成的对角矩阵,即
Λ = d i a g ( λ 1 , λ 2 , … , λ T ) . \Lambda = diag(\lambda_1,\lambda_2,…,\lambda_T). Λ=diag(λ1,λ2,…,λT).
- 且 W W T = I + W T W WW^T=I+W^TW WWT=I+WTW
通过正态分布的特性易得,经过 PCA 变换之后的 y y y也是正态分布的,且其参数估计为 y ∼ N ( 0 , Λ ) y \sim N(0,\Lambda) y∼N(0,Λ),即将原始的参数 x x x,经过 x ‾ \overline{x} x平移,再进行旋转,使得原始正态分布的轴能够和坐标轴平行。
执行这一操作的后果是新特征之中各个维度互不相关,对于高斯分布而言,不相关意味着, y y y中不同分量是互相独立的。