因子分析_主成分分析_独立成分分析_斯坦福CS229_学习笔记

article/2025/11/9 5:34:48

Part VIII 因子分析 主成分分析 独立成分分析

在上个部分介绍了EM算法,在此部分因子分析中,我们会再次应用到。

因子分析、主成分分析和独立成分分析都作为对于数据维度进行处理的手段,对于我们理解数据、更好的表示数据都起到或多或少的作用,因此将三者放在一起进行叙述。


目录

Part VIII 因子分析 主成分分析 独立成分分析

1 因子分析(Factor Analysis,FA)

1.1 背景

1.2 思想与推导

2 主成分分析(Principal Components Analysis,PCA)

3 独立成分分析(Independent Components Analysis,ICA)

4 小结


1 因子分析(Factor Analysis,FA)

首先介绍因子分析(FA)的提出背景,接着给出算法的思想,最后结合EM算法给出其参数的推导。

1.1 背景

之前介绍的各种算法,我们都有着一个不容忽视假设:样本的数量m足够充足,这样就使得通过训练(迭代),能够求解出参数从而构造出模型。但是现实有时候是残酷的,有时候会存在样本的数量匮乏的情况(m<<n),即样本的数量不足以支持我们解出当前模型。举一个例子,假设现在利用极大似然法拟合多元高斯分布的参数\mu\Sigma,根据极大似然法估计结果可得:

但是在当前样本数量m<<n的情况下,\Sigma有很大的概率为奇异矩阵,这就意味着\Sigma^{-1}不存在且1/\left | \Sigma \right |^{1/2} =1/0。而上述两个值我们在接下来具体计算多元高斯分布时都会用到,这就使接下来的计算陷入了一个困境。有没有思路解决这种问题呢?当然有了,接下来介绍两种解决这种问题的思路。

但是先容插句话。有没有好奇在上述情况下(m<<n),只提到了协方差阵\Sigma出现问题,而\mu则没有事儿。参考相关资料,发现并没有人提到。我的理解是,因为利用最大似然对于多元高斯模型进行估参时,得到的\mu是无偏估计;而协方差阵\Sigma则是有偏估计,且样本数据量越少,偏差越大。具体参考https://blog.csdn.net/qykshr/article/details/23273105。

现在回到正题。既然现在参数过多了,那么就可以对于参数加一些限制进行解决。最直接的思路便是通过限制协方差阵进行解决。例如可以限制协方差阵为对角阵。即:

这是一个很强的限制,因为这种限制认为各个参数之间是独立的,实际情况下是不可取的。在协方差阵为对角阵的基础之上,还可以进一步限制,即协方差阵中的对角元素取值相同。这两种强限制条件大多数情况下感觉都不太适用。

在没有限制条件即原有条件下,需满足m\geqslant n+1,才能保证\Sigma非奇异;而在有上述两种限制条件下,只需要满足m\geqslant 2,即可保证\Sigma是非奇异矩阵。(这里并不明白,希望明白的大佬指点一下)。

实际情况下,各参数之间联系是存在并且是需要利用的。解决该问题也可以通过降维的方式进行,即将高维特征转为低维特征。

1.2 思想与推导

因子分析的思想在于,在多维数据x中,假设存在一些相对低维的潜在的变量z(即因子),高维数据x可通过低维潜在的z线性表示(因子分析的一个重要假设)。那么便可以根据此种变换将高维数据x映射到低维数据z,从而达到降维的目的。那么x和z存在着什么样的映射关系呢?因子分析做出以下假设来建立x和z的关系。

(1)低维空间中存在由高斯分布生成的m个k维变量(这又是因子分析的一个重要假设)。(图中m=4,k=1)

(2)原始数据空间x为n(图中n=2)维。可以将低维空间变量通过变换矩阵\Lambda(n*k)映射到x存在的高维空间。

(3)每个样本加上n维偏移向量\mu

(4)每个样本加上n维高斯扰动ε~N(0,ψ)从而得到高维向量x

由上,可将因子分析模型总结如下:

从高维向量x可由潜在的低维高斯型向量z线性表示出发,存在着以下假设,并且在下列分布中隐变量z与随机高斯噪声\epsilon不相关:

第一行表示潜在型高斯变量分布。

第二行表示随机高斯噪声的影响。

第三行表示x由z线性表示形式。

结合上述定义,不难得到(确保明白这点)

接下来,对于x和z的联合分布建模。由于p(x,z)=p(x|z)*p(z),两个高斯型密度函数的乘积仍然为高斯型,因此将x,z联合分布建模为高斯型如下:

之所以在左端写成矩阵形式,仅仅是为了接下来的表述方便。那么参数\mu _{zx}\Sigma是什么形式呢?由多元高斯型联合分布和边缘分布的关系,我们不难进行以下推导:

因为z\sim N(0,I),因此EZ=0,又因为x=\mu +\Lambda *z+\epsilon,因此

那么就有:

                                                            \mu _{zx}=\begin{bmatrix} EZ\\EX \end{bmatrix}=\begin{bmatrix} \vec{0}\\ \mu \end{bmatrix}

接下来进行在\Sigma的推导。在推导中需要利用概率论两个基本公式:

(1)若随机变量X,Y不相关,那么有EXY=EX*EY。在这里即为z与c不相关。

(2)EX^{2}=\left ( EX \right )^{2}+DX

因为   \Sigma =\begin{bmatrix} \Sigma _{zz} &\Sigma _{zx} \\ \Sigma _{xz} & \Sigma _{xx} \end{bmatrix},那么我们可分别对于矩阵内元素进行如下计算:

\Sigma _{zz}=I

\Sigma _{zx}=\Sigma _{xz}=E[(z-E[z])(x-E[x])^{T}]=E[z(\mu +\Lambda z+\epsilon )^{T}]

                                                                    =E[zz^{T}]\Lambda ^{T}+E[z\epsilon ^{T}]=\Lambda ^{T}

\Sigma _{xx}=E[(x-E[x])(x-E[x])^{T}]=E[(\mu +\Lambda *z+\epsilon )(\mu +\Lambda *z+\epsilon )^{T}]

                                                         =\Lambda E[zz^{T}]\Lambda ^{T}+E[\epsilon \epsilon ^{T}]=\Lambda \Lambda ^{T}+\Psi

那么结合上述结果,即可得到x,z联合分布如下:

到这里就很清晰了。还是老套路,接下来利用最大似然法求解参数从而得到x,z的联合分布。此时参数为\mu\Lambda\Psi。写出最大似然方程进行参数求解。

能够直接求偏导解出上述参数算你厉害。

此方程比较复杂,很难直接解出,因此就需要利用上一讲介绍EM算法进行求解了。在上一讲最后利用高斯混合模型对于EM算法的流程已经进行过介绍了。对于高斯混合模型而言,隐变量z为离散型,而在因子分析中隐变量z则为连续性;其实就是将求和改为积分即可。下面给出EM算法的解参数步骤:

(1)E-step:在E-step中,我们需要根据参数计算得到后验概率Q_{i}(z^{(i)})。这里利用多元高斯分布的条件分布结论可直接推导出后验分布。先对于多元高斯分布的条件分布结论进行介绍。

若有二元高斯分布x\sim N(\mu ,\Sigma ),且参数如下表式:

那么可得以下结论:x_{1}|x_{2}\sim N(\mu _{1|2},\Sigma _{1|2}),且

因此,根据此结论和前文的推导,可得后验分布z^{(i)}|x^{(i)};\mu ,\Lambda, \epsilon \sim N(\mu _{z^{(i)}|x^{(i)}},\Sigma _{z^{(i)}|x^{(i)}})

以上,E-step顺利走通。

(2)M-step:在M-step,我们要最大化:

简化此式得到:

然后分别对于参数\mu ,\Lambda ,\Sigma 求偏导得到表达式如下所示(有兴趣的可以自己推推):

在每次迭代中,更新参数的值直到收敛从而得到最终参数的结果。

由此,求解出三个参数,原有的n维(高维)空间样本x便可由k维(低维)空间隐变量z线性表示了。


2 主成分分析(Principal Components Analysis,PCA)

主成分分析(PCA)作为另外一种数据降维的手段得到了广泛的应用。

主成分分析的思想在于,在数据维度(n维)较大时,各个维度之间或多或少都会存在着相关性,而实际上我们并不需要全部使用维度进行处理,因为或许选取数据的某k维就代表了很大部分的n维特征。PCA的过程就是提取这k维的过程。

解释PCA可以从将近10种思路出发,这里选取比较好理解的最大方差的思路出发进行解释。

以2维数据压缩为1维数据为例,PCA要做的找到一个新的维度,是数据在新维度上的方差最大(即投影长度最长,如u1的方向所示)。因为根据信息论的观点,数据所包含的方差越大,那么数据所包含的信息量越大。如果新的投影方向u1能够包含原有数据的大部分信息(假设85%以上),那么可以认为在保证了数据信息的精度上进行了压缩。

再举一个例子,假设原有5个2维样本如下图所示。

分别将原始数据按照如图所示的两个方向进行投影,得到左图与右图。

