蒙特卡洛概率抽样简介

news2024/11/28 16:45:03

蒙特卡罗方法是一类对概率分布进行随机抽样的技术

在许多问题领域中,描述或估计概率分布相对简单,但计算所需的数量却很棘手。这可能是由于多种原因造成的,例如domain的随机性质或随机变量的指数级数量增长。

相反,可以通过使用随机抽样(称为蒙特卡罗方法,Monte Carlo methods)来对想要的量进行近似。这些方法最初是在第一台计算机被创建时使用的,并且在科学和工程的所有领域(包括人工智能和机器学习)中仍然普遍存在。

在这篇文章中,您将发现用于采样概率分布的蒙特卡罗方法。

读完这篇文章,你会知道:

  • 通常,我们无法计算所需的概率量,但我们可以直接或间接定义随机变量的概率分布。
  • 蒙特卡罗采样是一类从概率分布中随机抽样的方法。
  • 蒙特卡洛采样为许多机器学习方法(例如 重采样 [resampling]、超参数调整 [hyperparameter tuning] 和 集成学习[ensemble learning])提供了基础。

概述

本教程分为四个部分;分别是:

  • 什么是抽样?
  • 为什么需要抽样?
  • 什么是蒙特卡罗方法?
  • 蒙特卡罗方法的示例

什么是抽样?

在统计学中,抽样(Sampling)是一种推论统计方法,它是指从目标总体(Population,或称为总体)中抽取一部分个体作为样本(Sample),通过观察样本的某一或某些属性,依据所获得的数据对总体的数量特征得出具有一定可靠性的估计判断,从而达到对总体的认识。

总体

目标是所要研究的对象的全体。例如,制造商检查某个批次的产品质量是否合格,目标总体就是这一批次的产品。

抽样总体是用于从中抽取样本的总体。按理,抽样总体应该与目标总体一致,但实践中时常发生不一致的情况。例如,科学家通过小白鼠试验来检测药物用于人类总体的效果。

抽样框

在抽样之前,总体应划分成抽样单位,抽样单位互不重叠且能合成总体,总体中的每个个体只属于一个单位。抽样框是一份包含所有抽样单元的名单。

抽样方法

简单随机抽样

在这里插入图片描述
选择简单随机样本的示意图

简单随机抽样(simple random sampling),也叫纯随机抽样。从总体N个单位中随机地抽取n个单位作为样本,使得每一个样本都有相同的概率被抽中。特点是:每个样本单位被抽中的概率相等,样本的每个单位完全独立,彼此间无一定的关联性和排斥性。简单随机抽样是其它各种抽样形式的基础。通常只是在总体单位之间差异程度较小和数目较少时,才采用这种方法。

系统抽样

在这里插入图片描述
使用系统抽样技术选择随机样本的示意图

系统抽样(systematic sampling),也称等距抽样。将总体中的所有单位按一定顺序排列,在规定的范围内随机地抽取一个单位作为初始单位,然后按事先规定好的规则确定其他样本单位。先从数字1到k之间随机抽取一个数字r作为初始单位,以后依次取r+k、r+2k……等单位。这种方法操作简便,可提高估计的精度。

分层抽样

在这里插入图片描述
使用分层抽样技术选择随机样本的示意图

分层抽样(stratified sampling)。将抽样单位按某种特征或某种规则划分为不同的层,然后从不同的层中独立、随机地抽取样本。从而保证样本的结构与总体的结构比较相近,从而提高估计的精度。

整群抽样

整群抽样(cluster sampling)。又称群集抽样,将总体中若干个单位合并为组,抽样时直接抽取群,然后对中选群中的所有单位全部实施调查。抽样时只需群的抽样框,可简化工作量,缺点是估计的精度较差。

采样的必要性

概率领域以及更广泛的机器学习领域存在许多问题,我们无法直接计算解析解(analytical solution)。

事实上,可能有人认为,对于大多数实用的概率模型来说,精确推理可能是棘手的。

对于大多数具有实际意义的概率模型来说,精确的推理是很困难的,因此我们必须诉诸某种形式的近似。— 第 523 页,《Pattern Recognition and Machine Learning》,2006 年。

