独立成分分析(ICA)

独立成分分析(ICA)1.概念独立成分分析是从多元(多维)统计数据中寻找潜在因子或成分的一种方法.ICA与其它的方法重要的区别在于,它寻找满足统计独立和非高斯的成分。这里我们简要介绍ICA的基本概念、应用和估计原理。1.1 多元数据的线性表示统计数据处理及相关领域中的一个重要和需要长期研究的问题就…

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

1.概念

独立成分分析是从多元(多维)统计数据中寻找潜在因子或成分的一种方法.ICA与其它的方法重要的区别在于,它寻找满足统计独立和非高斯的成分。这里我们简要介绍ICA的基本概念、应用和估计原理。

1.1 多元数据的线性表示

统计数据处理及相关领域中的一个重要和需要长期研究的问题就是,寻找多元数
据一个恰当的表示,使得人们可以获得给定数据的本质特征或者使得数据的结构可视化。

在神经计算领域中,这个基本问题也就是非监督学习(unsupervised learning)问题,因为这种表示是从数据本身学习得来的,即给定某个数据集作为神经网络的输入,在没有导师的情况下,通过神经网络学习得到数据的本质特征.这种数据表示问题是数据挖掘、特征提取和信号处理的核心问题。

为了更为清楚的说明这个问题,假设我们已经获得了m维的观测数据集xi(t),其中{i=1,…,m及t=1,…,T,这里t表示观测样本点的个数,m和t的数目可以非常之大.我们可以提出这样一个问题:通过怎样的一个映射,使得m维数据空间变换到另一个n维数据空间,使得变换后的变量能够揭示观测数据的某些信息,而这些信息是隐藏在原始的大规模数据中的.变换后的变量就是所谓的“因子”或者是“成分”,能够描述数据的本质特征.

在绝大多数的例子中,我们仅考虑线性变换,这样不仅使表示的解释简单,计算上也简单易行.这样,每一个成分yi可以表示为观测变量的线性组合:

独立成分分析(ICA)

其中Wij(i=1,…,n,j=1,…,m)是某些常系数,这些系数就定义了这个线性表示.因此可以看出,为了得到数据yi的线性表示,必须求出未知系数Wij.简单起见,这种数据的表示可写成矩阵的形式:

独立成分分析(ICA)

在统计的框架下,问题转化为通过成分yi的某些统计特性来求解系数矩阵W。

选择矩阵W的一个统计原理是限制成分yi的个数相当之少,也许只有1或2,寻找矩阵W以便成分尽可能的包含原始数据的信息.这导致统计技术如
主成分分析(principal component analysis,PCA)
因子分析(factor analysis,FA)的出现,它们是进行统计数据处理、特征提取、数据压缩等比较经典的技术。
寻找矩阵W的另一个统计原理是统计独立性:假设成分yi之间是统计独立的.这意味着其中一个成分没有受到另一个成分的任何影响,成分之间没有任何信息传递.在因子分析中,经常声称因子之间是统计独立的,这个说法只是部分正确,因为因子分析假设因子是服从高斯分布的,找到独立的方法相当容易(对于高斯分布的成分来说,不相关与独立是等价的)。

而在现实世界中,
数据通常并不服从高斯分布,假设成分服从高斯分布的方法在这种情况下是失效的.例如,许多真实世界的数据集是服从超高斯分布的(supergaussian).这意味着随机变量更经常的在零附近取值,与相同方差的高斯密度相比,超高斯分布在零点更尖!

事实上,存在度量随机变量y非高斯性的一个测度,峰度是度量非高斯性的一个比较传统的方法.y的蜂度kurt(y)在统计学上是用四阶统计量来表示的:

独立成分分析(ICA)

这个表达式可以进一步简化,假设随机变量的方差为单位方差,E{y^2}=1,则上述表达式就可以表示为:

独立成分分析(ICA)

通常在信号处理领域有如下约定:峰度值为正值的随机变量称为超高斯分布的随机变量(super-gaussian);峰度值为负值的随机变量称为亚高斯分布的随机变量(sub-gaussian);而高斯分布的随机变量的峰度值为零。形象的说,服从超高斯分布的随机变量比高斯分布更尖(spiky),拉普拉斯分布(Laplacian distribution)就是一

个典型的超高斯分布密度函数;服从贬高斯分布的随机变量比高斯分布更平(filat),均匀分布(Uniform distribution)就是一个典型的亚高斯分布密度函数。

独立成分分析(ICA)

2.盲源分离

2.1 未知信号的观测混合

考虑这样一种情况,由某些物体或源发出的一组信号,这些源可能包括,例如,发出电信号的不同脑区;在一个房间说话的几个人,发出语音信号;发出雷达信号的移动电话,等等.进一步假设有几个传感器或接收器,这些传感器放置在不同的位置上,这样,每个传感器纪录的是源信号带有不同权重的混合.前面所说的鸡尾酒会问题就符合这样的情况。

举一个具体的例子来说明盲源分离问题.用s1(t),s2(t)和s3(t)表示三个源信号,分别表示在t时刻的幅度,用x1(t),x2(t)和x3(t)表示三个观测信号.x(t)是s(t)的权重和:

独立成分分析(ICA)

其中常系数aij(i,j∈{1,2,3})表示混合权重,与源信号和传感器的距离有关.这些混合系数是未知的,既然我们在一般情况下很难知道混合系统的性质.源信号也是未知的,因为我们不能直接记录它们。

独立成分分析(ICA)

作为解释,见上图所示的波形.它们是某些源信号的线性混合。它们看上去完全是一些噪声信号,实际上,有些具有结构的源信号隐藏在这些观测信号中

我们想要做的就是从混合信号x1(t),x2(t)和x3(t)中找到源信号,这就是盲源分离问题(blind source separation,BSS).盲指的是源信号未知,混合系统未知(混合系数未知)

为了使问题简单化,假设由未知系数aij(i,j∈{1,2,3))所构成的系数矩阵是可逆的。则由它的逆矩阵w=(wij) 3×3可得到未知的源信号:

独立成分分析(ICA)

比较有趣的是,假设源信号之间是相互统计独立的,用独立成分分析就可以解决这个问题。 

2.2 基于独立的源分离

现在我们的问题是:如何估计如上方程中的系数wij?我们想要获得一般的方法,事实上,又回到刚开始的问题,即寻找多维数据的好的表示。因此,我们使用非常一般的统计性质.我们所得到的是混合信号值,需要找到矩阵W,使得表示由源信号si给出。

这个问题的一个令人感到吃惊的解是考虑信号的统计独立性。事实上,如果信号是非高斯的,我们可以决定系数wij以便信号:

独立成分分析(ICA)

是统计独立的。如果信号yl,y2和y3是独立的,则可认为它们就是所要求的源信号sl,s2和s3。
利用统计独立性这一信息,我们可以估计系数矩阵w.对于上图所示的观测信号,用ICA算法估计系数矩阵w,所得到的源信号如下图所示。这些用算法所估计出的信号实际上就是创建混合信号的源信号。

独立成分分析(ICA)

3.独立成分分析模型

我们首先给出标准的(即源信号的个数等于混合信号的个数)无噪声独立成分分析的线性模型.标准的线性独立成分分析模型的矩阵形式为X=AS;

其中随机向量X=(x1,x2,…,xn)表示观测数据或观测信号(observed data),随机向量S=(s1,s2,…,sn)表示源信号,称为独立成分(independent components),A称为nxn的混合矩阵(mixing matrix),在该模型中,X表示的是一个随机向量,x(t)表示随机向量X的一个样本.假设源信号是相互统计独立的。

这就是标准的独立成分分析模型,可以看作是一个生成模型(generativemodel),它的意思是说观测信号是通过源信号混合而生成的,在这个意义下,独立成分也称为隐含或潜在交量(hidden/latent , nariable ),也就是说这些独立成分是无法直接观测到的,另一方面,混合系数矩阵A也是未知的.独立成分分析的任务就是:在只知道观测信号X的T个样本x(1),…,x(T),且在源信号S和混合矩阵A未知的条件下,假设源信号si(0=1,…,n)之间是相互统计独立的,来求解混合矩阵A和源信号s

3.1 独立成分分析的假设条件

为了实现独立成分分析,必须给出几个假设条件:

a.各个成分之间是相互统计独立的.

这是独立成分分析的一个基本原则.比较有趣的是假设统计独立这个原则,就可以实现ICA模型的估计。这也是独立成分分析可以广泛应用在许多领域的一个重要原因.直观的说,如果任意的随机变量序列y1,y2,…,yn之间是相互统计独立的,则这就意味着从随机变量yi(i=1,…,n)的信息中不能得到随机变量yj(i≠j)的任何信息。随机变量之间的统计独立性可以通过概率密度函数来精确的刻画。如果用p(y1,…,yn)表示yi(0=1,…,n)的联合概率密度函数(joint probability density function),用pi(yi)表示随机变量yi(1=1,…,n)的边际概率密度

函数(marginal probability density function),那么我们说yi(i=1,…,他)是相互统计独立的,如果满足:

独立成分分析(ICA)

b.独立成分是服从非高斯分布的
直观的说,高斯信息太过于“简单”,真正有意义的信息是服从非高斯分布的信息。高斯随机变量的高阶累积量为零,而对于独立成分分析而言,高阶信息是实现独立成分分析的本质因素,这也是独立成分分析和其它数据处理方法诸如主成分分析和因子分析的本质区别.况且,真实世界的许多数据是服从非高斯分布的.事实
上,标准的独立成分分析也可以考虑为非高斯因子分析(nongaussian factor analysis)。Comon,Hyviirinen详细说明了独立成分必须是非高斯的原因,一般的,在标准的独立成分分析中最多只允许有一个成分服从高斯分布如果独立成分中有两个以上的高斯成分,用标准的独立成分分析来处理这样的数据是不可能的。标准的独立成分分析只挖掘数据的非高斯结构,在某些思想上与投影寻踪(projection pursuit)相似,如果需要进一步挖掘数据的其它信息,应发展新的思想来解决更为复杂的情况.有一些学者致力于这方面的研究,例如利用数据或信号的时间结构和相关的信息来完成这样的任务。
c.假设混合矩阵是方阵
事实上,对于标准的独立成分分析而言,还有一个假设就是混合矩阵为方阵.也就是说,独立成分的个数等于观测混合信号的个数,进一步假设混合矩阵A是可逆的,这可以使得计算简单化,求混合矩阵A就等价于求它的逆矩阵w,则源信号就可以很容易的得到:S=(W-1)X。
对于标准的独立成分分析而言,当给定上述的三个条件时,独立成分分析就是可实现的,也就是说混合矩阵和独立成分是可以求解的。

3.2 独立成分分析无法确定的因素

从独立成分分析的模型可以看出下列因素是很难确定的:

a.不能确定独立成分的方差、能量

事实上,原因是很明显的,由于混合矩阵和独立成分都是未知的,如果对独立成分乘上某个标量ai≠0,或同时对混合矩阵相应的除以一个相同的标量,则不影响混合信号的值。

因此,在独立成分分析算法中,可以固定独立成分的方差,由于独立成分是随机变量,则最自然的方法就是假设独立成分具有单位方差。

b.不能确定独立成分的顺序

在独立成分分析的绝大多数应用中,这两个不确定性并不是十分重要的,用ICA算法所得到的解能够满足相当多的实际应用,所得到的源信号的幅度和排序对于通常所考虑的问题影响不大.所以我们可以说独立成分分析所求得的解
是波形保持解.在某些特殊的应用中,我们需要确定输出成分的顺序,可以通过某些统计量的大小来规定输出独立成分的顺序,这样的规定,使得这个问题转化为一个具有某些约束的问题,即标准的ICA问题转化为约束ICA问题。

3.3数据的中心化

不失一般性,我们可以假设混合变量和独立成分是零均值的.这个假设在相当程度上简化了算法,如无特殊说明,假设混合变量和独立成分都是零均值的.

如果零均值并不成立,我们可以通过预处理来达到这个条件.一般的,我们使用中心化观测变量这一技术,即减去样本均值

3.4 不相关和白化

独立和不相关(uncorrelated)是紧密相关的概念,因此,可以设想使用估计不相关变量的方法来同样估计独立成分,这样的典型方法为白化(whitening)或球化(sphering),通常由主成分分析(principal component analysis)来进行.但用这样的方法来估计独立成分通常是不可行的,一般的,白化是以独立成分分析的预处理技术身份出现的。

不相关是独立的较弱形式,两个随机变量y1,y2是不相关的,那么它们的协方差是零:

独立成分分析(ICA)

如果随机变量是零均值的,协方差化为相关coor(y1,y2)=E{y1,y2),不相关相当于零相关.

如果随机变量是独立的,它们即是不相关的.这是因为两个随机变量y1和y2是独立的,那么对于任意两个函数h1和h2,我们有:

独立成分分析(ICA)

这就是我们常说的,
独立意味着不相关,而不相关并不意味着独立
比不相关稍强的概念是白化.白化的随机向量y与它的各分量是不相关的,并且具有单位方差.换句话说,随机向量Y的协方差矩阵是单位阵

独立成分分析(ICA)

白化意味着我们将观测数据向量x进行线性变换,使得新向量

独立成分分析(ICA)

是白化的随机向量.白化有时称为球化.

白化变换总是可行的.白化的一个流行方法是协方差矩阵的特征值分解(EVD) :
独立成分分析(ICA)

这里,E是E(XXT)的特征向量组成的正交矩阵,D是它的特征值组成的对角矩阵.这样,白化可以通过白化矩阵
独立成分分析(ICA)来完成!

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145335.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java中保留两位小数的方法_java float保留两位小数

    java中保留两位小数的方法_java float保留两位小数项目中有一个小需求,两个整数相除,结果需要保留两位小数,即1.00、0.50这种数据格式。以下做法不行,因为两整数相除,小数点以后的数字会被截断,让运算结果为整数类型,intx=10;inty=20;inta=x/y;System.out.println(a);//输出0System.out.println(x/y);//输出0System.out.println((floa…

  • Java冒泡排序实现

    Java冒泡排序实现Java冒泡排序原理:依次比较相邻的两个书,将较大的数放右边思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。代码演示:…

  • android listview清空数据[通俗易懂]

    android listview清空数据[通俗易懂]privateListViewlistview;  privateArrayList>data;  privateSimpleAdapteradapter;        if(data.size()>0){data.removeAll(data);adapter.notifyDataSetChanged();

  • 简单工厂模式

    简单工厂模式

    2021年12月17日
  • pytorch中tensorboard数据显示

    pytorch中tensorboard数据显示

  • phpstrom 3.3激活码_通用破解码

    phpstrom 3.3激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

发表回复

您的电子邮箱地址不会被公开。

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