PCA(Principal Components Analysis)即主成分分析,也称主分量分析或主成分回归分析法,是一种无监督的数据降维方法,在机器学习中常用于特征降维提取主要特征以减少计算量。PCA主要原理是将高维原数据通过一个转换矩阵,映射到另一组低维坐标系下,从而实现数据降维。举个简单的例子,设X1,X2为两组数据,将他们以坐标的形式画在坐标轴中,如下图所示,
图中点的横纵坐标分别为X1,X2的值,如果我们把数据做一个变换,使其顺时针旋转一个角度得到下图所示结果:
再向横轴方向与纵轴方向做一个投影得到以下结果:


我们可以发现数据在横轴方向的投影差异性较大,也可以说在横轴的投影包含的信息或特征较多,如此我们便可以丢弃对纵轴的投影而保留对横轴的投影,这样便把数据从二维降到了一维。以上例子用的数据只有两个维度,那么对于多维的数据我们也可以用PCA进行处理,这里需要用到一个基本概念那就是协方差(covariance)以及协方差矩阵,上例中有两组数据,那么对应的协方差矩阵就是2*2,两组数据的协方差通常表示为cov(x1,x2)。上述例子中有两组数据,则协方差矩阵可表示为:

                      cov(x1,x1)    cov(x1,x2)cov(x2,x1)    cov(x2,x2)

MATLAB中求协方差的函数为cov(),调用此函数可以得到以下结果:


由于协方差矩阵通常为实对称矩阵,因此可以将其对角化得到对角矩阵:


对角元素其实就是我们所需要投影的维度中信息占比,第一个维度中的主要成分占1.284,第二个占0.0491,显然往第一个维度做投影所得到的信息较多,即第一个维度得到的是信号的主要成分。对于多维信号,其主要成分可能有多个,假设有五个信号,如下图所示:

我们同样可以先求五个信号的协方差矩阵:

  cov(x1,x1) cov(x1,x2)  cov(x1,x3)  cov(x1,x4)  cov(x1,x5)cov(x2,x1) cov(x2,x2)  cov(x2,x3)  cov(x2,x5)  cov(x2,x5)cov(x3,x1) cov(x3,x2)  cov(x3,x3)  cov(x3,x4)  cov(x3,x5)cov(x4,x1) cov(x4,x2)  cov(x4,x3)  cov(x4,x4)  cov(x4,x5)cov(x5,x1) cov(x5,x2)  cov(x5,x3)  cov(x5,x4)  cov(x5,x5)

接着再将其对角化,得到的五个成分占比如图所示(五个成分占比分别为第一个除以五个之和,第一个加第二个除以五个之和,第一个加第二个加第三个除以五个之和,以此类推)

可以看到,前两个维度成分加起来大约占到了总成分的95%,说明将信号投影到前两个维度就可以得到信号的主要信息,在MATLAB中可以用pca()函数来实现主成分提取,处理后的结果如下图所示,前两个波形即为五个信号中的主要成分。

上述第二个例子的代码如下:

