ICA独立成分分析—FastICA基于负熵最大

1. 概念

官方解释:利用统计原理进行计算的方法,是一种线性变换。

 ICA分为基于信息论准则的迭代算法和基于统计学的代数方法两大类,如FastICA算法,Infomax算法,最大似然估计算法等。

这里主要讨论FastICA算法。

先来看ICA和PCA的区别:PCA是降维并提取不相关属性,而ICA是降维并提取相互独立的属性(不相关不一定独立,独立一定不相关。不相关是指没有线性关系,独立是指没有任何关系)。PCA是提取出最能表示原始事物的特征,而ICA是使每个分量最大化独立,便于发现隐藏因素。

PCA的适用环境是数据为高斯分布时。而ICA不适用于高斯分布的数据。

ICA的两条假设:

① 源信号之间互相独立

② 每一个源信号为非高斯分布

【更新日志:2019-12-27】

为什么原信号为非高斯分布,戳这里

http://cis.legacy.ics.tkk.fi/aapo/papers/IJCNN99_tutorialweb/node9.html

混合信号源的三个特性:

①独立性(Independence):源信号相互独立,但是混合的信号却不是,因为混合信号共享了源信号。

②正态化(Normality):根据中心极限定理,具有有限方差的独立随机变量的和的分布倾向于高斯分布;宽松点说就是,两个独立随机变量的和比原始的独立随机变量中的任何一个更加接近高斯分布。这里我们考虑的每一个信号源都是独立随机变量。

③复杂度(Complexity):任何混合信号的时间复杂性都比构成它的最简单的信号源复杂。

其实这几点就告诉我们ICA的动机:如果组成混合信号的信号是独立的,或者具有非高斯直方图,或者较低复杂度,那么他们一定是信号源。

2. 白化

为了便于计算,需要先进行数据预处理

对数据进行白化或球化处理去除各观测信号之间的相关性,简化后续独立分量的提取过程,且算法的收敛性较好。

白化向量:若一零均值的随机向量Z=(Z1,Z2,…ZM)T满足E{ZZT}=I,其中I是单位矩阵。白化的本质是去相关,同PCA的目标是一样的。称源信号S(t)为白色的是因为对于零均值的独立源信号S(t)=[S1(t),….,SN(t)]T,有E{Si Sj}=E{Si}E{Sj}=0(i≠j)且协方差矩阵是单位阵,cov(S)=I。

对于观测信号X(t),找到线性变换W0,使X(t)投影到新的子空间后变成白化向量,即Z(t)=W0X(t),

其中W0为白化矩阵,Z为白化向量

利用主成分分析能得到

               W0=Λ-1/2UT

其中U和Λ分别代表协方差矩阵CX的特征向量矩阵和特征值矩阵。

因此协方差矩阵:

E{ZZT}=E{Λ-1/2UTXXTUΛ-1/2}=Λ-1/2UTE{XXT}UΛ-1/2=Λ-1/2ΛΛ-1/2=I

将X(t)=AS(t)式代入Z(t)=W0X(t),且令W0A=A~,有

Z(t)=W0AS(t)=A~S(t)

多维情况下,混合矩阵A是N*N的,白化后的新的混合矩阵A~是正交矩阵,自由度降为N*(N-1)/2,所以说白化使得ICA问题的工作量几乎减少了一半。

用PCA对观测信号进行白化的预处理使原来所求的解混合矩阵退化成一个正交阵,减少了ICA的工作量,当观测信号的个数大于源信号个数时,经过PCA降维也就是白化可以自动将观测信号的数目降到与源信号数目维数相同。

 3. FastICA算法

FastICA算法也叫固定点算法(Fixed-Point)算法,是一种快速寻优迭代算法,采用批处理的方式,每一步迭代由大量的样本数据参与运算。

FastICA由基于峭度,基于似然最大,基于负熵最大等形式。这里介绍基于负熵最大的FastICA算法。

负熵的判决准则:由信息论理论可知,在所有等方差的随机变量中,高斯变量的熵最大,所以可以利用熵来度量非高斯性,采用熵的修正形式,负熵。根据中心极限定理,若一个随机变量X由许多相互独立的随机变量Si(i=1,2,3….,N)之和组成,只要Si具有有限的均值和方差,则不论其为何种分布,随机变量X较Si更接近高斯分布。所以当高斯性度量达到最大的时候,说明完成各独立成分的分离。

负熵的定义

Ng(Y)=H(YGauss)-H(Y)

