| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 独立成分分析(Independent Component Analysis,ICA)原理及代码实现 -> 正文阅读 |
|
[人工智能]独立成分分析(Independent Component Analysis,ICA)原理及代码实现 |
过程监控中会用到很多中方法,如主成分分析(PCA)、慢特征分析(SFA)、概率MVA方法或独立成分分析(ICA)等为主流算法。 其中PCA主要多用于降维及特征提取,且只对正太分布(高斯分布)数据样本有效;SFA被用来学习过程监控的时间相关表示,SFA不仅可以通过监测稳态分布来检测与运行条件的偏差,还可以根据时间分布来识别过程的动态异常,多用于分类分析;概率MVA方法,多以解决动力学、时变、非线性等问题。 今天要介绍的是独立成分分析(ICA),由浅入深,细细道来。 此外文末还附有ICA可实现的代码哟~不要错过 独立成分分析(Independent Component Analysis,ICA)基本原理在信号处理中,独立成分分析(ICA)是一种用于将多元信号分离为加性子分量的计算方法。这是通过假设子分量是非高斯信号,并且在统计上彼此独立来完成的。ICA是盲源分离的特例。一个常见的示例应用程序是在嘈杂的房间中聆听一个人的语音的“ 鸡尾酒会问题 ”。 首先,引入一下经典的鸡尾酒宴会问题(Cocktail Party Problem)。 如下图所示,假如在我们的Party中有 n n n个人,他(她)们可以同时且互相说话,我们也在房间中一些角落里共放置了n个声音接收器(Microphone)用来记录声音。宴会过后,我们从n个麦克风中得到了一组数据 X ( i ) = ( x 1 ( i ) , x 2 ( i ) , … , x n ( i ) ) ; ( i = 1 , … , m ) \mathrm{X}^{(i)}=\left(x_{1}^{(i)}, x_{2}^{(i)}, \ldots, x_{n}^{(i)}\right) ;( i=1, \ldots, m) X(i)=(x1(i)?,x2(i)?,…,xn(i)?);(i=1,…,m),其中 i i i表示采样的时间顺序,也就是说共得到了 m m m组采样,每一组采样都是 n n n维的,得到的是一个 n ? m n*m n?m 的数据矩阵。 我们的目标是:单独从这 m m m组采样数据中分辨出每个人说话的信号。
手残灵魂画师原图之鸡尾酒宴会
这里我们还需要另一组信息,那就是声音信号。我们把每个人的声音信号,那么也就是有 n n n个信号源 S = ( s 1 , s 2 , . . . , s n ) T , s ∈ R n S=(s_1,s_2,...,s_n)^T,s\in \mathfrak{R}^n S=(s1?,s2?,...,sn?)T,s∈Rn,且每个人发出的声音都是相互独立的。同样我们做了 m m m组采样。 假设我们令一个未知的混合系数矩阵(mixing coefficient matrix)为
A
A
A,用来组合叠加信号
S
S
S, 由此我们可知每一个 x ( i ) x^{(i)} x(i)都是由 s ( i ) s^{(i)} s(i)的分量线性表示的。 目前我们需要明确一点,只有 X X X是已知的可测量的(由麦克风得到),其中 A 、 S A、S A、S均为未知条件,我们要想办法根据 X X X来推出 S S S值。这个过程也称作为盲信号分离。 由于求矩阵的逆在实际运算中会出现一些问题,那么我们令 H = A ? 1 H=A^{-1} H=A?1,则 s ( i ) = A ? 1 x ( i ) = H x ( i ) s^{(i)}=A^{-1}x^{(i)}=Hx^{(i)} s(i)=A?1x(i)=Hx(i)。 其中我们
H
H
H可表示为,
h
i
∈
R
n
h_i\in \mathfrak{R}^n
hi?∈Rn,将
H
H
H 写成向量的形式。由此可得, ICA的不确定性(ICA ambiguities)由于 h h h和 s s s都不确定,那么在没有先验知识的情况下,无法同时确定这两个相关参数。 比如上面的公式 s = h x s=hx s=hx。当 h h h 扩大两倍时, s s s 只需要同时扩大两倍即可,等式仍然满足,因此无法得到唯一的 s s s。同时如果将人的编号打乱,变成另外一个顺序,那么只需要调换A的列向量顺序即可,因此也无法单独确定 s s s。这两种情况称为原信号不确定。 还有一种ICA不适用的情况,那就是信号不能是高斯分布的。假设只有两个人发出的声音信号符合多值正态分布, s ~ N ( 0 , 1 ) s \sim N(0,1) s~N(0,1)。 简而言之,不合适,不适用于没先验知识的情况。 ICA 算法下面直接上ICA算法。 独立成分分析 ICA(Independent Component Correlation Algorithm)是一种函数,X为n维观测信号矢量,S为独立的m(m<=n)维未知源信号矢量,矩阵A被称为混合矩阵。ICA的目的就是寻找解混矩阵W(A的逆矩阵),然后对X进行线性变换,得到输出向量U。 这里使用最大似然估计来解释算法,我们假定每个
s
i
s_i
si?有概率密度
p
s
p_s
ps?,那么给定时刻原信号的联合分布就是 有了
p
(
s
)
p(s)
p(s),我们可以求得
p
(
x
)
p(x)
p(x) 若没有先验知识,我们无法求得 H H H和 s s s。 因此我们需要知道
p
s
(
s
i
)
p_s(s_i)
ps?(si?),我们打算选取一个概率密度函数赋给
s
s
s,但是我们不能选取高斯分布的密度函数。在概率论里我们知道密度函数p(x)由累计分布函数(cdf)F(x)求导得到。F(x)要满足两个性质是:单调递增和在[0,1]。我们发现sigmoid函数很适合,定义域负无穷到正无穷,值域0到1,缓慢递增。我们假定
s
s
s的累积分布函数符合sigmoid函数 要是我们预先知道 s s s的分布函数,那就不用假设了,但在未知的情况下,sigmoid函数能够在大多数问题上取得不错的效果。 由于上式中 p s ( s ) p_s(s) ps?(s)是个对称函数,因此E[s]=0(s的均值为0),那么E[x]=E[As]=0,x的均值也是0。 现在我们知道了 p s ( s ) p_s(s) ps?(s),下面开始求 H H H。 采样后的训练样本为
X
(
i
)
=
(
x
1
(
i
)
,
x
2
(
i
)
,
…
,
x
n
(
i
)
)
;
(
i
=
1
,
…
,
m
)
\mathrm{X}^{(i)}=\left(x_{1}^{(i)}, x_{2}^{(i)}, \ldots, x_{n}^{(i)}\right) ;( i=1, \ldots, m)
X(i)=(x1(i)?,x2(i)?,…,xn(i)?);(i=1,…,m),使用前面得到的
x
x
x的概率密度函数,得其样本对数似然估计: 最终得到的求导结果公式( 当通过多次迭代后,可求出 H H H,便可得到 s ( i ) = H x ( i ) s^{(i)}=Hx^{(i)} s(i)=Hx(i)来还原出原始信号。 举个Paper的栗子下面是
s
=
2
s=2
s=2的原始信号: MATLAB代码实现MATLAB代码:
此外还有基于故障诊断的ICA算法代码实现->在这里 下面给出部分代码:
效果如下: References
?( ′・?・` ) ? 『 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/12 1:55:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |