多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

10分钟上手SSM:用HMM模拟神经 spike 数据,Poisson观测模型实战教程

10分钟上手SSM:用HMM模拟神经 spike 数据,Poisson观测模型实战教程 10分钟上手SSM用HMM模拟神经 spike 数据Poisson观测模型实战教程【免费下载链接】ssmBayesian learning and inference for state space models项目地址: https://gitcode.com/gh_mirrors/ssm38/ssmSSMState Space Models是一个专注于贝叶斯学习和状态空间模型推断的Python库特别适用于处理时间序列数据。本教程将带你快速掌握如何使用SSM中的隐马尔可夫模型HMM结合Poisson观测模型来模拟和分析神经 spike 数据让你在10分钟内完成从环境搭建到实际数据分析的全流程。 准备工作环境搭建与数据准备1. 安装SSM库首先需要克隆项目仓库并安装依赖git clone https://gitcode.com/gh_mirrors/ssm38/ssm cd ssm pip install -r requirements.txt pip install .2. 了解Poisson HMM模型Poisson HMM是一种适用于计数型时间序列数据的概率模型特别适合分析神经 spike 数据神经元放电次数。其核心组件包括隐藏状态表示神经活动的潜在状态如静息、规划、运动等状态转移概率控制状态之间的转换Poisson观测模型描述每个状态下神经放电的概率分布相关实现代码可参考ssm/hmm.py 和 ssm/observations.py 实战步骤从数据到模型1. 数据格式与预处理神经 spike 数据通常是三维数组(神经元数量, 时间窗口, trials)需要转换为SSM要求的格式。以下是数据预处理的关键步骤def format_spikes(FR, idx): datas [] for i in idx: spikes_cur np.squeeze(FR[:,:,i]) # 移除含NaN的列 idx_keep np.invert(np.any(np.isnan(spikes_cur), axis0)) spikes_cur spikes_cur[:,idx_keep] # 转置并转换为整数类型Poisson模型要求 datas.append(np.asarray(spikes_cur.T, dtypeint)) return datas完整代码示例可参考 notebooks/Poisson-HMM-Demo.py2. 构建Poisson HMM模型使用SSM构建一个5状态的Poisson HMM用于区分神经活动的不同阶段import ssm num_states 5 # 1个基线状态 2个左移状态 2个右移状态 num_neurons train_datas[0].shape[1] # 创建HMM模型 hmm ssm.HMM(num_states, num_neurons, observationspoisson, # 使用Poisson观测模型 transitionsconstrained, # 约束状态转移 transition_kwargs{transition_mask: transition_mask})状态定义状态1基线静息状态状态2右移规划状态状态3右移执行状态状态4左移规划状态状态5左移执行状态3. 模型训练与状态推断使用EM算法拟合模型并对测试数据进行状态推断# 训练模型 lls hmm.fit(train_datas, methodem) # 对测试数据进行状态推断 test_trial_spikes np.random.choice(test_datas) posterior hmm.filter(test_trial_spikes) 结果可视化与分析1. 神经 spike raster 图原始神经 spike 数据的可视化展示了不同阶段的神经活动变化plt.figure(figsize(10,6)) plt.imshow(FR[:,:,1], aspectauto, cmapgray) plt.axvline(xplan_start, colorred, linewidth5, labelPlan Start) plt.axvline(xmove_start, colorblue, linewidth5, labelMove Start) plt.ylabel(Unit) plt.xlabel(Time) plt.legend()2. 目标位置可视化实验中猴子需要 reach 到8个目标位置可视化如下plt.figure(figsize(6,6)) plt.scatter(xlist, ylist, markero, s10**3, edgecolorsblack, facecolorsgray) for i in range(num_targets): plt.annotate(str(i1), (xlist[i]-5, ylist[i]), colorwhite, weightbold, size16) plt.title(Target Locations)3. 状态后验概率模型推断出的状态后验概率展示了神经活动如何随时间在不同状态间转换plt.figure(figsize(10, 4)) for i in range(num_states): plt.plot(posterior[:,i], labelState %d % i) plt.legend() 模型评估解码准确率通过计算模型对reach方向的解码准确率来评估性能window 50 # 积分窗口大小ms num_correct 0 total_test_trials len(test_right_idx) len(test_left_idx) # 计算右移测试集准确率 for i in test_right_idx: trial all_trials[i] posterior simple_hmm.filter(trial) p_right np.sum(posterior[-window:, 2]) # 右移执行状态 p_left np.sum(posterior[-window:, 4]) # 左移执行状态 if p_right p_left: num_correct 1 # 计算左移测试集准确率 # ...类似代码... print(Percent accuracy on test set %f % (num_correct / total_test_trials * 100)) 扩展学习资源官方文档doc/index.rst更多示例examples/IPython notebooksnotebooks/通过本教程你已经掌握了使用SSM库构建Poisson HMM模型分析神经 spike 数据的基本流程。尝试调整状态数量或修改转移矩阵约束看看能否进一步提高模型性能【免费下载链接】ssmBayesian learning and inference for state space models项目地址: https://gitcode.com/gh_mirrors/ssm38/ssm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表