实验:使用PCA分类用于神经细胞放电分析
这学期选修的一门课程,结果基本没有去过教室。在 Coursera 上学完了机器学习三部曲,感觉还挺有趣的。
这个是课程的期末报告,丢在博客里做个纪念。
一、引言
用金属或硅基微电极插入活体动物的大脑或神经核团,可以记录到神经细胞的放电,即动作电位 Action Potential(AP),或者称为峰电位 Spike。神经细胞的放电活动是神经科学研究中的一个重要方面,对于理解神经系统功能和疾病诊断具有重要价值。
在这个实验中,我们尝试使用主成分分析(PCA)对神经细胞的放电波形进行降维,并通过 k-means 聚类方法对其进行分类。实验的目标是通过分析 PCA 降维后的数据,看是否能够在较低维度中有效地区分不同的神经细胞放电模式。
二、实验步骤
数据准备
我们使用了一个包含
个波形的数据集,每个波形长度 个采样点。 首先,我们对这些波形数据进行了基本的探索性分析,以了解数据的分布和特征。将 spike 波形叠画在一起,如下图所示。
为便于观察,从原始数据中以
为间隔选出若干个spike波形,绘制如下图。 观察发现,在
附近时,振幅有较大的不同。而在 附近时,振幅几乎一致。 PCA 降维
利用主成分分析(PCA),我们将
个采样点的spike波形降维到 维和 维。PCA 的核心思想是通过找到数据中的主成分来实现降维,从而保留数据中的主要信息。在我们的实验中,我们关注降维后的前两个和前三个主成分,以便在二维和三维空间中可视化数据,绘制如下图。代码使用 sklearn.decomposition
库中的 PCA 。对于
维,所有主成分的方差比例之和: 对于
维,所有主成分的方差比例之和: K-means聚类
利用 k-means 聚类算法,我们将降维后的数据分为
个类别。K-means 是一种常用的无监督学习算法,通过迭代寻找类别中心,将数据划分为 个簇。在这里,我们选择 ,即假设有三种不同的神经细胞放电模式。分类结果如下图所示。代码参考Andrew Ng 机器学习课程-lab实验,已获得Machine Learning 专项课程证书。 可视化结果
最后,我们使用
matplotlib.pyplot
对实验结果进行了可视化。对维和 维 PCA 分类产生的结果进行绘制如下图所示,并对数据进行分析。 波内的差异:
- 在
附近达到最高点。在 附近达到最低点。 之后振幅逐渐降低,直到完全消失。
波间的差异:
第一类在
附近达到高点,振幅约为 ,是另外两类的一半。在 附近达到低点,振幅约为 ,是另外两类的一半。 第二类与第三类在
附近达到高点,振幅约为 。在 附近达到低点,振幅约为 。 而第二类在
附近再次达到高点,振幅约为 。第三类则是在 附近再次达到高点,振幅约为
- 在
三、反思与收获
在实验中,我第一次将 spike 波形叠画在一起时,发现数据十分混乱,看不出任何规律。于是我随机抽取了部分数据重新绘制波形,发现波形在
在使用 PCA 分类时,我最初画出的图像并没有设置
在使用 K-means 聚类算法时,我使用了随机选择
题外话:
机器学习是一个很有趣的方向,它与
的算法是完全不同的,我称之为暴力美学。 如果大学能重新来过的话,我也许不会参加
,而是会进入实验室然后读研。 2021XXXXXXXXX,XXX,软件学院
2023.12.17