clear, close all
clc%% initialize parameters
samplerate=500; % in Hz
N=1000; % data lengthfreq1=5; % in Hz
freq2=7; % in Hz
taxis=[1:N]/samplerate;PCnum=2;  % the number of PC used to reconstruct signals%% generate test signals
C1 = 0.75*sin(2*pi*freq1*taxis);        % 1st component: a sine wave
C2 = sawtooth(2*pi*freq2*taxis,0.5);    % 2nd component: a triangular wave% Combine data in different proportions
X(1,:) = 0.5*C1 + 0.5*C2 + 0.1*rand(1,N);
X(2,:) = 0.7*C1 + 0.2*C2 + 0.1*rand(1,N);
X(3,:) = 0.2*C1 + 0.7*C2 + 0.1*rand(1,N);
X(4,:) = -0.3*C1 - 0.6*C2 + 0.3*rand(1,N);
X(5,:) = 0.6*rand(1,N);    % Noise only% Center data by subtracting mean
X = X - mean(X,2)*ones(1,N);figure,
for i=1:size(X,1)subplot(size(X,1),1,i)plot(taxis,X(i,:)),xlim([taxis(1) taxis(end)])
end%% Principal Components Analysis using princomp funcion (using eig and svd)
[U,PC,eigenVal]=pca(X')for i=1:size(X,1)eigen_perc(i)=sum(eigenVal(1:i))/sum(eigenVal)*100;  % calculate accumulated percentage of eigenvalues
endfigure,
for i=1:size(PC,2)subplot(size(PC,2),1,i)plot(taxis,PC(:,i)),xlim([taxis(1) taxis(end)])
endfigure,plot(eigen_perc,'-o')
xlabel('dimension'),ylabel('percentage of accumulate eigenvalues')%% Check the covariance of principal components (PC)
cov(PC)  % make sure if the PCs are uncorrelated !
% the off-diagonal terms should be 0%% Reconstruct the Signal only use the first PCnum PCs
newX = U(:,1:PCnum)*PC(:,1:PCnum)';figure,
for i=1:size(newX,1)subplot(size(newX,1),1,i)plot(taxis,X(i,:)),hold onplot(taxis,newX(i,:),'r'),xlim([taxis(1) taxis(end)])
end

以上内容主要参考了卢家峰老师课程的讲义,课程中的程序用作上述示例代码时有改动,上述讲解若有错误或不足之处还望各位读者批评指正!

主成分分析法(PCA)解析与MATLAB实践相关推荐

  1. sklearn 主成分分析法 PCA和IPCA

    主成分分析法 (PCA) 是一种常用的数据分析手段.对于一组不同维度 之间可能存在线性相关关系的数据,PCA 能够把这组数据通过正交变换变 成各个维度之间线性无关的数据.经过 PCA 处理的数据中的各 ...

  2. 数据降维之主成分分析法PCA

    主成分分析法PCA 参考链接:https://www.bilibili.com/video/BV1E5411E71z 主成分分析(Principal Component Analysis,PCA), ...

  3. pca 矩阵 迹_主成分分析法(PCA)推导

    主成分分析法(principal component analysis, PCA)是最常用的无监督高维数据降维方法之一,它旨在降维的过程中保留原数据中最重要的几个分量,从而达到最大化原数据方差的作用. ...

  4. 主成分分析法PCA(一):算法原理

    一:算法概述: 主成分分析法,principle component analysis,PCA.也称主分量分析,是一种大样本,多变量数据间内在关系的一种方法.这种方法利用降维的思想,通过向量变换的方法 ...

  5. 主成分分析法(PCA)及其python实现

    主成分分析法(Principal Component Analysis,PCA)是一种用于把高维数据降成低维,使分析变得更加简便的分析方法.比如我们的一个样本可以由nnn维随机变量(X1,X2,... ...

  6. 机器学习 - 主成分分析法 (PCA)

    文章目录 1. 主成分分析问题 2. 主成分分析算法 3. 重建的压缩表示 4. 选择主成分的数量 1. 主成分分析问题 主成分分析(PCA)是最常见的降维算法. 在PCA中,要做的是找到一个方向向量 ...

  7. Python 主成分分析法 PCA

    主成分分析法是一种利用相关系数对数据进行降维的方法,可用于处理维数过多.指标意义不明确的数据.求相关系数的方法有很多种,下面只以协方差法为例 相关系数 输入是 shape 为 [sample, fea ...

  8. 主成分分析法 (PCA) 用于数据可视化实验 -- Matlab版

    第一步:下载数据集. https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass.html#pendigits 第二步:改变数 ...

  9. 从优化角度推导主成分分析法(PCA)的数学原理

        PCA是Principle Component Analysis的简称,它的基本原理是:在保证数据总信息量尽可能大的前提下,将高维数据投影到低维空间内.     记原数据为 x = ( X 1 ...

最新文章

  1. python数字组合算法_面试宝典_Python.常规算法.0001.在圆圈和框框分别填入1~8数字各一次?...
  2. 6. 简单又复杂的“运算符”,建议你看一哈
  3. 科技写作:传递信息要先旧后新
  4. 网络流三·二分图多重匹配 HihoCoder - 1393
  5. 互联网日报 | TikTok将开启Pre-IPO融资;菜鸟裹裹战略再升级;滴滴中国西区总部落户重庆江北...
  6. BetterZip结合自动操作工具和预设设置创建电影解压程序
  7. linux 源码编译安装apache
  8. mysql自带的全文索引_MySQL创建全文索引分享
  9. ASP.NET页面生命周期概述(转载)
  10. 四叶草社交平台——十天冲刺(7)
  11. python2多线程_python_并发编程——多线程2
  12. 到底啥是平台,到底啥是中台?李鬼太多,不得不说
  13. windows错误代码
  14. 强化学习Q-Learning解决FrozenLake例子(Python)
  15. 敏捷软件开发--敏捷宣言
  16. 植物大战 二叉树 递归——纯C
  17. 湖南大学基于SMTP和POP3的邮件系统——计算机网络课设
  18. Springboot 整合Retry 实现重试机制
  19. 科技前沿:几款意念控制器
  20. ETL 与 ELT的关键区别

热门文章

  1. 如何重置计算机服务到默认状态,电脑慢到让人抓狂?教你如何将Windows10还原到出厂设置...
  2. cath数据库fasta备注_sam's note
  3. APACHE官网下载历史版本TOMCAT(以8.5.6版本为例)
  4. linux sysinfo ()
  5. Python Numpy random.chisquare() 卡方分布
  6. 2021-2022学年广州市执信中学七年级第一学期期中考试英语试题
  7. [ MySQL ] 使用Navicat进行MySQL数据库备份 / 还原(Part 2:备份.sql文件方式)
  8. JAVA基础总结----JAVA面试必备
  9. 拆解USB无线网卡,电路方案非常经典(附高清美图)
  10. RabbitMQ高可用--Quorum Queue(仲裁队列)的用法