这就很清晰了,左图的数据明显比右图更能保留原始的数据信息。

那么包含了数据最多的新的投影方向是什么方向呢?听上去是一个解最值的问题,实际上也正是这样。

首先对于数据预处理。预处理的目的在于使各个维度的数据在接下来的处理中拥有着相同的尺度。预处理步骤如下。

(1)计算    \mu =\frac{1}{m}\sum_{i=1}^{m}x^{(i)}

(2)更新 x^{(i)}x^{(i)}:=x^{(i)}-\mu

(3)计算 \sigma_{j}^{2}=\frac{1}{m}\sum _{i}(x_{j}^{(i)})^{2}

(4)更新 x^{(i)}x^{(i)}:=x^{(i)}/\sigma _{j}^{2}

经过预处理,每一维的数据都统一到均值为0,方差为1的这一分布尺度下了。

接下来定义优化问题,即寻找到投影长度最长的那个方向。

设样本空间存在单位方向向量u,那么某个样本点x^{(i)},在u上的投影长度 length 即为:

length=\left | x^{(i)} \right |cos<x^{(i)},u>=\left | x^{(i)} \right |*\frac{\boldsymbol{x^{(i)}u}}{\left | x^{(i)} \right |*\left | u \right |}=\boldsymbol{x^{(i)}u}=x^{(i)T}*u

因此,优化问题即为在|u|=1的条件下,使下式最大化

利用拉格朗日乘数法即可解决,这里设X^{T}X=\Sigma,即有下式:

对u求偏导,并另偏导等于0,得\Sigma u-\lambda u=0,即\Sigma u=\lambda u

这不正好是一个特征方程嘛,u就是对应的特征向量,\lambda即为特征向量对应的特征值。

竟是这么巧合?其实这也是可以理解的,从特征值与特征向量的意义出发,不难得到PCA要做的事情其实和直接求解其协方差阵的特征向量是一码事。因为目的都在于寻找到方差变化最大的方向(前k个方向)。而且由于协方差阵\Sigma为对称阵,即得到的方向也相互正交,这就使得PCA的降维处理变得更纯粹。

回过头来,不难发现,特征值\lambda _{i} 代表着该特征向量对于原有信息的贡献率,特征值最大的一个\lambda _{i} 对应着的特征向量即为包含信息量最多的一个方向。因此我们要判断一个特征向量对于整体方差的贡献率,只需计算其特征值占全部特征值的比例即可。同理,要选取前k个特征向量组成新的维度空间,也根据k个特征向量的方差贡献率即可。

在此基础上,假设选取前k个特征向量进行降维,实现n维特征空间向k维转变,即可得到最终的映射关系:

                                                   x_{low-dimension}(k*1)=u(k*n)*x_{hige-dimension}(n*1)


3 独立成分分析(Independent Components Analysis,ICA)

独立成分分析的思想同样是为了将数据进行映射。

引入一个具体场景抛砖引玉—鸡尾酒宴会(cocktail party)。在宴会上,有n个人使用话筒同时在演讲。假设每个话筒(共计n个话筒)发出的声音是n个人的声音的和,那么如何从这n个话筒所记录的声音中区分中每个人的声音呢?这便是ICA的一个应用场景。

即可以将问题如下定义:设x(n*1维)为话筒最后发出的声音,s(n*1维)为每个人的声音,A(n*n)称为混合矩阵(mixing matrix),那么有以下关系 x=As。我们的目的在于解出s。设W=A^{-1},那么就有s=A^{-1}x=Wx。那么目的就转换为找到这个矩阵W。在没有任何先验知识的情况下,上述问题是不可解的。但是我们仍要探究下去。因此,同样是利用“老思路”解决此问题,即假设—建模—求参。

接下来给出ICA解决此问题的思路。

为了使问题可解,需要做一些假设:

(1)假设各个数据来源s_{i} 相互独立。

(2)假设s的累积概率函数(Cumulative Distribution FunctionCDF)作为先验知识可知。若不能根据经验确定,通常设做sigmoid函数效果会好一些。注意当设置为sigmoid函数为先验的CDF时,这同时也暗示着样本的均值为0,若样本的均值不为0,,则样本需要预处理将均值归为0。为什么设置sigmoid函数会带来这个影响呢?

这是因为,若设sigmoid函数 g(x)=\frac{1}{1+e^{-x}},那么s的概率分布函数即为: p(s)=g'(s)=\frac{1}{1+e^{x}+e^{-x}}。由于p(s)为偶函数,那么E[s] = \int s*p(s)ds=0。.因此当假设s的分布函数为sigmoid函数后,如果x的均值不为0,需要进行归一化操作将其置为0。