其中YGauss是与Y具有相同方差的高斯随机变量。H(.)为随机变量的微分熵。

 

根据信息理论,在具有相同方差的随机变量中,高斯分布的随机变量具有最大的微分熵。当Y具有高斯分布时,Ng(Y)=0;Y的非高斯性越强,其微分熵越小,Ng(Y)的值越大,所以Ng(Y)可以作为随机变量Y非高斯性的测度。采用负熵定义求解需要知道Y的概率密度分布函数,但是实际不可能,于是采用下面的近似公式:

Ng(Y)={E[g(Y)]-E[g(YGauss)]}²

其中E[.]为均值运算,g(.)为非线性函数,可取g1(y)=tanh(a1y)或g2(y)=y exp(-y2/2)或g3(y)=y3等非线性函数,这里1≤a1≤2,通常取a1=1

快速ICA的规则就是找到一个方向以便WTX(Y=WTX)具有最大的非高斯性,非高斯性用Ng(Y)={E[g(Y)]-E[g(YGauss)]}²给出的负熵的近似值来度量。WTX的方差约束为1,对于白化数据,等于约束W的范数为1.

FastICA的推导

① WTX的负熵的最大近似值能通过对E{G(WTX)}进行优化取得。在E{( WTX)²}=||W||²=1的约束下,E{G(WTX)}的最优值能在满足下式的点上获得

E{Xg(WTX)}+βW=0

其中β=E{W0TXg(WTX)} 是一个恒定值,W0是优化后的W值。

②利用牛顿迭代法解①的方程。用F表示左边的函数,得到F的雅克比矩阵JF(W)如下:

JF(W)=E{XXTg’(WTX)}-βI   可以近似为第一项,即忽略βI

由于数据被球化,所以E{XXT}=I,所以E{XXTg’(WTX)}≈E{XXT}*E{g’(WTX)}=E{g’(WTX)}I。

从而雅克比矩阵变成了对角阵,并且比较容易求逆。因而得到下面的近似牛顿迭代公式:

 

这里的W*是W的新值,β= E{WTXg(WTX)},规格化能提高稳定性。

简化后得到FastICA的迭代公式:

 

实践中,FastICA算法中用的期望必须用他们的估计值代替。最好的估计是相应的样本平均。理想情况下,所有的有效数据都应该参与计算,但是会降低运算速度,所以通常选取一部分样本的平均来估计,样本数目的多少对最后估计的精确度有很大影响。迭代中的样本点应该分别选取,加入收敛不理想,可以增加样本数量。

FastICA算法的步骤:

1.      对观测数据X进行中心化,使它的均值为0

2.      对数据进行白化,X→Z

3.      选择需要估计的分量的个数m,设迭代次数p←1

4.      选择一个初始权矢量(随机的)Wp。

5.      令Wp=E{Zg(WTZ)}-E{g’(WTZ)}W,非线性函数g,可取g1(y)=tanh(a1y)或g2(y)=y exp(-y2/2)或g3(y)=y3等非线性函数

   6.

 

7.令Wp=Wp/||Wp||。

8. 假如Wp不收敛的话,返回第五步

9. 令p=p+1,如果p≤m,返回第四步

ICA.m

 

