作者|Cory Maklin

编译|VK

来源|Towards Datas Science

通常情况下,我们不能解析地求解积分,必须借助其他方法,其中就包括蒙特卡罗积分。你可能还记得,函数的积分可以解释为函数曲线下的面积。

蒙特卡罗积分的工作原理是在a和b之间的不同随机点计算一个函数,将矩形的面积相加,取和的平均值。随着点数的增加,所得结果接近于积分的实际解。

蒙特卡罗积分用代数表示:

与其他数值方法相比,蒙特卡罗积分特别适合于计算奇数形状的面积。

在上一节中,我们看到如何使用蒙特卡罗积分来确定后验概率,当我们知道先验和似然,但缺少规范化常数。

贝叶斯统计

后验概率是指贝叶斯公式中的一个特定项。

贝叶斯定理可以用来计算一个人在某一特定疾病的筛查测试中呈阳性的人实际上患有该病的概率。

如果我们已经知道P(A),P(B)和P(B | A),但想知道P(A | B),我们就用这个公式。例如,假设我们正在检测一种感染1%人口的罕见疾病。医学专业人员已经开发出一种高度敏感和特异的检测方法,但还不够完善。

99%的病人检测呈阳性

99%的健康患者检测为阴性

贝叶斯定理告诉我们:

假设我们有10000人,100人生病,9900人健康。此外,在给他们所有的测试后,我们会让99个生病的人测试生病,但是99个健康的人也测试生病。因此,我们将得到以下概率。

p(sick) = 0.01

p(not sick) = 1–0.01 = 0.99

p(+|sick) = 0.99

p(+|not sick) = 0.01

Bayes定理在概率分布中的应用

在前面的例子中,我们假设一个人患病的先验概率是一个已知的量,精确到0.001。

然而,在现实世界中,认为0.001的概率事实上如此精确是不合理的。一个给定的人患病的概率会因其年龄、性别、体重等而有很大差异。一般来说,我们对给定先验概率的认识还远远不够完善,因为它是从以前的样本中得出的(这意味着不同的人群可能会对先验概率给出不同的估计)。

在贝叶斯统计中,我们可以用先验概率的分布来代替这个0.001的值,这个分布捕捉了我们关于其真实值的先验不确定性。包含先验概率分布最终产生的后验概率也不再是单一数量;相反,后验概率也变成了概率分布。这与传统的观点相反,后者假设参数是固定的量。

归一化常数

正如我们在Gibbs抽样和Metropolis-Hasting的文章中看到的,蒙特卡洛方法可以用来计算归一化常数未知时的后验概率分布。

让我们来探究一下为什么我们首先需要一个标准化常数。在概率论中,规范化常数是一个函数必须乘以的常数,因此它的图下面积为1。还是不清楚?让我们看一个例子。

回想一下正态分布的函数可以写成:

2*pi的平方根是归一化常数。

让我们来看看我们是如何确定它的。我们从以下函数开始(假设均值为0,方差为1):

如果我们能画出一个曲线的话。

问题在于,如果我们取曲线下的面积,它不等于1,这要求它是一个概率密度函数。因此,我们将函数除以积分的结果(归一化常数)。

回到手头的问题,即如何在没有归一化常数的情况下计算后验概率……事实证明,对于连续样本空间,规范化常数可以重写为:

在这一点上,你应该考虑蒙特卡罗积分!

Python代码

让我们看看如何通过在Python中执行蒙特卡洛积分来确定后验概率。我们从导入所需的库开始,并设置随机种子以确保结果是可重复的。

import os

import sys

import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

import scipy.stats as st

np.random.seed(42)

然后我们设置β分布和二项分布的参数值。

a, b = 10, 10

n = 100

h = 59

thetas = np.linspace(0, 1, 200)

概率密度函数的范围从0到1。因此,我们可以简化方程。

在代码中,前面的等式写如下:

prior = st.beta(a, b).pdf(thetas)

likelihood = st.binom(n, thetas).pmf(h)

post = prior * likelihood

post /= (post.sum() / len(thetas))

最后,我们将先验、后验和似然的概率密度函数可视化。

plt.figure(figsize=(12, 9))

plt.plot(thetas, prior, label='Prior', c='blue')

plt.plot(thetas, n*likelihood, label='Likelihood', c='green')

plt.plot(thetas, post, label='Posterior', c='red')

plt.xlim([0, 1])

plt.xlabel(r'$\theta$', fontsize=14)

plt.ylabel('PDF', fontsize=16)

plt.legend();

结论

