去年用周末时间学习Andrew Ng的机器学习课程的时候, 讲到了一个应用, 就是用ica做声音的分离, 实际的问题叫"Cocktail Party Problem". 因为也是做了挺长时间的音视频处理的, 所以这个例子还是做了下, 也翻出来再分享下, 当然都是浅析, 毕竟深究的话需要耗费的精力就多了, 目前的工作状态不允许 . 而且不会涉及深度神经网络等稍复杂的处理方法, 对这个问题的DNN解法感兴趣的可以去(DNN), 这里希望能简单的简单的简单的说清楚几个词BSS, ICA和PCA(划掉是因为我越看资料越发现自己什么都不懂), 并且给大家看两个demo.
首先这个问题是个无监督学习的应用, 属于Blind Source Separation(盲源分离)范畴. 从基于传感器阵列的信号处理角度, 还有个比较有意思的应用叫BeamForming (BSS vs BF), 通常用于信号定位和定向增强, 有兴趣的同志也可以了解下.
BSS有多种数学模型, 这里想说的BSS/ICA以独立信号源的线性混合为前提, 并且是stationary的. 下图比较形象的描述了这一过程(PCA), ICA的过程有一定的相似性, 这两种方法通常也需要配合使用, 通常来说一个ICA过程, 需要先通过PCA做降维处理, 再通过ICA分离信源. 而且按照定义, 如果信源是高斯分布的, 还是叫正态分布吧, ICA和PCA本来也是等价的 :
BSS其实是一个典型的困难的信号处理问题, 具体的可以读一读这个介绍, 写的很详细(Intro to BSS). 像傅里叶的原理一样, 需要通过向量空间的转换来强化信号的不同, 但是不同于傅里叶, 这种转化不是基于频域的, 对信源的频率没有要求.
PCA (by 宋天龙, TonySong), 主成分分析, 链接是我认为比较明白亲民的解释, "主成分分析是一种降维方法。主成分分析Principal component analysis(PCA)也称主分量分析,旨在利用降维的思想,把多维指标转化为少数几个综合维度,然后利用这些综合维度进行数据挖掘和学习,以代替原来利用所有维度进行挖掘学习的方法。" 降维的过程, 还是用Andrew的一张图来表示下:
维度, 指的是一个数据集或者样本集的随机变量个数, 简单点的理解, 也可以更工程的理解为数据集中的向量数量. 描述两个变量间的关系我们叫相关性, 通常归一化到-1 到 1, ±1都表现为极强的相关性, 不过方向不同, 0表示不相关. PCA的输出维度数量小于等于原始的变量数量, 但通常都已经不是一个可以被我们理解的业务特征, 所以会导致一些专家, 先验经验不能很好的介入和优化. 通常来说用于降维, 成分间具有这几个特征:
- 主成分是原始变量的线性组合
- 成分间是正交的关系
- 方差从一个PC到最后一个是递减的
关于理论分析, 分享一个之前下的文档吧, 了解下就好. (PCA理论分析)
PCA通常应用于人脸识别, 机器视觉, 图片压缩等领域的降维操作, 也会应用于数据挖掘发现隐藏的数据patterns.
ICA, 独立成分分析 "是一种利用统计原理进行计算的方法,它是一个线性变换,这个变换把数据或信号分离成统计独立的非高斯的信号源的线性组合, 独立成分分析并不能完全恢复信号源的具体数值,也不能解出信号源的正负符号、信号的级数或者信号的数值范围,它能做的是将不同独立的信号源进行按照特征进行分离" (TonySong). 这段话总结的很好, 感觉都不用再多说啥了.
关于ICA这块, 以及demo还是下次再整理吧, 最近发版本太多事情, 写的稍微有些仓促, 相关的应用以后有机会多做一些, 手里有数据也有想法, 就是时间太少了.
(附) Ng 机器学习课程的全部视频和文字资料, Ng-机器学习, 视频不能在线看的, 可以考虑用网易公开课, 缓存下来学习.