首页 > 编程语言 >Python用PyMC贝叶斯GLM广义线性模型、NUTS采样器拟合、后验分布可视化

Python用PyMC贝叶斯GLM广义线性模型、NUTS采样器拟合、后验分布可视化

时间:2023-08-15 20:11:07浏览次数:46  
标签:idata GLM 采样器 贝叶斯 线性 回归线 后验

全文链接:https://tecdat.cn/?p=33436

原文出处:拓端数据部落公众号

尽管贝叶斯方法相对于频率主义方法的理论优势已经在其他地方进行了详细讨论,但其更广泛采用的主要障碍是“可用性”。而使用贝叶斯方法,客户可以按照自己认为合适的方式定义模型。

线性回归

在此示例中,我们将帮助客户从最简单的 GLM – 线性回归开始。 一般来说,频率论者对线性回归的看法如下:

image.png

然后,我们可以使用普通最小二乘法(OLS)或最大似然法来找到最佳拟合。

概率重构

贝叶斯主义者对世界采取概率观,并用概率分布来表达这个模型。我们上面的线性回归可以重新表述为:

image.png

换句话说,我们将Y其视为一个随机变量(或随机向量),其中每个元素(数据点)都根据正态分布分布。此正态分布的均值由具有方差sigma的线性预测变量提供。

PyMC 中的贝叶斯 GLM

要开始在 PyMC 中构建 GLM,让我们首先导入所需的模块。

   


print(f"Running on PyMC v{pm.__version__}")

image.png

   

az.style.use("arviz-darkgrid")

数据

本质上,我们正在创建一条由截距和斜率定义的回归线,并通过从均值设置为回归线的正态采样来添加数据点。

   

y = true_regression_line + rng.normal(scale=0.5, size=size)

data = pd.DataFrame(dict(x=x, y=y))
   

plt.legend(loc=0);

image.png

估计模型

让我们将贝叶斯线性回归模型拟合到此数据。

   

    # 定义似然函数
    likelihood = Normal("y", mu=intercept + slope * x, sigma=sigma, observed=y)

    # 使用NUTS采样推断
    idata = sample(3000)

image.png

image.png

对于了解概率编程的人来说,这应该是相当可读的。

   

    import bambi as bmb

image.png

image.png

   
idata = model.fit(draws=3000)

image.png

要短得多,但这段代码与之前的规范完全相同(如果我们愿意,您也可以更改先验和其他所有内容)。

分析模型

贝叶斯推理不仅给了我们一条最佳拟合线(就像最大似然那样),而是给出了合理参数的整个后验分布。让我们绘制参数的后验分布和我们绘制的单个样本。

   
az.plot_trace(idata, figsize=(10, 7));

image.png

左侧显示了我们的边缘后验 – 对于 x 轴上的每个参数值,我们在 y 轴上得到一个概率,告诉我们该参数值的可能性。

首先,各个参数(左侧)的采样链看起来均匀且平稳(没有大的漂移或其他奇怪的模式)。

其次,每个变量的最大后验估计值(左侧分布中的峰值)非常接近用于生成数据的真实参数(x是回归系数,sigma是我们正态的标准差)。

因此,在 GLM 中,我们不仅有一条最佳拟合回归线,而且有许多。后验预测图从后验图(截距和斜率)中获取多个样本,并为每个样本绘制一条回归线。我们可以直接使用后验样本手动生成这些回归线。

   
idata.posterior["y_model"] = idata.posterior["Intercept"] + idata.posterior["x"] * xr.DataArray(x)
   
_, ax = plt.subplots(figsize=(7, 7))
az.plot_lm(idata=idata, y="y", num_samples=100, axes=ax, y_model="y_model")
ax.set_title("Posterior predictive regression lines")
ax.set_xlabel("x");

image.png

58afa5d526110646b5d5255a310ea7787bbf71e9b45131822b00e8fb69745e88.png

我们估计的回归线与真正的回归线非常相似。但是由于我们只有有限的数据,我们的估计存在不确定性,这里用线的可变性来表示。

总结

  • 可用性目前是更广泛采用贝叶斯统计的巨大障碍。
  • Bambi允许使用从 R 借用的便捷语法进行 GLM 规范。然后可以使用pymc 进行推理。
  • 后验预测图使我们能够评估拟合度和其中的不确定性。

延伸阅读

有关其他背景信息,以下是一些关于贝叶斯统计的好资源:

版本信息:

   
%load_ext watermark

%watermark -n -u -v -iv -w -p pytensor
   

Python implementation: CPython
Python version       : 3.11.4
IPython version      : 8.14.0

pytensor: 2.14.2

pymc      : 5.7.2+0.gd59a960f.dirty
bambi     : 0.12.0
arviz     : 0.16.1
xarray    : 2023.7.0
matplotlib: 3.7.2
numpy     : 1.25.2
sys       : 3.11.4 | packaged by conda-forge | (main, Jun 10 2023, 18:08:17) [GCC 12.2.0]
pandas    : 2.0.3