蒙特卡罗积分是求解积分的一种数值方法。它的工作原理是在随机点对函数求值,求和所述值,然后计算它们的平均值。

python算积分蒙特卡罗_蒙特卡罗计算积分相关推荐

  1. python蒙特卡洛方法圆周率_蒙特卡罗方法 python 实现

    蒙特卡罗(Monte Carlo)方法的精髓:用统计结果去计算频率,从而得到真实值的近似值. 一.求圆周率的近似值,采用 投点法 import numpy as np import matplotli ...

  2. python求表面积代码_用于计算python中的体积或表面积的良好算法

    我正在尝试计算3D numpy数组的体积(或表面积).在许多情况下,体素是各向异性的,并且我在每个方向上具有像素到厘米的转换因子. 有没有人知道找到工具包或包来做上述的好地方? 现在,我有一些内部代码 ...

  3. python分组统计标准化_分组计算和汇总_Python数据分析实战应用_数据挖掘与分析视频-51CTO学院...

    为什么学Python: 重要:数据分析是职业技能必备,Python是大数据分析** 趋势:Python是目前非常火的编程语言,使用人多 好学:学习简单,容易上手,使用灵活,可扩展强 **:会Pytho ...

  4. python配对t检验_置信度计算——t检验(配对样本t检验,AB实验置信度),T

    为什么计算置信度? 在推荐场景下,我们会研发一些策略,来提升业务指标,在做AB实验的时候,实验组跟base组的指标对标,并非稳定的胜利或者稳定的失败,观察7天或者14天的指标数据,会有正有负,那么怎么 ...

  5. python三维矩阵可视化_科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)...

    Mlab了解 Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化. 过程为: .建立数据源 .使用Filter( ...

  6. python算法攻略_算法基础及python实现笔记一(堆和DFS)

    排序及搜索 讲到排序搜索首先要认识 Python 的基本数据存储结构. NumPy and Pandas 包都提供一些容器可以利用. 堆 (stack) 先进后出原则.比如,一个吃货吃东西,一直吃一直 ...

  7. java算程序运行时间_关于计算Java程序运行时间

    第一种是以毫秒为单位计算的. Java代码 //伪代码 long startTime=System.currentTimeMillis();   //获取开始时间 doSomeThing();  // ...

  8. python求解优化问题_科学计算:最优化问题-2(Python)

    三.最小二乘法 最小二乘法(least square method)是一种数学优化技术.它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实 ...

  9. python提取实部虚部_光学性质计算后的介电函数实部与虚部的提取[python]

    写了一下介电函数的实部虚部的提取脚本,也可用于提取其他文件中两个关键词(行)中的数据,测试了OUTCAR中的读取,主函数如下: 主函数 #!/usr/bin/python # coding=utf-8 ...

最新文章

  1. VR规格表出来啦!Rift,Vive,PSVR,Acer和HP
  2. 开发健壮的企业级应用的研究
  3. u-boot2013.10引导linux3.10.30记录
  4. XGBoost对比RandomForest、GBDT、决策树、SVM,XGB+LR精度还能提升
  5. python抠透明图_python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
  6. CSS 水平对齐 text-align-last属性
  7. 学习笔记:pscc2020基础
  8. java equals 的区别_Java中equals和==的区别
  9. 图文详解教你在线换系统(无须U盘)
  10. chrome离线安装包的稳定下载方法
  11. 微信小程序web-view的H5页面如何使用微信直播功能
  12. 【深入理解Java】一篇文章带你彻底吃透Java NIO
  13. rms 文档权限服务器,Rms操作设置office系统文档权限
  14. 2009年最新搞笑语录
  15. [LeetCode]89.Gray Code
  16. 黑马程序员--Java学习10--访问权限
  17. 军民链智合创:BitCEO.world比特维度全球CEO发展大会@台北HiFi++
  18. Elasticsearch Date类型,时间存储相关说明
  19. SeaMonkey推荐
  20. 阿里大文娱深耕科幻片赛道,上线新片《芬奇》

热门文章

  1. S3C6410启动方式
  2. 关于猜数字游戏以及关机指令
  3. 计算机加法的电路原理及proteus仿真
  4. JS中的Storage
  5. 为什么PDF转成Word后是图片,怎么才能修改?
  6. 如何关闭Mybatis的DEBUG log打印
  7. 广东前海秋叶原集团:各种工程线 AV HDMI
  8. 关于事件相机的整理与思考
  9. vue引入Echarts画饼图详解
  10. 基础算法题——天梯赛座位分配(化繁为简)