首页
/ NeuromatchAcademy课程:贝叶斯决策模型拟合实战指南

NeuromatchAcademy课程:贝叶斯决策模型拟合实战指南

2025-07-10 07:48:17作者:廉彬冶Miranda

引言:理解贝叶斯模型拟合的核心概念

在神经科学和认知建模领域,贝叶斯决策理论为我们提供了一个强大的框架,用于理解大脑如何整合感官信息与先验知识来做出决策。本教程将带您深入探索如何将贝叶斯模型拟合到实验数据中,从而揭示认知过程背后的计算机制。

1. 构建似然函数阵列

理论基础

似然函数描述了在给定真实刺激x的情况下,大脑编码刺激ẍ的概率分布。在贝叶斯框架中,这代表了感官证据的可靠性。

实现步骤

  1. 定义刺激空间:从-10到10cm,步长0.1cm
  2. 假设可能的编码刺激值:在-8到8cm之间均匀分布1000个点
  3. 为每个可能的编码刺激值构建高斯似然函数
def compute_likelihood_array(x_points, stim_array, sigma=1.):
    likelihood_array = np.zeros((len(stim_array), len(x_points)))
    for i in range(len(stim_array)):
        likelihood_array[i, :] = my_gaussian(x_points, stim_array[i], sigma)
    return likelihood_array

可视化分析

通过热图展示似然函数阵列,x轴表示潜在真实刺激位置,y轴表示可能的神经编码。颜色强度代表概率密度。

2. 构建混合先验分布

模型设计

我们的先验是双组分混合分布:

  • 主要成分(95%):中心在0cm的高斯分布(σ=1cm)
  • 次要成分(5%):均匀分布(-8到8cm)
def compute_prior_array(x_points, p_independent, prior_sigma=1.):
    prior_common = my_gaussian(x_points, 0, prior_sigma)
    prior_independent = np.ones_like(x_points)/len(x_points)
    prior_mixed = (1-p_independent)*prior_common + p_independent*prior_independent
    return prior_mixed

3. 计算后验分布

贝叶斯推理

后验分布结合了似然和先验信息:

def compute_posterior_array(likelihood_array, prior_array):
    posterior_array = likelihood_array * prior_array[None, :]
    posterior_array /= np.sum(posterior_array, 1)[:, None]
    return posterior_array

4. 生成行为响应

响应模型

假设被试基于后验分布的均值做出响应:

def compute_resp(posterior_array, x_points):
    mean_resp = np.zeros(posterior_array.shape[0])
    for i in range(posterior_array.shape[0]):
        mean_resp[i] = np.sum(x_points * posterior_array[i, :])
    return mean_resp

5. 模型拟合实战

数据生成

  1. 选择真实刺激位置(-8到8cm,20个均匀点)
  2. 为每个位置生成100次响应

拟合过程

  1. 定义负对数似然函数
  2. 使用优化算法寻找最佳p_independent参数
def negative_log_likelihood(params, *args):
    p_independent = params[0]
    stimuli, responses = args
    
    # 计算模型预测
    prior = compute_prior_array(x, p_independent)
    posterior = compute_posterior_array(likelihood_array, prior)
    model_responses = compute_resp(posterior, x)
    
    # 计算对数似然
    log_likelihood = 0
    for i in range(len(stimuli)):
        idx = np.argmin(np.abs(hypothetical_stim - stimuli[i]))
        error = responses[i] - model_responses[idx]
        log_likelihood += np.log(my_gaussian([error], 0, response_sigma))
    
    return -log_likelihood

结果分析与解释

通过拟合过程,我们能够:

  1. 从模拟行为数据中恢复生成参数
  2. 验证模型的有效性
  3. 理解被试行为偏差的认知机制

应用价值与扩展

本教程介绍的方法可以应用于:

  • 感知决策研究
  • 认知偏差量化
  • 神经编码模型验证
  • 临床人群认知评估

通过调整模型结构(如改变先验形式或响应策略),可以研究更广泛的认知问题。

总结

贝叶斯模型拟合为我们提供了量化认知过程的强大工具。通过本教程,您已经掌握了从理论构建到实际拟合的完整流程,为未来的认知建模研究奠定了坚实基础。