使用ICA清理Python中的EEG数据

时间:2016-03-17 10:52:40

标签: python

我正致力于识别P300 ERP的脑电信号处理方法。 目前,我使用单个数据向量训练我的分类器,我通过对来自原始64通道的所选子集的预处理数据求平均得到。我直接使用EEG的值,而不是fft的频率特征。该方法实际上获得了大约75%准确分类的可靠性能。 我想通过使用ICA来清理EEG数据来改进它。我读了很多教程和论文,我仍然有点困惑。 我在python中实现我的方法,所以我选择使用sklearn的FastICA。

from sklearn.decomposition import FastICA
self.ica = FastICA(n_components=64,max_iter=300)
icaSignal = self.ica.fit_transform(self.signal)

25256个样本x 64个通道矩阵我得到原始源的矩阵,也就是 25256x64 。问题是,我不太确定如何使用输出。

平均这些组件并训练分类器与信号一样,将性能降低到30%以下。所以这不太可能。

我读到的另一种方式是,此时拒绝一些组件 - 代表眨眼,肌肉活动等的组件。根据它们的频率和其他一些启发式方法来做。 - 我对如何做到这一点也不太有信心 拒绝一些组件后,下一步是什么?我应该尝试对剩下的那些进行平均并用它们提供分类器,或者我应该在没有它们的情况下尝试重建EEG信号 - 如果是这样,如何在python中执行此操作?我无法找到有关重建步骤的任何信息。在matlab中做起来可能要容易得多,所以没有人费心去写它:(

有什么建议吗? :) 非常感谢你!

1 个答案:

答案 0 :(得分:1)

我没有将Python用于ICA,但是在这些步骤中,无论是Matlab还是Python都无关紧要。

你完全正确,很难拒绝ICA组件。没有广泛接受的客观测量。眼睛眨眼(前额通道中的高电压),肌肉瑕疵(宽频谱覆盖,因为它是EMG,在外围通道)存在某些模式。如果您不知道从哪里开始,我建议您阅读一个名为EEGLAB的Matlab插件的帮助。这个UCSD小组有一些很好的材料可以帮助你开始。

http://sccn.ucsd.edu/~jung/artifact.html

http://sccn.ucsd.edu/wiki/Chapter_09:_Decomposing_Data_Using_ICA

回答你关于ICA重建的问题:在拒绝一些ICA组件后,你应该在没有它们的情况下重建原始脑电图。