主成分分析法(PCA)解析与MATLAB实践

这篇具有很好参考价值的文章主要介绍了主成分分析法(PCA)解析与MATLAB实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PCA(Principal Components Analysis)即主成分分析,也称主分量分析或主成分回归分析法,是一种无监督的数据降维方法,在机器学习中常用于特征降维提取主要特征以减少计算量。PCA主要原理是将高维原数据通过一个转换矩阵,映射到另一组低维坐标系下,从而实现数据降维。举个简单的例子,设X1,X2为两组数据,将他们以坐标的形式画在坐标轴中,如下图所示,主成分分析法(PCA)解析与MATLAB实践
图中点的横纵坐标分别为X1,X2的值,如果我们把数据做一个变换,使其顺时针旋转一个角度得到下图所示结果:主成分分析法(PCA)解析与MATLAB实践
再向横轴方向与纵轴方向做一个投影得到以下结果:
主成分分析法(PCA)解析与MATLAB实践
主成分分析法(PCA)解析与MATLAB实践
我们可以发现数据在横轴方向的投影差异性较大,也可以说在横轴的投影包含的信息或特征较多,如此我们便可以丢弃对纵轴的投影而保留对横轴的投影,这样便把数据从二维降到了一维。以上例子用的数据只有两个维度,那么对于多维的数据我们也可以用PCA进行处理,这里需要用到一个基本概念那就是协方差(covariance)以及协方差矩阵,上例中有两组数据,那么对应的协方差矩阵就是2*2,两组数据的协方差通常表示为cov(x1,x2)。上述例子中有两组数据,则协方差矩阵可表示为:

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

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

主成分分析法(PCA)解析与MATLAB实践
由于协方差矩阵通常为实对称矩阵,因此可以将其对角化得到对角矩阵:

主成分分析法(PCA)解析与MATLAB实践
对角元素其实就是我们所需要投影的维度中信息占比,第一个维度中的主要成分占1.284,第二个占0.0491,显然往第一个维度做投影所得到的信息较多,即第一个维度得到的是信号的主要成分。对于多维信号,其主要成分可能有多个,假设有五个信号,如下图所示:
主成分分析法(PCA)解析与MATLAB实践
我们同样可以先求五个信号的协方差矩阵:

  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)

接着再将其对角化,得到的五个成分占比如图所示(五个成分占比分别为第一个除以五个之和,第一个加第二个除以五个之和,第一个加第二个加第三个除以五个之和,以此类推)
主成分分析法(PCA)解析与MATLAB实践
可以看到,前两个维度成分加起来大约占到了总成分的95%,说明将信号投影到前两个维度就可以得到信号的主要信息,在MATLAB中可以用pca()函数来实现主成分提取,处理后的结果如下图所示,前两个波形即为五个信号中的主要成分。
主成分分析法(PCA)解析与MATLAB实践
上述第二个例子的代码如下:

clear, close all
clc

%% initialize parameters
samplerate=500; % in Hz
N=1000; % data length

freq1=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
end

figure, 
for i=1:size(PC,2)
    subplot(size(PC,2),1,i)
    plot(taxis,PC(:,i)),xlim([taxis(1) taxis(end)])
end

figure,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 on
    plot(taxis,newX(i,:),'r'),xlim([taxis(1) taxis(end)])
end

以上内容主要参考了卢家峰老师课程的讲义,课程中的程序用作上述示例代码时有改动,上述讲解若有错误或不足之处还望各位读者批评指正!文章来源地址https://www.toymoban.com/news/detail-404111.html

到了这里,关于主成分分析法(PCA)解析与MATLAB实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据分析案例-基于PCA主成分分析法对葡萄酒数据进行分析

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 1.项目背景 2.项目简介 2.1分析目标 2.2数据集介绍 2.3技术工具 3.算法理论 4.实验过程

    2024年02月03日
    浏览(31)
  • Python PCA(主成分分析法)降维的两种实现

            PCA降维,一般是用于数据分析和机器学习。它的作用是把一个高维的数据在保留最大信息量的前提下降低到一个低维的空间,从而使我们能够提取数据的主要特征分量,从而得到对数据影响最大的主成分,便于我们对数据进行分析等后续操作。         例如,

    2023年04月17日
    浏览(30)
  • 数学建模:主成分分析法

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 构建原始数据矩阵 X X X ,其中矩阵的形状为 x ∗ n x * n x ∗ n ,有 m m m 个对象, n n n 个评价指标。 然后进行矩阵的 归一化处理 。 首先计算矩阵的指标之间的 相关系数矩阵 R R R 。使用matlab 的 corr 即可得到。 计算相关系数矩

    2024年02月10日
    浏览(39)
  • 层次分析法(MATLAB)

    对之前的学习进行总结,整个比赛下来好像就用到了这个方法,最后也不知道对不对,反正最后还有点赶,就是很懵的那种,对于层次分析话的还是有点了解了,由于是纯小白,有错误的地方希望各位大佬能够指出。 目录 数据提取 归一化处理 判断矩阵 一致性检验  算术平

    2024年02月12日
    浏览(30)
  • 层次分析法(matlab实现)

           在决策理论中,层次分析法是一种以 数学 和 心理学 为基础,组织和分析复杂决策的结构化技术,它代表了一种 量化决策标准权重 的准确方法,通过成对比较,利用个别专家的经验来估计因素的相对大小        在很多情况下,我们对事物的评价,应该多维度的进

    2024年02月09日
    浏览(30)
  • 灰色关联分析法详解及python实践

    灰色关联分析是指对一个系统发展变化态势的定量描述和比较的方法,其基本思想是通过确定参考数据列和若干个比较数据列的几何形状相似程度来判断其联系是否紧密,它反映了曲线间的关联程度。 在系统发展过程中,若两个因素变化的趋势具有一致性,即同步变化程度较

    2024年02月01日
    浏览(26)
  • 数学建模之层次分析法(含MATLAB代码)

    层次分析法的基本原理与步骤 人们在进行社会的、经济的以及科学管理领域问题的系统分析中,面临的常常是 一个由相互关联、相互制约的众多因素构成的复杂而往往缺少定量数据的系统。层次 分析法为这类问题的决策和排序提供了一种新的、简洁而实用的建模方法。 基本

    2024年02月01日
    浏览(44)
  • 数学建模———层次分析法及其matlab语法,函数和代码实现

    层次分析法思想登场 建模比赛中最基础的模型之一,其主要用于解决评价类问题(例如:选择那种方案最好,哪位运动员或者员工表现的更优秀。) 评价类问题字眼: 评价的目标是什么? 达到这个目标有那几种方案? 评价准则或指标是什么? 确定权重的方方法——分而治

    2024年02月15日
    浏览(32)
  • 【数学建模学习】matlab实现评价模型——层次分析法(AHP)

    目录 1概述  2算法实现流程 3实例  4matlab实现层次分析法 5计算结果 层次分析法,简称AHP,是评价模型中的一种算法,指将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。层次分析法的缺陷在于判断矩阵是主观决定的,

    2024年02月04日
    浏览(42)
  • 清风学习笔记—层次分析法—matlab对判断矩阵的一致性检验

    在判断矩阵是否为正互反矩阵这块,我写了两种代码,改进前很麻烦且有错误,改进后简洁多了,改进前的代码还有错误,忽略了对角线的值必须都是1,只考虑了除开对角线的元素相乘为1。  下面是全部代码

    2024年02月06日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包