所需的计算通常是离散分布的总和或连续分布的积分并且难以计算。由于许多原因,计算可能会很棘手,例如大量随机变量、domain的随机性质、观测中的噪声、观测的缺乏等等。

在此类问题中,通常可以通过计算模拟直接或间接地定义或估计所涉及的随机变量的概率分布。

可以使用采样来代替直接计算数量。

采样提供了一种灵活的方法,以降低成本来近似许多求和和积分。— 第 590 页,《Deep Learning》,2016 年。

可以从概率分布中随机抽取样本并用于近似所需的数量。

这种从概率分布中随机抽样的通用技术称为蒙特卡罗方法(Monte Carlo methods)。

什么是蒙特卡洛方法

蒙特卡罗方法(简称 MC),也称统计模拟方法,是一类对概率分布进行随机采样的技术。20世纪40年代,在科学家冯·诺伊曼、斯塔尼斯拉夫·乌拉姆和尼古拉斯·梅特罗波利斯于洛斯阿拉莫斯国家实验室为核武器计划工作时,发明了蒙特卡罗方法。因为乌拉姆的叔叔经常在摩纳哥的蒙特卡洛赌场输钱得名,而蒙特卡罗方法正是以概率为基础的方法。

蒙特卡罗方法是1940年代中期由于科学技术的发展和电子计算机的发明,而提出的一种以概率统计理论为指导的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。

蒙特卡罗方法在金融工程学、宏观经济学、生物医学、计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)、机器学习等领域应用广泛。[1]

基本概念

通常蒙特卡罗方法可以粗略地分成两类:

  • 一类是所求解的问题本身具有内在的随机性,借助计算机的运算能力可以直接模拟这种随机的过程。例如在核物理研究中,分析中子在反应堆中的传输过程。中子与原子核作用受到量子力学规律的制约,人们只能知道它们相互作用发生的概率,却无法准确获得中子与原子核作用时的位置以及裂变产生的新中子的行进速率和方向。科学家依据其概率进行随机抽样得到裂变位置、速度和方向,这样模拟大量中子的行为后,经过统计就能获得中子传输的范围,作为反应堆设计的依据。
  • 另一种类型是所求解问题可以转化为某种随机分布的特征数,比如随机事件出现的概率,或者随机变量的期望值。通过随机抽样的方法,以随机事件出现的频率估计其概率,或者以抽样的数字特征估算随机变量的数字特征,并将其作为问题的解。这种方法多用于求解复杂的多维积分问题。

假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如,积分)的复杂程度是成正比的。蒙特卡罗方法基于这样的想法:假设你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候,结果就越精确。借助计算机程序可以生成大量均匀分布坐标点,然后统计出图形内的点数,透过它们占总点数的比例和坐标点生成范围的面积就可以求出图形面积。

使用蒙特卡罗方法对概率分布进行随机采样有以下三个主要原因:他们是:

  • 估计密度,收集样本以近似目标函数的分布。
  • 近似一个量,例如分布的均值或方差。
  • 优化函数,找到最大化或最小化目标函数的样本。

在解决实际问题的时候应用蒙特卡罗方法主要有两部分工作:

  • 用蒙特卡罗方法模拟某一过程时,需要产生各种概率分布的随机变量。
  • 用统计方法把模型的数字特征估计出来,从而得到实际问题的数值解。

蒙特卡罗采样的可运行实例

我们可以通过一个有效的例子来具体讲解蒙特卡罗采样。

在这种情况下,我们将有一个定义随机变量概率分布的函数。我们将使用平均值为 50、标准差为 5 的高斯分布,并从此分布中抽取随机样本。

假设我们不知道该随机变量的概率分布形式,并且想要对函数进行采样以了解概率密度。我们可以抽取给定大小的样本并绘制直方图来估计密度。

NumPy 函数Normal () 可用于从具有指定平均值 ( mu )、标准差 ( sigma ) 和样本大小的高斯分布中随机抽取样本。

为了使示例更有趣,我们将使用不同大小的样本重复此实验四次。我们预计,根据大数定律,随着样本规模的增加,概率密度将更好地逼近目标函数的真实密度。

下面列出了完整的示例。

