0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Python中实现一个简单的贝叶斯模型?

数据分析与开发 来源:Datawhale 作者:张峰 2021-06-23 17:52 次阅读

即使对于一个非数据科学家来说,贝叶斯统计这个术语也已经很流行了。你可能在大学期间把它作为必修课之一来学习,而没有意识到贝叶斯统计有多么重要。事实上,贝叶斯统计不仅仅是一种特定的方法,甚至是一类方法;它是一种完全不同的统计分析范式。

为什么贝叶斯统计如此重要

贝叶斯统计为你提供了在新数据的证据中更新你的评估工具,这是一个在许多现实世界场景中常见的概念,如跟踪大流行病,预测经济趋势,或预测气候变化。贝叶斯统计是许多较著名的统计模型的支柱,如高斯过程。

重要的是,学习贝叶斯统计原理可以成为你作为一个数据科学家的宝贵财富,因为它给你一个全新的视角来解决具有真实世界动态数据来源的新问题。

这篇文章将介绍贝叶斯统计的基本理论,以及如何在Python中实现一个简单的贝叶斯模型。

目录表:

01 什么是贝叶斯统计?

02 贝叶斯编程简介

03 贝叶斯的工作流程

04 建立一个简单的贝叶斯模型

闲话少说,进入主题!让我们开始介绍贝叶斯统计编程。

1 什么是贝叶斯统计?

你可能会在互联网上的某个地方或在你的课堂上看到这个方程式。

05529712-ca9c-11eb-9e57-12bb97331649.png

如果你没有,也不要担心,因为我将向你简要介绍贝叶斯的基本原则以及该公式的工作原理

关键术语

上述贝叶斯公式的组成部分一般被称为概率声明。例如,在下面的后验概率声明中,该术语的意思是 "给定观测值y,theta(θ)的概率是多少 "。

Theta(θ)是这里的未知数,被称为我们所关心的参数。参数的不确定性遵循一个特定的概率分布,可以使用与数据相关的模型组合来估计有关参数。

上述贝叶斯统计表述也被称为反概率,因为它是从观察到参数开始的。换言之,贝叶斯统计试图从数据(效果)中推断出假设(原因),而不是用数据来接受/拒绝工作假设。

贝叶斯公式

那么,贝叶斯公式告诉我们什么呢?

后验概率是我们想知道的主要部分,因为Theta(θ)是我们感兴趣的参数。

观察的可能性仅仅意味着,在Theta(θ)的特定值下,数据y在现实世界中出现的可能性有多大。

先验概率是我们对Theta (θ)应该是什么样子的最佳猜测(例如,也许它遵循正态或高斯分布)。

归一化常数只是一个系数常数,使整个方程积分为1(因为概率不能低于0和高于1)。

现在我们已经涵盖了贝叶斯统计的基本理论,让我们开始为即将到来的贝叶斯编程教程进行设置。

2 贝叶斯编程介绍

安装

首先,安装PyMC3作为我们执行贝叶斯统计编程的首选库。

推荐使用conda

conda install -c conda-forge pymc3

也可使用pip

pip install pymc3

获取数据

我们将使用描述美国家庭中氡气(Radon)浓度的氡气数据集。氡气已被证明是非吸烟者患肺癌的最高预测因素之一,其浓度通常与房屋的整体条件(例如,是否有地下室,等等)有关。

首先,在你的笔记本或终端运行以下命令:

!wget "https://raw.githubusercontent.com/fonnesbeck/mcmc_pydata_london_2019/master/data/radon.csv"

确保你的数据位于你的笔记本的同一目录内。

数据探索

import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import numpy as npradon = pd.read_csv('./radon.csv', index_col=0)radon.head()

我们注意到,有29列描述了一个家庭中氡(Radon)的浓度。

数据集汇总

让我们画一张图,显示 "ANOKA "的氡的对数浓度分布,用一条垂直线来说明对数浓度为1.1。

anoka_radon = radon.query('county=="ANOKA"').log_radon sns.distplot(anoka_radon, bins=16)plt.axvline(1.1)

密度分布

ANOKA地区氡气对数浓度超过1.1的家庭比例似乎相当大,这是一个令人担忧的趋势......

3 贝叶斯工作流

现在我们有了数据,让我们进行贝叶斯推断。一般来说,这个过程可以分解为以下三个步骤。

第1步:指定一个概率模型

这是作为建模者要多做选择的地方。你将需要为一切指定最可能的概率分布函数(例如,正态或高斯、考奇、二项式、t分布、F分布,等等)。

我所说的一切,是指包括未知参数、数据、协变量、缺失数据、预测在内的一切。所以,用不同的分布函数做实验,看看在现实世界的场景中如何起效。

第2步:计算后验分布

现在你将计算这个概率项,给定贝叶斯方程右边的所有项。

第3步:检查你的模型

与其他ML模型一样,评估你的模型是关键。回到第一步,检查你的假设是否有意义。如果没有,改变概率分布函数,并反复重申。

4 建立一个简单的贝叶斯模型

现在,我将向你介绍一个简单的编程练习来建立你的第一个贝叶斯模型。

第1步:定义一个贝叶斯模型

首先,让我们定义我们的氡气——贝叶斯模型,有两个参数,平均值(μ-"miu")和其偏差(σ-"sigma")。这些参数(μ和σ)还需要通过选择对应的分布函数来建立模型(记住:我们必须为所有参数定义概率分布)。

