使用Matlab实现PCA变换和白化变换,并探究PCA变换在保留所有所有维度下的情况

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) xN(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 (xx)

  重建则为 x ≈ x ^ = x ‾ + W ^ y x \approx \widehat{x} = \overline{x}+\widehat{W}y xx =x+W y当保留所有维度的时,即使用了全部特征向量,则 y = W ^ ( x − x ‾ ) y=\widehat{W}(x-\overline{x}) y=W (xx)

  • σ = ∑ 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) yN(0,Λ),即将原始的参数 x x x,经过 x ‾ \overline{x} x平移,再进行旋转,使得原始正态分布的轴能够和坐标轴平行。

  执行这一操作的后果是新特征之中各个维度互不相关,对于高斯分布而言,不相关意味着, y y y中不同分量是互相独立的。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值