独立成分分析(Independent Components Analysis)「建议收藏」

独立成分分析(Independent Components Analysis)「建议收藏」首先我们对ICA算法做一些形式化的描述:ICA是用来分离混合源的技术。所以我们准备先混合,再分离,我们定义两个独立的源,上面的称为A,下面的称为B,代码如下: 1然后我们将其线性混合,上面的为A-2*B下面的为1.73*A+3.41*B2之后使用fastica函数,就将两个源分开了:3完整的工程在这里下载:http://research.ics.aalto.fi

大家好,又见面了,我是你们的朋友全栈君。

首先我们对ICA算法做一些形式化的描述:

ICA是用来分离混合源的技术。所以我们准备先混合,再分离,我们定义两个独立的源,上面的称为A,下面的称为B,代码如下:

 

A = sin(linspace(0,50, 1000));   % A
B = sin(linspace(0,37, 1000)+5); % B
figure; 
subplot(2,1,1); plot(A);         % plot A
subplot(2,1,2); plot(B, 'r');    % plot B

M1 = A - 2*B;                  % mixing 1
M2 = 1.73*A+3.41*B;            % mixing 2
figure;
subplot(2,1,1); plot(M1);      % plot mixing 1
subplot(2,1,2); plot(M2, 'r'); % plot mixing 2

figure;
c = fastica([M1;M2]);              % compute and plot unminxing using fastICA	
subplot(1,2,1); plot(c(1,:));
subplot(1,2,2); plot(c(2,:));

独立成分分析(Independent Components Analysis)「建议收藏」

然后我们将其线性混合,上面的为A – 2*B下面的为1.73*A+3.41*B

独立成分分析(Independent Components Analysis)「建议收藏」

之后使用fastica函数,就将两个源分开了:

独立成分分析(Independent Components Analysis)「建议收藏」

完整的工程在这里下载:http://research.ics.aalto.fi/ica/fastica/code/dlcode.html

当然,在真正使用ICA算法之前,通常要白噪声化数据,意思是删除掉数据中所有的相关性。一个几何的解释是,恢复数据最初的形状,然后ICA只是旋转结果矩阵(如下图),混合两个随机的源A和B,A是数据的横坐标,B是数据的纵坐标:

独立成分分析(Independent Components Analysis)「建议收藏」

混合A和B

独立成分分析(Independent Components Analysis)「建议收藏」

白噪声化:

独立成分分析(Independent Components Analysis)「建议收藏」

现在每一个坐标轴上的方差都相等,数据在每一个坐标轴上的映射的相关系数为0,意味着协方差矩阵是对角矩阵,而且每一个值都相等。然后应用ICA算法将这些表达旋转到原始的A和B的坐标轴空间。然后通过最小化数据映射到每个坐标轴上的高斯性来实现旋转:

独立成分分析(Independent Components Analysis)「建议收藏」

可以看出之前每个坐标轴都展现了很好的高斯性,旋转后高斯性最小:

独立成分分析(Independent Components Analysis)「建议收藏」

代码如下:

POINTS = 1000; % number of points to plot

% define the two random variables
% -------------------------------
for i=1:POINTS
	A(i) = round(rand*99)-50;              % A
	B(i) = round(rand*99)-50;              % B
end;
figure; plot(A,B, '.');                        % plot the variables
set(gca, 'xlim', [-80 80], 'ylim', [-80 80]);  % redefines limits of the graph

% mix linearly these two variables
% --------------------------------
M1 = 0.54*A - 0.84*B;                          % mixing 1
M2 = 0.42*A + 0.27*B;                          % mixing 2
figure; plot(M1,M2, '.');                      % plot the mixing
set(gca, 'ylim', get(gca, 'xlim'));            % redefines limits of the graph