Watermark: 2.4.3

building-supply-chains-1536x1536.webp

最受欢迎的见解

1.matlab使用贝叶斯优化的深度学习

2.matlab贝叶斯隐马尔可夫hmm模型实现

3.R语言Gibbs抽样的贝叶斯简单线性回归仿真

4.R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归

5.R语言中的Stan概率编程MCMC采样的贝叶斯模型

6.R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数

7.R语言使用贝叶斯 层次模型进行空间数据分析

8.R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型

9.matlab贝叶斯隐马尔可夫hmm模型实现

标签:idata,GLM,采样器,贝叶斯,线性,回归线,后验
From: https://www.cnblogs.com/tecdat/p/17632326.html

相关文章

  • CentOS7 上安装部署chatglm2-6b
          按照说明文档,先按照了最新版本的Python,官网下载了最新的版本3.11后,一顿操作感觉分分钟就安装完了。但是继续安装chatglm2-6b所需的依赖包时,就遇到了N多坑点,为了解决这些坑点,耗时真的很长(按周计算的那种)。如果是CPU服务器,则至少需要30G内存。      ......
  • ChatGLM2-6B 微调改变AI自我认知
    一、前言上篇说到ChatGLM2-6B及百川大模型的本地部署实战,实际商业项目中可能还需要在此基础上对模型进行相关微调再进行应用。本篇文章带大家微调入门教学。注意:当前为AI技术高速发展期,技术更新迭代快,本文章仅代表作者2023年8月的观点。  上篇文章:ChatGLM2-6B清华......
  • chatglm.cpp使用手记
    目前绝大多数LLM模型都是python实现的,运行速度有限(包括ChatGLM2-6b),幸好有大神将其用C++重写了一遍,让运行速度大大提高。项目地址:li-plus/chatglm.cpp:C++implementationofChatGLM-6B&ChatGLM2-6B(github.com)部署过程如下(环境:WSL2ubuntu22.04,显卡:N卡RTX4060)-注......
  • 开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2等模型,开
    开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2等模型,开箱即用1.介绍TextGen实现了多种文本生成模型,包括:LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用。1.1最新更新[2023/06/15]v1.0.0版本:新增ChatGLM/LLaMA/Bloom模......
  • 使用阿里云微调chatglm2
    完整的代码可以参考:https://files.cnblogs.com/files/lijiale/chatglm2-6b.zip?t=1691571940&download=true#%%[markdown]##微调前#%%model_path="/mnt/workspace/ChatGLM2-6B/chatglm2-6b"fromtransformersimportAutoTokenizer,AutoModel#载入Tokenizer......
  • 在矩池云使用ChatGLM-6B & ChatGLM2-6B
    ChatGLM-6B和ChatGLM2-6B都是基于GeneralLanguageModel(GLM)架构的对话语言模型,是清华大学KEG实验室和智谱AI公司于2023年共同发布的语言模型。模型有62亿参数,一经发布便受到了开源社区的欢迎,在中文语义理解和对话生成上有着不凡的表现。ChatGLM-6B可以在消费级......
  • 阿里云部署 ChatGLM2-6B 与 langchain+chatGLM
    1.ChatGLM2-6B部署更新系统apt-getupdate安装gitapt-getinstallgit-lfsgitinitgitlfsinstall克隆ChatGLM2-6B源码gitclonehttps://github.com/THUDM/ChatGLM2-6B.git克隆chatglm2-6b模型#进入目录cdChatGLM2-6B#创建目录mkdirmodel#进入......
  • Native Instruments Kontakt 7 - 专业音频采样器mac/win版
    NativeInstrumentsKontakt7是一款专业音频采样器,被广泛用于音乐制作、音频设计和声音效果制作等领域。它提供了丰富的采样库和强大的编辑功能,使用户可以创建出高质量的音频效果和音乐作品。下面将详细介绍Kontakt7的特点和功能。点击获取Kontakt7 大量采样库:Kontak......
  • ubuntu上搭建ChatGLM2-6b环境及ptuing微调训练的坑
    清华大学的chatGLM2-6B可以说是目前亚洲唯一能打的对中文支持不错的LLM大模型,网上已经有很多介绍如何在本机搭建环境的文章,就不再重复了,这里记录下最近踩的一些坑:1、为啥要使用ubuntu?chatGLM2-6b项目里有很多.sh文件,在windows下要正常运行通常要折腾一番,最后能不能全部通关,讲究......
  • ChatGLM
    ChatGLM本人是做视觉模型的,后续大模型这块在自然语言的火起来,后续视觉大模型要发展也是结合多模态,突然发现语言模型逃不开,还是需要学习点。在语言大模型这块呢,因为金钱和能力限制,坐不了真正意义的大模型,模型参数估计限制在10B内,为此需要找到合适的技术方向进行学习。(太大参数模型......