对于这些,我们选择的函数是正态/高斯分布(μ=0,σ=10)和均匀分布。你可以在模型的验证检查中重新校准这些值,如上面步骤3所述。

from pymc3 import Model, Normal, Uniformwith Model() as radon_model: μ = Normal(’μ’, mu=0, sd=10) σ = Uniform(’σ’, 0, 10)

下一步是用另一个概率分布来编译radon_model本身。

**with** radon_model: dist = Normal('dist', mu=μ, sd=σ, observed=anoka_radon)

第2步:用数据进行模型拟合

现在,我们需要用数据来拟合这个模型(即训练)。

from pymc3 import sample **with** radon_model: samples = sample(1000, tune=1000, cores=2, random_seed=12)

让我们画出我们的参数μ在训练后的分布情况,同时画出95%的置信线。

from arviz import plot_posterior plot_posterior(samples, var_names=['μ'], ref_val=1.1)

好吧,看来1.1的对数浓度可能不是那么糟糕,因为它是在分布的尾端(只有2.2%的样品的对数浓度大于1.1)。

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 贝叶斯
    +关注

    关注

    0

    文章

    77

    浏览量

    12553
  • python
    +关注

    关注

    55

    文章

    4778

    浏览量

    84439

原文标题:为什么贝叶斯统计如此重要?

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用Python构建LSTM神经网络模型

    构建LSTM(长短期记忆)神经网络模型涉及多个步骤的过程。以下是使用Python和Ke
    的头像 发表于 11-13 10:10 141次阅读

    为THS3001构建简单的SPICE模型

    电子发烧友网站提供《为THS3001构建简单的SPICE模型.pdf》资料免费下载
    发表于 10-29 10:11 0次下载
    为THS3001构建<b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>简单</b>的SPICE<b class='flag-5'>模型</b>

    滤波和卡尔曼滤波的区别

    滤波和卡尔曼滤波是两种常用的滤波方法,它们在信号处理、导航、机器人定位等领域有着广泛的应用。
    的头像 发表于 08-01 15:25 488次阅读

    在PyTorch搭建简单模型

    在PyTorch搭建简单模型通常涉及几个关键步骤:定义模型结构、加载数据、设置损失函数
    的头像 发表于 07-16 18:09 1772次阅读

    何在Tensorflow实现反卷积

    在TensorFlow实现反卷积(也称为转置卷积或分数步长卷积)是涉及多个概念和步骤的过程。反卷积在深度学习领域,特别是在图像分割、图像超分辨率、以及生成
    的头像 发表于 07-14 10:46 538次阅读

    python训练出的模型怎么调用

    Python,训练出的模型可以通过多种方式进行调用。 1. 模型保存与加载 在Python
    的头像 发表于 07-11 10:15 1575次阅读

    tensorflow简单模型训练

    TensorFlow开始,然后介绍如何构建和训练简单的神经网络模型。 1. 安装TensorFlow 首先,我们需要安装TensorFlow。TensorFlow支持多种编程语言,
    的头像 发表于 07-05 09:38 498次阅读

    再次问鼎全球首富

    今日,亚马逊创始人杰夫·再次荣登全球首富宝座,成功超越了法国奢侈品巨头LVMH老板伯纳德·阿尔诺。在全球富豪500强排名以惊
    的头像 发表于 06-12 17:36 632次阅读

    本月再次出售亚马逊股票,套现85亿美元 

    美国证交会(SEC)公布的文件显示,是在上周末开启了本次股票出售行动,于周二结束。其间,总共出售 23.7 亿美元估值的 14006906 股亚马逊股票。
    的头像 发表于 02-21 15:50 469次阅读

    split在python的用法

    split在python的用法 split()是Python非常常用的字符串函数,它能够根据指定的分隔符将
    的头像 发表于 12-25 15:12 1964次阅读

    如何用BUCK电路简单实现可靠的负电源?

    如何用BUCK电路简单实现可靠的负电源?
    的头像 发表于 12-05 15:12 761次阅读
    如何用BUCK电路<b class='flag-5'>简单</b><b class='flag-5'>实现</b><b class='flag-5'>一</b><b class='flag-5'>个</b>可靠的负电源?

    如何从简单的数学表达式创建Saber模型

    如何从简单的数学表达式创建Saber模型,将你的输出描述为输入的函数?例如 out=a*
    的头像 发表于 12-05 13:42 685次阅读
    如何从<b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>简单</b>的数学表达式创建<b class='flag-5'>一</b><b class='flag-5'>个</b>Saber<b class='flag-5'>模型</b>?

    python软件怎么运行代码

    Python种高级编程语言,它被广泛用于开发各种类型的应用程序,从简单的脚本到复杂的网络应用和机器学习模型。要运行Python代码,您需
    的头像 发表于 11-28 16:02 854次阅读

    python运行次自动再次运行

    使用循环语句是最简单实现自动运行功能的方法。在Python,可以使用while循环或for循环来
    的头像 发表于 11-23 15:52 1836次阅读

    pythoninput怎么输入3

    Python ,可以使用 input() 函数来获取用户的输入。如果你想要输入多个值,可以根据具体的需求使用以下方法。 方法:使用多个 input 函数 最简单的方法是使用多个
    的头像 发表于 11-23 15:31 9697次阅读