输入驱动HMM实战用SSM构建GLM-HMM模型揭示外部 covariates如何影响状态转移【免费下载链接】ssmBayesian learning and inference for state space models项目地址: https://gitcode.com/gh_mirrors/ssm38/ssmSSMState Space Models是一个强大的贝叶斯学习与推理工具包专注于状态空间模型的构建与分析。本文将带你通过实战案例学习如何使用SSM构建GLM-HMM广义线性模型-隐马尔可夫模型深入理解外部 covariates如何影响系统的状态转移过程。什么是GLM-HMMGLM-HMM是一种融合了广义线性模型GLM和隐马尔可夫模型HMM的混合模型。与传统HMM不同GLM-HMM假设观测概率依赖于外部输入 covariates而状态转移概率保持平稳。这种结构特别适合分析外部因素如何影响系统的动态行为例如动物在决策任务中的行为模式。在GLM-HMM中观测概率的计算方式如下对于类别c ≠ C $$ \Pr(y_t c \mid z_{t} k, u_t, w_{kc}) \frac{\exp{w_{kc}^\mathsf{T} u_t}}{1\sum_{c1}^{C-1} \exp{w_{kc}^\mathsf{T} u_t}} $$对于类别c C $$ \Pr(y_t c \mid z_{t} k, u_t, w_{kc}) \frac{1}{1\sum_{c1}^{C-1} \exp{w_{kc}^\mathsf{T} u_t}} $$其中$u_{t}$ 是输入协变量$w_{kc}$ 是与状态k和类别c相关的权重参数。快速入门用SSM构建GLM-HMM模型环境准备首先确保你已经安装了SSM库。如果还没有安装可以通过以下命令获取项目代码并安装git clone https://gitcode.com/gh_mirrors/ssm38/ssm cd ssm pip install -e .初始化GLM-HMM模型使用SSM构建GLM-HMM模型非常简单。以下代码展示了如何创建一个具有输入驱动观测的HMMimport ssm # 设置模型参数 num_states 3 # 离散状态数量 obs_dim 1 # 观测维度 num_categories 2 # 输出类别数量 input_dim 2 # 输入维度 # 创建GLM-HMM模型 glmhmm ssm.HMM(num_states, obs_dim, input_dim, observationsinput_driven_obs, observation_kwargsdict(Cnum_categories), transitionsstandard)实战案例模拟动物决策行为生成模型参数我们模拟一个动物在2AFC二选一决策任务中的行为。设置3个状态每个状态具有不同的GLM权重和转移概率# 设置生成模型的权重和转移矩阵 gen_weights np.array([[[6, 1]], [[2, -3]], [[2, 3]]]) gen_log_trans_mat np.log(np.array([[[0.98, 0.01, 0.01], [0.05, 0.92, 0.03], [0.03, 0.03, 0.94]]])) # 应用参数到模型 true_glmhmm.observations.params gen_weights true_glmhmm.transitions.params gen_log_trans_mat模拟输入序列和观测数据我们生成模拟的外部输入序列包括刺激值和偏置项然后使用模型生成观测数据# 创建外部输入序列 num_sess 20 # 会话数量 num_trials_per_sess 100 # 每个会话的试次数 inpts np.ones((num_sess, num_trials_per_sess, input_dim)) stim_vals [-1, -0.5, -0.25, -0.125, -0.0625, 0, 0.0625, 0.125, 0.25, 0.5, 1] inpts[:,:,0] np.random.choice(stim_vals, (num_sess, num_trials_per_sess)) inpts list(inpts) # 生成状态和观测数据 true_latents, true_choices [], [] for sess in range(num_sess): true_z, true_y true_glmhmm.sample(num_trials_per_sess, inputinpts[sess]) true_latents.append(true_z) true_choices.append(true_y)模型拟合与参数恢复最大似然估计MLE使用EM算法拟合模型# 创建新的GLM-HMM模型 new_glmhmm ssm.HMM(num_states, obs_dim, input_dim, observationsinput_driven_obs, observation_kwargsdict(Cnum_categories), transitionsstandard) # 拟合模型 N_iters 200 fit_ll new_glmhmm.fit(true_choices, inputsinpts, methodem, num_itersN_iters, tolerance10**-4)状态 permutation 与参数比较由于HMM状态具有可交换性我们需要对状态进行permutation以与真实模型比较from ssm.util import find_permutation # 对状态进行permutation new_glmhmm.permute(find_permutation(true_latents[0], new_glmhmm.most_likely_states(true_choices[0], inputinpts[0]))) # 比较恢复的权重和转移矩阵与真实参数 recovered_weights new_glmhmm.observations.params recovered_trans_mat np.exp(new_glmhmm.transitions.log_Ps)高级技巧最大后验估计MAP与交叉验证使用MAP估计处理小数据问题在数据量有限时MAP估计可以通过引入先验知识提高模型泛化能力# 创建带先验的GLM-HMM模型 prior_sigma 2 prior_alpha 2 map_glmhmm ssm.HMM(num_states, obs_dim, input_dim, observationsinput_driven_obs, observation_kwargsdict(Cnum_categories, prior_sigmaprior_sigma), transitionssticky, transition_kwargsdict(alphaprior_alpha, kappa0)) # 用MAP估计拟合模型 _ map_glmhmm.fit(true_choices, inputsinpts, methodem, num_itersN_iters, tolerance10**-4)交叉验证选择最佳模型通过交叉验证比较MLE和MAP估计的性能# 生成测试数据 num_test_sess 10 test_inpts np.ones((num_test_sess, num_trials_per_sess, input_dim)) test_inpts[:,:,0] np.random.choice(stim_vals, (num_test_sess, num_trials_per_sess)) test_inpts list(test_inpts) # 比较模型在测试数据上的似然度 mle_test_ll new_glmhmm.log_likelihood(test_choices, inputstest_inpts) map_test_ll map_glmhmm.log_likelihood(test_choices, inputstest_inpts)扩展应用多项GLM-HMMSSM同样支持多类别输出的GLM-HMM模型。以下是一个具有3个输出类别的示例# 设置多项GLM-HMM参数 num_states 4 num_categories 3 input_dim 2 # 创建多项GLM-HMM模型 multinom_glmhmm ssm.HMM(num_states, obs_dim, input_dim, observationsinput_driven_obs, observation_kwargsdict(Cnum_categories), transitionsstandard)总结与资源通过本文的介绍你已经了解了如何使用SSM构建和应用GLM-HMM模型来分析外部 covariates对状态转移的影响。关键步骤包括模型初始化与参数设置数据模拟与准备使用EM算法进行模型拟合参数恢复与模型评估高级估计方法与模型选择要深入学习更多内容可以参考项目中的示例代码和文档官方示例notebooks/2b-Input-Driven-Observations-(GLM-HMM).py.py)模型实现ssm/hmm.py观测模型ssm/observations.py希望这篇教程能帮助你更好地理解和应用GLM-HMM模型分析复杂的动态系统【免费下载链接】ssmBayesian learning and inference for state space models项目地址: https://gitcode.com/gh_mirrors/ssm38/ssm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考