使用PCA分类用于神经细胞放电分析
FallenGemini

实验:使用PCA分类用于神经细胞放电分析

这学期选修的一门课程,结果基本没有去过教室。在 Coursera 上学完了机器学习三部曲,感觉还挺有趣的。
这个是课程的期末报告,丢在博客里做个纪念。

一、引言

用金属或硅基微电极插入活体动物的大脑或神经核团,可以记录到神经细胞的放电,即动作电位 Action Potential(AP),或者称为峰电位 Spike。神经细胞的放电活动是神经科学研究中的一个重要方面,对于理解神经系统功能和疾病诊断具有重要价值。

在这个实验中,我们尝试使用主成分分析(PCA)对神经细胞的放电波形进行降维,并通过 k-means 聚类方法对其进行分类。实验的目标是通过分析 PCA 降维后的数据,看是否能够在较低维度中有效地区分不同的神经细胞放电模式。


二、实验步骤

  1. 数据准备

    我们使用了一个包含 个波形的数据集,每个波形长度 个采样点。

    首先,我们对这些波形数据进行了基本的探索性分析,以了解数据的分布和特征。将 spike 波形叠画在一起,如下图所示。

    SpikeWaveform

    为便于观察,从原始数据中以 为间隔选出若干个spike波形,绘制如下图。

    SpikeWaveformSelect

    观察发现,在 附近时,振幅有较大的不同。而在 附近时,振幅几乎一致。

  2. PCA 降维

    利用主成分分析(PCA),我们将 个采样点的spike波形降维到 维和 维。PCA 的核心思想是通过找到数据中的主成分来实现降维,从而保留数据中的主要信息。在我们的实验中,我们关注降维后的前两个和前三个主成分,以便在二维和三维空间中可视化数据,绘制如下图。代码使用 sklearn.decomposition 库中的 PCA 。

    对于 维,所有主成分的方差比例之和:

    对于 维,所有主成分的方差比例之和:

    PCA_2d

    PCA_3d

  3. K-means聚类

    利用 k-means 聚类算法,我们将降维后的数据分为 个类别。K-means 是一种常用的无监督学习算法,通过迭代寻找类别中心,将数据划分为 个簇。在这里,我们选择 ​,即假设有三种不同的神经细胞放电模式。分类结果如下图所示。代码参考Andrew Ng 机器学习课程-lab实验,已获得Machine Learning 专项课程证书

    K_means_2d

    K_means_3d

  4. 可视化结果

    最后,我们使用 matplotlib.pyplot对实验结果进行了可视化。对 维和 维 PCA 分类产生的结果进行绘制如下图所示,并对数据进行分析。

    波内的差异:

    • 附近达到最高点。在 附近达到最低点。 之后振幅逐渐降低,直到完全消失。

    波间的差异:

    • 第一类在 附近达到高点,振幅约为 ,是另外两类的一半。在 附近达到低点,振幅约为 ,是另外两类的一半。

    • 第二类与第三类在 附近达到高点,振幅约为 。在 附近达到低点,振幅约为

    • 而第二类在 附近再次达到高点,振幅约为 。第三类则是在 附近再次达到高点,振幅约为

    2d_SpikeWaveform

    3d_SpikeWaveform


三、反思与收获

在实验中,我第一次将 spike 波形叠画在一起时,发现数据十分混乱,看不出任何规律。于是我随机抽取了部分数据重新绘制波形,发现波形在 时有较大差异,猜测可以从三个角度出发对数据进行降维。

在使用 PCA 分类时,我最初画出的图像并没有设置 参数(即点的大小),我很难从图像中观察到比较明显的三个分类。查询资料后我将 参数设置为 ,这很好的帮助我观察数据是否可以有效分类成三个部分。

在使用 K-means 聚类算法时,我使用了随机选择 个数据生成初始 centroids,但实验中发现有时聚类的效果并不是很好。回忆 Andrew Ng 在课上讲过,可以多次使用 K-means 聚类算法,生成多个不同的聚类方案,最终选择一个 cost 最小的方案。在实验中并没有使用这种解决方法,在以后的实验中可以进行改进。

题外话:

机器学习是一个很有趣的方向,它与 的算法是完全不同的,我称之为暴力美学。

如果大学能重新来过的话,我也许不会参加 ,而是会进入实验室然后读研。

2021XXXXXXXXX,XXX,软件学院

2023.12.17