作者|Cory Maklin
编译|VK
来源|Towards Datas Science

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

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

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

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

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

贝叶斯统计

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

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

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

贝叶斯定理告诉我们:

假设我们有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定理在概率分布中的应用

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

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

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

归一化常数

正如我们在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 stnp.random.seed(42)

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

a, b = 10, 10
n = 100
h = 59
thetas = (0, 1, 200)

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

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

prior = (a, b).pdf(thetas)
likelihood = (n, thetas).pmf(h)
post = prior * likelihood
post /= (() / len(thetas))

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

(figsize=(12, 9))
(thetas, prior, label='Prior', c='blue')
(thetas, n*likelihood, label='Likelihood', c='green')
(thetas, post, label='Posterior', c='red')
([0, 1])
(r'$\theta$', fontsize=14)
('PDF', fontsize=16)
();

结论

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

原文链接:

欢迎关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官方文档:

欢迎关注磐创博客资源汇总站:

C++ 偏微分数值计算库_蒙特卡罗计算积分 - 人工智能遇见磐创相关推荐

  1. C++ 偏微分数值计算库_一文带你了解计算流体力学CFD及其应用领域

    计算流体力学的发展 计算流体动力学(Computational Fluid Dynamics)简写为CFD,经过半个世纪的迅猛发展,这门学科已经是相当的成熟了,一个重要的标志就是近几十年来,各种CFD ...

  2. linux的系统监视器图片_用Nvidia Jetson Nano 2GB和Python构建一个价值60美元的人脸识别系统 - 人工智能遇见磐创...

    作者|Adam Geitgey 编译|Flin 来源|medium 新的Nvidia Jetson Nano 2GB开发板(今天宣布!)是一款单板机,售价59美元,运行带有GPU加速的人工智能软件. ...

  3. python算积分蒙特卡罗_蒙特卡罗计算积分

    作者|Cory Maklin 编译|VK 来源|Towards Datas Science 通常情况下,我们不能解析地求解积分,必须借助其他方法,其中就包括蒙特卡罗积分.你可能还记得,函数的积分可以解 ...

  4. C++ 偏微分数值计算库_【动手学计算机视觉】第一讲:图像预处理之图像去噪...

    我创建了一个知乎圈子:[平凡而诗意],专注于分享前沿技术.编程开发.实用工具等方面内容,感兴趣的可以首页搜索[平凡而诗意]加入我的圈子,让我们一起玩耍吧!QQ学习交流群:1077239487 平凡而诗 ...

  5. python科学计算库-数值计算库与科学计算库

    BLAS 接口 BLAS , LAPACK , ATLAS 这些数值计算库的名字很类似,他们之间有什么关系呢?BLAS是一组线性代数运算接口,目前是事实上的标准,很多数值计算/科学计算都实现了这套接口 ...

  6. java 数学计算库_数学计算工具类

    [java]代码库/** * Description: [数字计算工具类] * @version 1.0 */ public class MathUtils { /** 一百的常量 */ privat ...

  7. C++ 偏微分数值计算库_SymPy 符号计算基本教程

    SymPy 是一个由 Python 语言编写的符号计算库.我将在本文中简要地介绍如何利用 SymPy 进行符号计算.在介绍 SymPy 之前,我们首先要明确何谓符号计算?计算机代数系统又是什么? 什么 ...

  8. 基于计算思维的python程序设计王彬丽期末考试题库_基于计算思维的程序设计类课程教学实践...

    基于计算思维的程序设计类课程教学实践 滕剑锋 王玉锋 王 猛 刘二林 [摘 要] 摘 要 很多专业开设了程序设计类课程.如何在该课程教学中培养学 生的创新能力是大家普遍考虑的问题.计算思维的提出对于解 ...

  9. C++ 偏微分数值计算库_Windows下RTCGAToolbox库下载TCPA数据(RPPA)学习笔记

    1. RTCGAToolbox库加载 library(RTCGAToolbox) 2. 下载TCPA数据 2.1 下载代码 # Get the last run dates lastRunDate & ...

最新文章

  1. java培训面试技巧分享
  2. itchat微信调用图灵机器人API
  3. [转]Oh My Zsh,安装,主题配置
  4. 学linux需要关闭防火墙,一起学习linux 关闭防火墙命令
  5. Identity Server4学习系列四之用户名密码获得访问令牌
  6. CSS 盒模型之外边距 margin属性
  7. 关注健康,从现在开始(视力篇)
  8. python连接mongodb数据库、创建用户_mongodb对数据库创建用户名和密码
  9. junit5和junit4_JUnit声明异常– JUnit 5和JUnit 4
  10. mysql多线程复制binlog_MySQL 不同复制模式下,如何忽略binlog事件
  11. 宝峰对讲机编码写频工具
  12. 空间索引 - Redis/MongoDB/PostgreSQL/MySQL空间索引使用报告
  13. linux中错误无法解析域名无法下载,Linux无法解析域名的解决办法
  14. thread.sleep后没有恢复执行_申请法院强制执行很多年了,一直没有拿到钱,还能怎么办?...
  15. 用javascript预加载图片、css、js的方法研究
  16. 通过SQL语句或数据库,生成数据库模型PDM方法详解
  17. 【转载学习】Ceph新长支持稳定版本Luminous(12.x.x)新功能总结
  18. 【图像处理】卷积算法
  19. 威控复合机器人(二)------机械臂的控制
  20. 软件工程导论-实验报告-软件测试

热门文章

  1. 镍铁的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  2. Unicode编码与C语言宽字符
  3. 使用Scrapy框架爬取艺龙网机票信息
  4. 在线点餐外卖系统 毕业设计毕业论文参考(3)后台管理功能
  5. 新一代WiFi技术HaLow盯上智能家庭和物联网
  6. 企业迁移云主机需要注意的事项有哪些
  7. 没技术不会做APP,一样可以制作App
  8. 自定义view--仿照 体育app,股票,基金,电商,区块链APP 数据信息栏展示(还没写完)
  9. matlab最大值的角码怎么编辑,基于MATLAB的桩锚支护设计参数优化的力学模拟分析...
  10. js进阶 - 收藏集 - 掘金