实现主成分分析 (PCA) 和独立成分分析 (ICA) (Matlab代码实现)
👨🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥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
相关文章
- 随机振动 matlab,Matlab内建psd函数在工程随机振动谱分析中的修正方法「建议收藏」
- matlab设计模拟带通滤波器
- 手眼标定Tsai方法的Matlab仿真分析
- lasso回归matlab,机器学习Lasso回归重要论文和Matlab代码「建议收藏」
- BP神经网络预测matlab代码讲解与实现步骤
- matlab怎么对语音信号处理,语音信号处理MATLAB程序
- matlab条件跳出语句,if语句跳出循环
- matlab fir带通滤波,基于Matlab的FIR带通滤波器设计与实现
- matlab测试部分,验证、确认和测试 – MATLAB 和 Simulink 解决方案 – MATLAB & Simulink
- matlab做kmo检验的代码,急求 KMO测度和Bartlett 的球形度检验的计算原公式[通俗易懂]
- IEEE follow机器学习遥感图像处理课程讲义及Matlab代码分享
- matlab解析int8数据为double_matlab把double转成int
- 香农编码的matlab实现总结_matlab简单代码实例
- matlab保存图片函数后突变分辨变化,MATLAB总结 – 图片保存「建议收藏」
- matlab 行 读取文件 跳过_Matlab读取TXT文件并跳过中间几行的问题!!
- matlab画心形曲线_笛卡尔心形曲线方程
- Matlab赋值_matlab二维数组赋值
- 粒子群优化算法matlab程序_多目标优化算法
- matlab 汽车振动,基于MatLab的车辆振动响应幅频特性分析
- matlab 马赫带效应,matlab图像处理基础实例
- matlab实现RK45(Runge-Kutta45、ode45)求解器算法
- Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型|附代码数据
- 【MATLAB】矩阵操作 ( 矩阵下标 | 矩阵下标排列规则 )
- MATLAB冒号:运算符的用法
- Matlab与MySQL:极具价值的组合(matlab与mysql)