实现主成分分析 (PCA) 和独立成分分析 (ICA) (Matlab代码实现)
创始人
2024-04-18 12:01:29
0次

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

2.1 ICA

 2.2 PCA

🌈3 Matlab代码实现

🎉4 参考文献


💥1 概述

在PCA中,多维数据被投影到对应于其几个最大奇异值的奇异向量上。此类操作有效地将输入单分解为数据中方差最大的方向上的正交分量。因此,PCA通常用于降维应用,其中执行PCA会产生数据的低维表示,可以反转以紧密重建原始数据。
在 ICA 中,多维数据被分解为在适当意义上最大程度独立的组件(在此包中为峰度和负熵)。ICA与PCA的不同之处在于,低维信号不一定对应于最大方差的方向;相反,ICA组成部分具有最大的统计独立性。在实践中,ICA通常可以在多维数据中发现不相交的潜在趋势。

📚2 运行结果

2.1 ICA

 

 

 2.2 PCA

 

 

部分代码:

% Knobs
n = 100;    % Number of samples
d = 3;      % Sample dimension
r = 2;      % Number of principal components

% Generate Gaussian data
MU = 10 * rand(d,1);
sigma = (2 * randi([0 1],d) - 1) .* rand(d);
SIGMA = 3 * (sigma * sigma');
Z = mvg(MU,SIGMA,n);

% Perform PCA
[Zpca, U, mu] = PCA(Z,r);
Zr = U * Zpca + repmat(mu,1,n);

% Plot principal components
figure;
for i = 1:r
    subplot(r,1,i);
    plot(Zpca(i,:),'b');
    grid on;
    ylabel(sprintf('Zpca(%i,:)',i));
end
subplot(r,1,1);
title('Principal Components');

% Plot r-dimensional approximations
figure;
for i = 1:d
    subplot(d,1,i);
    hold on;
    p1 = plot(Z(i,:),'--r');
    p2 = plot(Zr(i,:),'-.b');
    grid on;
    ylabel(sprintf('Z(%i,:)',i));
end
subplot(d,1,1);
title(sprintf('%iD PCA approximation of %iD data',r,d));
legend([p1 p2],'Z','Zr');
 

% Knobs
n = 100;    % Number of samples
d = 3;      % Sample dimension
r = 2;      % Number of principal components

% Generate Gaussian data
MU = 10 * rand(d,1);
sigma = (2 * randi([0 1],d) - 1) .* rand(d);
SIGMA = 3 * (sigma * sigma');
Z = mvg(MU,SIGMA,n);

% Perform PCA
[Zpca, U, mu] = PCA(Z,r);
Zr = U * Zpca + repmat(mu,1,n);

% Plot principal components
figure;
for i = 1:r
    subplot(r,1,i);
    plot(Zpca(i,:),'b');
    grid on;
    ylabel(sprintf('Zpca(%i,:)',i));
end
subplot(r,1,1);
title('Principal Components');

% Plot r-dimensional approximations
figure;
for i = 1:d
    subplot(d,1,i);
    hold on;
    p1 = plot(Z(i,:),'--r');
    p2 = plot(Zr(i,:),'-.b');
    grid on;
    ylabel(sprintf('Z(%i,:)',i));
end
subplot(d,1,1);
title(sprintf('%iD PCA approximation of %iD data',r,d));
legend([p1 p2],'Z','Zr');

🌈3 Matlab代码实现


 

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Brian Moore (2022). PCA and ICA Package

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...