(3)s_{i} 的分布不能为高斯分布。具体原因参见讲义不再叙述。

接下来进行建模,由于s_{i} 相互独立,因此由边缘分布乘积可直接得到联合密度函数:

又因为x=As,s=Wx,结合密度函数与分布函数的关系,可得:

从而推出:

接下来又到了求参环节了,这里我们的参数是W,同样利用最大似然法进行参数的求解。写出最大似然方程:

对W求偏导,可得每次迭代的更新公式为:

为了表述方便,可将解得的W写成如下形式:

根据W,那么原有数据中的每个信号的来源即可分离开了。即每个s_{i}=w_{i}^{T}*x。由此ICA从原有混合数据中将来源于不同信号源的数据进行分离的任务便完成了。


4 小结

或许有人会疑惑同样是作为数据降维的手段,好像最后的形式也差不多,因子分析(FA)和主成分分析(PCA)有什么区别呢?看完二者的推导,谈谈我的看法。

首先,差别还是挺明显的,二者的思想出发点就不同。FA是想从众多特征中找出一些共性(即隐变量z),利用共性对于原有数据进行表达;而PCA则是从众多特征中找出一些具有代表性的特征对于原有特征进行表达。

其次,二者的着重点也不一致。FA着重于各个变量间的协方差;而PCA则着重于总体的方差。

再者,FA相比较而言做了一些假设,较为受到限制;而PCA则无需假设,应用更广。

最后,PCA的实际应用范围是大于FA的。PCA在许多方面都发挥着不小的作用。

独立成分分析(ICA)的目的在于从多个信号混杂的数据中,解算出每个信号原有的数据。为此ICA做了一些假设,包括确定信号的分布函数。在ICA中应该留意,高斯分布的数据并不能直接应用ICA做分解。


http://chatgpt.dhexx.cn/article/ubtp80SC.shtml

相关文章

Python专栏 | 独立成分分析(ICA)的实例应用:消除伪影信号

关注微信公众号&#xff1a;脑机接口研习社 了解脑机接口最近进展 系列文章目录 Python专栏 | 脑电图和脑磁图(EEG/MEG)的数据分析方法之载入数据 Python专栏 | MNE脑电数据(EEG/MEG)可视化 Python专栏 | MNE数据预处理方法——独立成分分析 持续更新中…… 文章目录 系列文…

【医学信号处理与MATLAB(5)】独立成分分析法-ICA

接着上一节PCA的内容&#xff0c;我们来谈一下ICA为何同样重要。 目录 引入&#xff1a;鸡尾酒会问题独立成分分析法中心极限定理中心极限定理的MATLAB代码实现 测量非高斯程度(Kurtosis峰度)独立成分分析法处理流程使用FASTICA找出独立成分MATLAB代码实现 引入&#xff1a;鸡…

ICA独立成分分析去除EEG伪影

目录 介绍ICA假设方法组件投影实验数据样本移除眨眼和肌肉伪影一些严重污染的脑电数据 本分享为脑机学习者Rose整理发表于公众号&#xff1a;脑机接口社区 .QQ交流群1&#xff1a;903290195(已满&#xff0c;请加群2)&#xff0c;群2&#xff1a;941473018 介绍 眼动&#x…

fMRI独立成分分析方法(ICA)工具GIFT

软件下载连接&#xff1a; Software - TReNDS (trendscenter.org)https://trendscenter.org/software/下载完成后&#xff0c;在MATLAB中添加其路径即可。 在MATLAB命令行输入gift。打开窗口页面&#xff1a; 1、点击setup ICA Analysis 新建一个gica文件夹&#xff0c;存储…

《大话脑成像》之:独立成分分析

少年&#xff0c;我看你骨骼精奇&#xff0c;是万中无一的武学奇才&#xff0c;维护世界和平就靠你了&#xff0c;我这有本武林秘籍《九阴真经之万军丛中听声辩位分筋错骨取敌将首级之盲源分离大法》&#xff0c;简称&#xff0c;《独立成分分析》&#xff0c;见与你有缘&#…

独立成分分析(Independent Component Analysis,ICA)模型介绍

独立成分分析ICA模型 1 历史背景2 ICA基本模型3 独立与不相关 \qquad 1 历史背景 \qquad 独立成分分析思想和方法最早源于上世纪八十年代几个法国学者的研究工作,尽管当时他们并没有命名其为ICA&#xff1b;在1986年举行的神经网络计算会议上&#xff0c;法国学者Heraull和Jutt…

【详细版】独立成分分析:算法和应用(一)

独立成分分析&#xff1a;算法和应用 翻译原文自己的理解 原文&#xff1a;Independent component analysis: algorithms and applications 作者&#xff1a;A. Hyvarinen, E. Oja 时间&#xff1a;2000年 注&#xff1a;详细版原文太长&#xff0c;分两篇来写&#xff1b;另外…

Python专栏 | MNE数据预处理方法——独立成分分析

关注微信公众号&#xff1a;脑机接口研习社 了解脑机接口最近进展 系列文章目录 Python专栏 | 脑电图和脑磁图(EEG/MEG)的数据分析方法之载入数据 Python专栏 | MNE脑电数据(EEG/MEG)可视化 文章目录 系列文章目录预处理&#xff08;Preprocessing&#xff09; 预处理&#x…

学习笔记 | 独立成分分析(ICA, FastICA)及应用

学习笔记 | 独立成分分析[ICA, FastICA]及应用 1 背景说明 2 算法原理 2.1 ICA简介 2.2 形式化表达 3 算法步骤与代码 4 算法改进&#xff1a;FastICA 5 ICA实例与应用 6 小结 概要&#xff1a; 这篇博客和博客学习笔记|主成分分析[PCA]及其若干应用属于一个系列&#xf…

ICA独立成分分析去除脑电伪影

今天分享的这篇利用独立成分分析ICA去除EEG伪影是翻译自jung大神的一篇文章。 目录 1 介绍 2 方法 3 实验数据样本 1 介绍 眼动&#xff0c;眨眼&#xff0c;肌肉&#xff0c;心脏和线的噪音会严重污染脑电图活动&#xff0c;这在脑电解释和分析中会产生非常严重问题。研究…

独立成分分析(ICA)

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

独立成分分析ICA系列2:概念、应用和估计原理.

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

详解独立成分分析

最近在学习数据降维的一些方法(有关数据降维的其他内容请看这篇文章)&#xff0c;虽然独立成分分析不算是严格意义上的降维方法&#xff0c;但是它和PCA有着千丝万缕的联系&#xff0c;所以打算专门写一篇文章来学习ICA的相关知识&#xff0c;看了挺多的关于ICA的博文&#xff…

独立成分分析

在已知语音信号方向的情况下&#xff0c;波束形成能明显改善语音质量&#xff0c;提高信噪比&#xff1b;然而在实际环境中&#xff0c;人可能是走动的&#xff0c;即使坐立不动&#xff0c;由于身体的扭曲使得语音到达阵列的方向也是变化的&#xff0c;此时波束形成效果受到限…

独立成分分析(Independent Component Analysis,ICA)原理及代码实现

过程监控中会用到很多中方法&#xff0c;如主成分分析&#xff08;PCA&#xff09;、慢特征分析&#xff08;SFA&#xff09;、概率MVA方法或独立成分分析&#xff08;ICA&#xff09;等为主流算法。 其中PCA主要多用于降维及特征提取&#xff0c;且只对正太分布&#xff08;高…

清理vdbench后台进程

当我们打开一个终端&#xff0c;用nohup运行vdbench程序。断开连接后&#xff0c;你发现你写的配置文件有误&#xff0c;想关闭已有的vdbench进程。你重新连接上终端&#xff0c;咦&#xff0c;我的jobs命令怎么没有显示我的nohup任务呢&#xff1f;这是因为你的nohup任务的sh进…

Nas性能测试工具-vdbench

版本&#xff1a; vdbench50406 简介&#xff1a; vdbench是一个 I/O 工作负载生成器&#xff0c;用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具&#xff0c;容易使用&#xff0c;而且常常用于测试和基准测试。 配置参数&#xff1a; 大文…

Linux中vdbench的安装与使用

vdbench是一个 I/O 工作负载生成器&#xff0c;用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具&#xff0c;容易使用&#xff0c;而且常常用于测试和基准测试。 可以使用vdbench测试磁盘和文件系统的读写性能。 环境&#xff1a;Ubuntu 16.04 …

vdbench和fio测试磁盘性能的对比总结

vdbench和fio测试磁盘性能的对比总结 一、安装 1、安装vdbench&#xff0c;首先安装java&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 其次下载vdbench安装包并进行安装&#xff1a;http://pan.baidu.com/s/1b7XooY&am…

vdbench使用

简介 vdbench是一个 I/O 工作负载生成器&#xff0c;用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具&#xff0c;容易使用&#xff0c;而且常常用于测试和基准测试。 可以使用vdbench测试磁盘和文件系统的读写性能。 名词解释 vdbench中常用的…