% withen the data
% ---------------
x = [M1;M2];
c=cov(x')		 % covariance
sq=inv(sqrtm(c));        % inverse of square root
mx=mean(x');             % mean
xx=x-mx'*ones(1,POINTS); % subtract the mean
xx=2*sq*xx;              
cov(xx')                 % the covariance is now a diagonal matrix
figure; plot(xx(1,:), xx(2,:), '.');

% show projections
% ----------------
figure; 
axes('position', [0.2 0.2 0.8 0.8]); plot(xx(1,:), xx(2,:), '.'); hold on;
axes('position', [0   0.2 0.2 0.8]); hist(xx(1,:));  set(gca, 'view', [90 90]);
axes('position', [0.2 0   0.8 0.2]); hist(xx(2,:));

% show projections
% ----------------
figure; 
axes('position', [0.2 0.2 0.8 0.8]); plot(A,B, '.'); hold on;
axes('position', [0   0.2 0.2 0.8]); hist(A);  set(gca, 'view', [90 90]);
axes('position', [0.2 0   0.8 0.2]); hist(B);

ICA算法有两个主要的应用问题,一个是股票市场的回报,一个是鸡尾酒晚会问题。

先看一个例子,四个信号的四个线性组合:

独立成分分析(Independent Components Analysis)「建议收藏」

接下来是主成分分析的结果:

独立成分分析(Independent Components Analysis)「建议收藏」

独立成分分析的结果:

独立成分分析(Independent Components Analysis)「建议收藏」

ICA的流程:

首先,假设存在独立的源:独立成分分析(Independent Components Analysis)「建议收藏」

然后只观察他们的线性组合:独立成分分析(Independent Components Analysis)「建议收藏」

但是A和S都是未知的,A被称为混合矩阵

我们的目标是从Y(t)中恢复出原始的信号S(t),寻找一个矩阵L,为A的逆,有LY(t) = S(t)。

之后,摆脱掉相关性:白噪声化,应用一个线性变化N来取消掉相关性,同时规约化信号:(NY)TNY= I. 令Z = NY。当然,白噪声化变换并不是唯一的,其条件为:WTW = I → (WZ)T(WZ) = ZT(WTW)Z = ZTZ = I,主成分是白噪声信号的一个资源。

然后,解决高阶的依赖。找到一个旋转W使白噪声信号独立,也就是WZ的列相互独立。优化问题是独立成分分析(Independent Components Analysis)「建议收藏」,其中dep(M)衡量M的列的依赖性,当然WTW = I。

1.      非线性的去相关

通过白噪声化已经去相关:E[u v] = E[u] E[v],所以E[g(u) h(v)] = E[g(u)] E[h(v)],这些函数的性能取决于数据分布的迹的形状。dep(M)是E[ĝ ĥ]和E[ĝ] E[ĥ]的差。

2.      非高斯性

Y = AS,其中S的列是独立的,但是根据中心极限定理,他们加起来会表现出高斯性,而不混合的信号高斯性很低。

3.      非高斯性的衡量:峰态(Kurtosis)

独立成分分析(Independent Components Analysis)「建议收藏」

当然还有以极大似然角度解读ICA算法的:

1.      Y = As  B = A-1

独立成分分析(Independent Components Analysis)「建议收藏」

2.      寻找B最大化Y的似然性

3.      首先要有一个P的分布函数,通常使用sigmoid函数

独立成分分析(Independent Components Analysis)「建议收藏」

独立成分分析(Independent Components Analysis)「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145821.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • leetcode-172. 阶乘后的零[通俗易懂]

    leetcode-172. 阶乘后的零[通俗易懂]给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) 。class Solution {public: int trailingZeroes(int n) { int ans = 0; for(int i = 5;i <= n;i += 5){

    2022年8月9日
    6
  • 3dreshaper_3d曲面屏幕是什么意思

    3dreshaper_3d曲面屏幕是什么意思效果图源代码varimg=newImage();varcanvas=document.createElement(‘canvas’);varctx=canvas.getContext(‘2d’);img.onload=function(){varwidth=canvas.width=img.width;varheight=…

    2022年10月15日
    3
  • mvdr波束 matlab,mvdr波束形成matlab[通俗易懂]

    mvdr波束 matlab,mvdr波束形成matlab[通俗易懂]信息与通信工程学院阵列信号处理实验报告(自适应波束形成Matlab仿真)…同时研究了窄带信号的自适应波束形成的经典算法。研究并仿真了基于最小均方误差准则的LMS算法、RLS算法和MVDR自适应算法,并且做了一些比较。关键词:数字……MVDR算法matlab程序_计算机软件及应用_IT/计算机_专业资料。clc…根据期望信号的导向矢量,可以采取MVDR算法…

    2022年6月22日
    28
  • 前端低代码调研与总结

    近些年来,低代码的概念逐渐流行了起来,而低代码产品也越来越多的出现在我们的身边。低代码可以叫做可视化搭建,或者叫效能工具等等。像国外的Mendix,国内的宜搭、苍穹、简道云、amis等等。基于这种新型的开发方式,图形化的拖拉拽配置界面,并兼容了自定义的组件、代码扩展,确实在B端后台管理类网站建设中很大程度上的提升了效率。低代码平台能够高效且便捷,成本又低。就应用领域来讲已经很广泛了,例如营销领域,各种页面生产工具,非冰,乐高,宜搭,鲁班。还有电商类的公司都会给商家提供一个类似店铺装修的工具,小程序生产工具

    2022年4月13日
    50
  • 5G融合通信_网关正在获取怎么解决

    5G融合通信_网关正在获取怎么解决随着物联网5G商用步伐的加速和5G网络建设的突飞猛进,2020年无疑成为5G向千行百业拓展落地的关键之年。作为“新基建”的领头羊,5G已凝聚产业链力量,蓄势待发为行业的智能化和数字化转型赋能,为新一轮经济增长提速。GrassRouter作为5G技术在超高清视频传输领域应用的领先代表,于今年推出了最新一代5G高速物联网B4G+5G聚合路由器,可支持构建点对点安全传输链路,支持移动/联通/电信混用,实现多达7条2G/3G/4G/5G/有线传输链路聚合,成为5G应用落地的重点项目之一。5G要全面覆盖还

    2022年10月3日
    5
  • Caused by: java.lang.NoClassDefFoundError: freemarker/cache/TemplateLoader

    Caused by: java.lang.NoClassDefFoundError: freemarker/cache/TemplateLoader

    2021年11月23日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号