function Z = ICA( X )%去均值
[M,T]=size(X);   %获取输入矩阵的行列数,行数为观测数据的数目,列数为采样点数
average=mean(X')';  %均值
for i=1:MX(i,:)=X(i,:)-average(i)*ones(1,T);
end%白化/球化
Cx=cov(X',1);  %计算协方差矩阵Cx
[eigvector,eigvalue]=eig(Cx);   %计算Cx的特征值和特征向量
W=eigvalue^(-1/2)*eigvector';   %白化矩阵
Z=W*X;    %正交矩阵%迭代
Maxcount=10000;  %最大迭代次数
Critical=0.00001;  %判断是否收敛
m=M;
W=rand(m);
for n=1:mWP=W(:,n);  %初始权矢量(任意)%Y=WP'*Z;%G=Y.^3;%G为非线性函数,可取y^3等%GG=3*Y.^2;   %G的导数count=0;LastWP=zeros(m,1);W(:,n)=W(:,n)/norm(W(:,n));while abs(WP-LastWP)&abs(WP+LastWP)>Criticalcount=count+1;  %迭代次数LastWP=WP;      %上次迭代的值%WP=1/T*Z*((LastWP'*Z).^3)'-3*LastWP;for i=1:mWP(i)=mean(Z(i,:).*(tanh((LastWP)'*Z)))-(mean(1-(tanh((LastWP))'*Z).^2)).*LastWP(i);endWPP=zeros(m,1);for j=1:n-1WPP=WPP+(WP'*W(:,j))*W(:,j);endWP=WP-WPP;WP=WP/(norm(WP));if count==Maxcountfprintf('未找到相应的信号');return;endendW(:,n)=WP;
end
Z=W'*Z;
end

 

ICATest.m

 

clear all;
clc;
N=200;
n=1:N;%N为采样本数
s1=2*sin(0.02*pi*n);  %正弦信号
t=1:N;
s2=2*square(100*t,50);  %方波信号
a=linspace(1,-1,25);
s3=2*[a,a,a,a,a,a,a,a];%锯齿信号
s4=rand(1,N);   %随机噪声
S=[s1;s2;s3;s4];   %信号组成4*N
A=rand(4,4);
X=A*S;  %观察信号%源信号波形图
figure(1);
subplot(4,1,1);plot(s1);axis([0 N -5,5]);title('源信号');
subplot(4,1,2);plot(s2);axis([0 N -5,5]);
subplot(4,1,3);plot(s3);axis([0 N -5,5]);
subplot(4,1,4);plot(s4);xlabel('Time/ms');
%观察信号(混合信号)波形图
figure(2);
subplot(4,1,1);plot(X(1,:));title('观察信号(混合信号)');
subplot(4,1,2);plot(X(2,:));
subplot(4,1,3);plot(X(3,:));
subplot(4,1,4);plot(X(4,:));Z=ICA(X);figure(3);
subplot(4,1,1);plot(Z(1,:));title('分离信号');
subplot(4,1,2);plot(Z(2,:));
subplot(4,1,3);plot(Z(3,:));
subplot(4,1,4);plot(Z(4,:));
plot(Z(4,:));
xlabel('Time/ms');


结果

 

 

 

参考文献:

http://www.cnblogs.com/tornadomeet/archive/2012/12/30/2839841.html

http://wenku.baidu.com/link?url=2gqaP9JugoT41p-9yvDRsZe6easW_NSNjhIakgt9lAR74GiYfZ2-lXBDu57DAYe8U8FZN5Q9uhBeO2icr32KfYuDER6IzruR9rh6smmY7gW

https://en.wikipedia.org/wiki/Independent_component_analysis

http://cs229.stanford.edu/notes/cs229-notes11.pdf

本文已经同步到微信公众号中,公众号与本博客将持续同步更新运动捕捉、机器学习、深度学习、计算机视觉算法,敬请关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tensorboard的可视化及模型可视化

待整理 How to Check-Point Deep Learning Models in Keras LossWise Tensorboard 中文社区 谷歌发布TensorBoard API,让你自定义机器学习中的可视化 查找tensorflow安装的位置 pip show tensorflow-gpu Name: tensorflow-gpu Version: 1.0.1 Summary: TensorFl…

隐马尔科夫模型——简介

1. 前言 学习了概率有向图模型和概率无向图模型,回头再看了一下隐马尔可夫模型(hidden Markov model,HMM)。 HMM属于树状有向概率图模型,主要用于对时序数据的建模,它的潜在变量是离散的;而另一种状态空间模型&…

训练的神经网络不工作?一文带你跨过这37个坑

近日,Slav Ivanov 在 Medium 上发表了一篇题为《37 Reasons why your Neural Network is not working》的文章,从四个方面(数据集、数据归一化/增强、实现、训练),对自己长久以来的神经网络调试经验做了 37…

HMM——前向算法与后向算法

1. 前言 前向算法和后向算法主要还是针对HMM三大问题之一的评估问题的计算,即给定模型参数,计算观察序列的概率。文章不介绍过多公式,主要看两个例子 复习一下HMM的三大要素(以海藻(可观测)和天气&#x…

HMM——维特比算法(Viterbi algorithm)

1. 前言 维特比算法针对HMM第三个问题,即解码或者预测问题,寻找最可能的隐藏状态序列: 对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列。 也就是说给定了HMM的模型参数和一个观测…

HMM——前向后向算法

1. 前言 解决HMM的第二个问题:学习问题, 已知观测序列,需要估计模型参数,使得在该模型下观测序列 P(观测序列 | 模型参数)最大,用的是极大似然估计方法估计参数。 根据已知观测序列和对应的状态序列,或者说…

Web安全(吴翰清)

安全工程师的核心竞争力不在于他能拥有多少个 0day,掌握多少种安全技术,而是在于他对安全理解的深度,以及由此引申的看待安全问题的角度和高度。 第一篇 我的安全世界观 脚本小子 “Script Kids”。 黑客精神所代表的 Open、Free、Share。…

机器学习两种方法——监督学习和无监督学习(通俗理解)

前言 机器学习分为:监督学习,无监督学习,半监督学习(也可以用hinton所说的强化学习)等。 在这里,主要理解一下监督学习和无监督学习。 监督学习(supervised learning) 从给定的训…

Tensorflow中padding的两种类型SAME和VALID

边界补充问题 原始图片尺寸为7*7,卷积核的大小为3*3,当卷积核沿着图片滑动后只能滑动出一个5*5的图片出来,这就造成了卷积后的图片和卷积前的图片尺寸不一致,这显然不是我们想要的结果,所以为了避免这种情况&#xff…

机器学习两种距离——欧式距离和马氏距离

我们熟悉的欧氏距离虽然很有用,但也有明显的缺点。它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求。例如,在教育研究中,经常遇到对人的分析和判别,个体的…

最小二乘法深入

上次写了一个一次函数yaxb类型的最小二乘法,即可以看做是n维输入列向量对应的一个n维输出列向量,然后对已知结果进行学习,得到拟合公式。这里对m*n的矩阵进行最小二乘法分析。 设模型的输出为和训练集输出,它们之间的平方误差为&…

ubuntu16.04 制作gif

byzanz安装 sudo apt-get install byzanz byzanz-record #录像byzanz-playback #回放 下载完成后打开命令行输入byzanz-record –help 其中我们重点关注几个参数 * -d 动画录制的时间,默认录制10秒 * -e 动画开始延迟 * -x 录制区域的起始X坐标 * -y 录制区域的起始Y坐标 …

典型关联分析CCA(canonical correlation analysis)

先看两个数学概念: 相关系数(参看百度百科) 相关系数是用以反映变量之间相关关系密切程度的统计指标。相关系数是按积差方法计算,同样以两变量与各自平均值的离差为基础,通过两个离差相乘来反映两变量之间相关程度 相…

Kullback–Leibler divergence(相对熵,KL距离,KL散度)

1 前言 注意两个名词的区别: 相对熵:Kullback–Leibler divergence 交叉熵:cross entropy KL距离的几个用途: ① 衡量两个概率分布的差异。 ② 衡量利用概率分布Q 拟合概率分布P 时的能量损耗,也就是说拟合以后丢失…

李宏毅机器学习课程11~~~为何要深?

为何要“深”? pluskid的博客 Deep Learning and Shallow Learning Bengio Y. Learning deep architectures for AI. Foundations and trends in Machine Learning, 2009 Deeper is Better? 模型有更多的参数会有更好的结果,这是毋庸置疑的。 深瘦的模…

没事随便写写——matlab图像与矩阵的转换与存储为txt文件

<span style"font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">刚开课&#xff0c;上了一节计算机图像处理&#xff0c;想了一下把图像转换成矩阵表示&#xff0c;然后存储到txt文档中去。图片用的 lena.jpg</span> …

李宏毅机器学习课程12~~~半监督学习

Semi-supervised Learning The distribution of the unlabeled data tell us something. Usually with some assumptions. Semi-Supervised Generative Model 对比学习见 李宏毅机器学习课程&#xff14;~~~分类&#xff1a;概率生成模型 EM算法思路来最大化似然函数。 Self-tr…

Python程序设计—车万翔

程序设计入门—Python 对象和类型 五种基本对象类型 字符串 &#xff08;string&#xff09;&#xff0c;简记为 str 使用 ’ ’ 或 ” ” 括起来的一系列字符 整数&#xff08;integer&#xff09;&#xff0c;简记为 int 十进制&#xff1a;21&#xff0c;八进制&#xf…

【重大修改】动态时间规整(Dynamic Time Warping)

本文只是简单的介绍DTW算法的目的和实现。具体的DTW可以参考一下文献&#xff1a; 离散序列的一致性度量方法&#xff1a;动态时间规整&#xff08;DTW&#xff09; http://blog.csdn.net/liyuefeilong/article/details/45748399 动态时间归整/规整/弯曲(Dynamic time warpi…

从机器学习谈起

很好的一篇文章&#xff0c;转载自博客园&#xff1a;http://www.cnblogs.com/subconscious/p/4107357.html 在本篇文章中&#xff0c;我将对机器学习做个概要的介绍。本文的目的是能让即便完全不了解机器学习的人也能了解机器学习&#xff0c;并且上手相关的实践。这篇文档也算…