共计 3571 个字符,预计需要花费 9 分钟才能阅读完成。
1. 简介
您是否已经遇到过这样一种状况:您试图剖析一个简单且高度相干的数据集,却对信息量感到手足无措?这就是独立成分剖析 (ICA) 的用武之地。ICA 是数据分析畛域的一项弱小技术,可让您拆散和辨认多元数据集中的底层独立起源。
ICA 之所以重要,是因为它提供了一种了解数据集暗藏构造的办法,可用于各种利用,例如信号处理、脑成像、金融和许多其余畛域。此外,ICA 能够帮忙从数据中提取最相干的信息,提供有价值的见解,否则这些见解将在大量相关性中失落。
在本文中,咱们将深入探讨 ICA 的基础知识,ICA 算法,以及如何在数据分析我的项目中施行它。
2. 次要思维
独立成分剖析是各种无监督学习算法中的一种,这意味着咱们在应用模型之前不须要对其进行监督。这种办法的起源来自信号处理,咱们试图将多变量信号拆散成加性子重量。让咱们进入对次要思维的解释:
设想一些独立的信号或变量。这些信号能够示意为信号曲线,在上图中,第一个信号位于顶部,第二个信号位于底部。作为测量的后果,咱们没有收到蕴含信号自身的数据集,而是蕴含这两个信号的测量值的数据集,可怜的是,这两个信号被混合成不同的线性组合。ICA 的指标是通过拆散混合数据来复原原始的未知信号。最终目标是重建数据,使每个维度互相独立。
为了使这个概念更具体,将应用 ICA 最驰名的例子,即“鸡尾酒会问题”。
2.1. 鸡尾酒会问题
设想一下,加入一个多人同时发言的鸡尾酒会,很难听懂一个人的谈话。值得注意的是,在这种状况下,人类具备拆散集体语音流的能力。从技术上讲,这变得有点具备挑战性。
假如咱们应用两个麦克风记录团聚中两组的对话。这会导致两个混合信号,其中第一次测量对第一组的影响较大,对第二组的影响较小,而第二次测量对第二组的影响较大。
这个的个别框架能够在灰色框中用矢量符号示意。矢量 X 中的测量实际上是矢量 S 的信号乘以一些混合系数,在矩阵 A 中示意。因为咱们想要提取残缺的对话(原始信号),咱们须要为矢量 S 解决这个问题。
2.2. ICA vs. PCA
您可能曾经猜到 ICA 在某种程度上与主成分剖析 (PCA) 相干。这个假如并没有错。这两个概念背地的想法相差不大,但它们在最初阶段有所不同,咱们将在前面看到。
让咱们总结一下 PCA 的根本作用:假如咱们有两个看起来相干的变量。通过应用这些变量的特征向量和特征值最大化方差,咱们能够将它们转换为主成分。在此特定示例中,PCA 很好地辨认了此关系的次要方向。
让咱们以后面的鸡尾酒示例为例。在一个非常简单的示意中,咱们能够设想来自麦克风 1 和 2 的两个测量值具备造成相似穿插模式的关系。如果咱们在这种状况下利用 PCA,咱们会失去谬误的后果,因为 PCA 无奈解决具备多个次要方向的数据集。
另一方面,ICA 通过关注独立成分而不是次要成分来解决这个问题。
重要的是要回顾既定的概念框架。从麦克风取得的读数对应于已乘以混合矩阵 A 的原始信号。通过对于向量 S 重新排列方程,确定原始变量的惟一必要信息是矩阵 A。然而,矩阵 A 是未知的.
因而,要全面理解矩阵 A 并最终计算出向量 S,须要通过一系列步骤进行逆运算。这些间断的逆运算形成了 ICA 算法的三个阶段,当初将对其进行更具体的剖析。
3. ICA 算法
在进行 R 中的理论演示之前,理解算法的三个步骤很重要。该算法的指标是执行向量 X 与矩阵 A 的乘法。矩阵 A 由三个组成部分组成,它们是不同因素之间相乘相互作用的后果:
3.1. Step 1
- 找到具备最大方差的角度来旋转 | 预计 U^T
该算法的第一个组成部分波及应用基于第一个角度 Theta 的矩阵 U^T。角度 Theta 能够从数据的次要方向导出,如通过主成分剖析 (PCA) 确定的那样。此步骤将图形旋转到如上所示的地位。
3.2. Step 2
- 找到主成分的比例 | 预计 ∑^(-1)
第二个组成部分波及拉伸图形,这是通过 Sigma^-1 步骤实现的。此步骤应用数据中的 sigma 1 和 sigma 2 的方差,相似于 PCA 中应用的办法。
3.3. Step 3
- 旋转的独立性和峰度假如 | 预计 V
将以后算法与 PCA 辨别开来的最初一个组成部分波及信号围绕角度 Phi 的旋转。此步骤旨在通过利用旋转的独立性和峰度假如来重建信号的原始维度。
总之,该算法采纳测量并围绕 theta 执行旋转,通过应用方差 sigma 1 和 2 进行拉伸,最初围绕 Phi 旋转。以下幻灯片总结了这些步骤的数学背景以供参考。
如您所见,咱们能够仅应用两个角度和数据的方差来确定逆矩阵 A,这实际上是咱们解决 ICA 算法所需的全副。进行测量、旋转和缩放它们。最初,咱们再次旋转它们以取得最终尺寸。
4. 代码
我心愿你到目前为止曾经了解了 ICA 算法的根本思维。没有必要从数学上了解每一步,但有助于了解其背地的概念。有了这些常识,我想和你一起做一个理论的例子来展现 ICA 算法的理论利用,应用 R 中一个叫做 fastICA 的函数。
# install fastICA package in R
install.packages("fastICA")
# load required libraries
library(MASS) # To use mvrnorm()
library(fastICA)
咱们创立了两个随机数据集:信号 1 和信号 2,能够将其设想为来自咱们两个鸡尾酒组的语音信号:
# random data for signal 1
s1=as.numeric(0.7*sin((1:1000)/19+0.57*pi) + mvrnorm(n = 1000, mu = 0, Sigma = 0.004))
plot(s1, col="red", main = "Signal 1", xlab = "Time", ylab = "Amplitude")
# random data for signal 1
s2=as.numeric(sin((1:1000)/33) + mvrnorm(n = 1000, mu = 0.03, Sigma = 0.005))
plot(s2, col="blue", main = "Signal 2",xlab = "Time", ylab = "Amplitude")
红色曲线代表第一个信号,蓝色曲线代表第二个信号。在这种状况下,形态无关紧要。您应该看到的是这两个信号彼此不同。当初让咱们混合它们!
# measurements with mixed data x1 and x2
x1 <- sine1-2*sine2
plot(x1, main = "Linearly Mixed Signal 1", xlab = "Time", ylab = "Amplitude")
x2 <- 1.73*sine1 +3.41*sine2
plot(x2, main = "Linearly Mixed Signal 2", xlab = "Time", ylab = "Amplitude")
正如您在下面看到的,咱们应用两个信号模仿了两个测量。因而,测量中的信号不再独立。两种混合信号都能够设想成鸡尾酒示例中两个麦克风的录音。咱们当初遗记咱们的两个原始信号并设想,这两个测量值是咱们领有的对于该数据的惟一信息。
因而咱们想将它们离开,最终失去两个独立的信号:
# apply fastICA function to identify independent signals
measurements <- t(rbind(x1,x2))
estimation <- fastICA(measurements, 2, alg.typ = "parallel", fun = "logcosh", alpha = 1, method = "C", row.norm = FALSE, maxit = 200, tol = 0.0001, verbose = TRUE)
plot(estimation$S[,1], col="red", main = "Estimated signals", xlab = "Time", ylab = "Amplitude")
lines(estimation$S[,2], col="blue")
mtext("Signal 1 estimation in red, Signal 2 estimation in blue")
该算法的后果如上所示。红色曲线是信号 1 的估计值,而蓝色曲线是信号 2 的估计值。毫不奇怪,该算法简直预计了原始信号,如右图所示。您可能曾经留神到,红色曲线与预期齐全吻合,而蓝色曲线仿佛是倒转的。这是因为该算法无奈复原源流动的确切幅度。但除此之外,这里的重建工作做得十分好。
总结
- 长处
ICA 只能拆散线性混合源,而且咱们无奈完满拆散高斯分布的源,因为它们会终止咱们算法的第三步。尽管咱们冀望独立源混合在线性组合中,但 ICA 会找到一个空间,即便是非独立源也能最大限度地独立。
- 毛病
ICA 算法是一种实用于不同畛域的弱小办法,并且很容易在 R 的开源包中应用;Mathlab 和其余零碎。ICA 算法用于应用程序的示例有很多:人脸识别应用程序、股票市场预测等等。因而,它在理论应用中是一种重要且备受推崇的办法。
本文由 mdnice 多平台公布