# example of effect of size on monte carlo sample
from numpy.random import normal
from matplotlib import pyplot
# define the distribution
mu = 50
sigma = 5
# generate monte carlo samples of differing size
sizes = [10, 50, 100, 1000]
for i in range(len(sizes)):
	# generate sample
 	sample = normal(mu, sigma, sizes[i])
 	# plot histogram of sample
 	pyplot.subplot(2, 2, i+1)
	pyplot.hist(sample, bins=20)
 	pyplot.title('%d samples' % sizes[i])
 	pyplot.xticks([])

# show the plot
pyplot.show()

运行该示例会创建四个不同大小的样本,并为每个样本绘制一个直方图。

我们可以看到,10 和 50 的小样本量并不能有效捕获目标函数的密度。我们可以看到 100 个样本更好,但直到 1000 个样本我们才清楚地看到高斯概率分布的熟悉的钟形。

这凸显了即使对于简单的随机变量也需要抽取许多样本,以及随着抽取的样本数量增加近似精度的好处。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1392603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学校智慧能源消耗管理系统,破解学校节能降耗难题

随着碳达峰、碳中和工作的主要任务,学校作为能源集中地,且能源情况较为复杂的建筑,有效降低能源消耗、减少能源使用成本,已经成为学校一项紧迫的任务。 学校能耗痛点有哪些? 1、规模大 学校是集教学、科研、生活于一…

zabbix客户端配置及自定义监控

部署zabbix客户机 1.服务端和客户端都配置时间同步 yum install -y ntpdate ntpdate -u ntp.aliyun.com 2.服务端和客户端都设置 hosts 解析 cat > /etc/hosts << EOF 172.16.23.16 localhost 172.16.23.17 zbx-server EOF 3.被监控端 //设置 zabbix 的下载源&…

leedcode刷题笔记day1

题目大意&#xff1a; 暴力解法 两个for循环&#xff08;也是我一看到题目想到的方法&#xff09; 枚举在数组中所有的不同的两个下标的组合逐个检查它们所对应的数的和是否等于 target 复杂度分析 时间复杂度:O(n2)&#xff0c;这里 n 为数组的长度 空间复杂度:O(1)&#x…

精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)

Dockerfile实战总结 前提介绍实战总结方案创建容器时传入环境变量调整宿主机和容器的时间差异解决办法 指定容器的rootfs的大小快速管理容器和镜像快速删除容器的原理--format格式化输出输出所有容器的name输出所有容器名包含test的容器查看退出状态的容器删除所有容器删除/启动…

transbigdata笔记:其他方法

1 出租车相关 1.1 taxigps_to_od 提取出租车OD信息 transbigdata.taxigps_to_od(data, col[VehicleNum, Stime, Lng, Lat, OpenStatus]) 输入出租车GPS数据&#xff0c;提取OD信息 data出租车GPS数据col[VehicleNum, Time, Lng, Lat, OpenStatus]五列 比如GPS数据长这样&am…

docker screen 常用基础命令

1.docker基础命令 1.1开启docker systemctl start docker #开启docker service docker restart #重启docker systemctl stop docker #关闭docker 1.2查看命令 docker images #查看docker镜像docker ps #查看正在运行的镜像或者容器docker ps -a #查看所有容器1.3运…

信驰达科技参与《汽车玻璃集成UWB数字钥匙发展研究白皮书》编制工作

为进一步探索汽车数字钥匙技术路线及开发思路&#xff0c;中国智能网联汽车产业创新联盟&#xff08;CAICV&#xff09;、福耀玻璃工业集团股份有限公司联合发起了《汽车玻璃集成UWB数字钥匙发展研究白皮书》研究工作。 2023年12月20日&#xff0c;由中国智能网联汽车产业创新…

Linux:/proc/kmsg 与 /proc/sys/kernel/printk_xxx

目录 前言一、/proc/kmsg1、简介2、如何修改内核日志缓冲区3、dmesgklogctl 函数&#xff08;来源于 man 手册&#xff09; 4、扩展阅读 二、 /proc/sys/kernel/printk_xxx三、/dev/kmsg 前言 本篇文章将为大家介绍与 Linux 内核日志相关的一些控制文件&#xff0c;共同学习&am…

C语言总结十二:文件操作详细总结

在操作系统中&#xff0c;为了统一对各种硬件的操作&#xff0c;简化接口&#xff0c;不同的硬件设备也都被看成一个文件。对这些文件的操作&#xff0c;等同于对磁盘上普通文件的操作。我们不去探讨硬件设备是如何被映射成文件的&#xff0c;把任意 I/O 设备&#xff0c;转换成…

ResNet论文翻译和精读

1:论文原文 论文原文&#xff1a; ResNet 2&#xff1a;该论文解决了什么问题&#xff1f; 改论文解决了深层的神经网络训练时的梯度消失和梯度爆炸的问题&#xff1b; 3&#xff1a;该论文的创新点&#xff1f; 将快捷连接应用到了网络中构建成了残差网络块&#xff1b;…

【嘉立创EDA-PCB设计指南】3.网络表概念解读+板框绘制

前言&#xff1a;本文对网络表概念解读板框绘制&#xff08;确定PCB板子轮廓&#xff09; 网络表概念解读 在本专栏的上一篇文章【嘉立创EDA-PCB设计指南】2&#xff0c;将设计的原理图转为了PCB&#xff0c;在PCB界面下出现了所有的封装&#xff0c;以及所有的飞线属性&…

代码随想录算法训练营29期|day 22 任务以及具体安排

235. 二叉搜索树的最近公共祖先 class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root null) return null;//向左遍历if(root.val > p.val && root.val > q.val){TreeNode left lowestCommonAncestor(roo…

Redis和MySQL如何保持数据一致性

前言 在高并发的场景下&#xff0c;大量的请求直接访问Mysql很容易造成性能问题。所以&#xff0c;我们都会用Redis来做数据的缓存&#xff0c;削减对数据库的请求。但是&#xff0c;Mysql和Redis是两种不同的数据库&#xff0c;如何保证不同数据库之间数据的一致性就非常关键…

基于springboot+vue的在线拍卖系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

redis数据安全(四)复制

关系数据库通常会使用一个主服务器向多个从服务器发送更新&#xff0c;并使用从服务器来处理所有读请求&#xff0c;Redis也采用了同样的方法来实现自己的复制特性&#xff0c;并将其用做扩展性能的一种手段。 一、特点&#xff1a; 1、异步复制&#xff1a;Redis默认使用的是…

Liunx:线程

我们先说一个程序是怎么执行的&#xff1a; 我们编写好一个代码&#xff0c;经过预编译&#xff0c;编译&#xff0c;汇编&#xff0c;连接&#xff0c;形成一个二进制文件被写进磁盘中&#xff0c;通常我们把他叫做可执行程序。 我们可以双击运行&#xff0c;运行需要经过几个…

Modern C++ std::mutex底层原理

前言 我时常有这样的疑问&#xff1a; std::mutex怎么就能保证后面的语句100%安全哪&#xff1f;CPU reordering就不会把这些语句重排到mutex前面执行&#xff1f;而且各个CPU都是有L1、L2缓存的&#xff0c;如果mutex后面要访问的的变量在这些缓存中怎么办&#xff1f; 带着…

sqlilabs第五十七五十八关

Less-57(GET - challenge - Union- 14 queries allowed -Variation 4) 手工注入 Less-58(GET - challenge - Double Query- 5 queries allowed -Variation 1) 手工注入 报错注入就可以&#xff08;布尔注入的话次数不够&#xff09;(所以我们前面需要做够足够的数据支持) 最后…

whistle代理+mock轻松解决“页面端“测试接口没数据难题

0、whistle是什么&#xff1f;怎么用&#xff1f; 自行百度&#xff0c;此处不再赘述&#xff01; 1、示例演示&#xff08;交易订单测试&#xff09; 背景和痛点最近在测试一个小需求&#xff0c;需要涉及订单侧服务商品库侧服务库存侧服务财务侧线下交易服务。痛点主要在订…

abap 将xstring转换成PDF展示

收到外围系统的xstring之后&#xff0c;如何在sap中将其打开呢 1.创建一个屏幕 2.绘制一个customer control 3.创建流逻辑 4.流逻辑如下&#xff1a; DATA: go_html_container TYPE REF TO cl_gui_custom_container, go_html_control TYPE REF TO cl_gui_html_viewer, lv_u…