news 2026/4/18 11:52:34

lintsampler:一种快速从任何分布中获取随机样本的新方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
lintsampler:一种快速从任何分布中获取随机样本的新方法

原文:towardsdatascience.com/lintsampler-a-new-way-to-quickly-get-random-samples-from-any-distribution-d07f73a70f5c?source=collection_archive---------8-----------------------#2024-10-14

https://medium.com/@aneesh92?source=post_page---byline--d07f73a70f5c--------------------------------https://towardsdatascience.com/?source=post_page---byline--d07f73a70f5c-------------------------------- Aneesh Naik

·发表于 Towards Data Science ·阅读时间 4 分钟·2024 年 10 月 14 日

lintsampler是一个纯 Python 包,可以轻松高效地从任何概率分布中生成随机样本。

完整披露:我是lintsampler的作者之一。

为什么你需要 lintsampler

我们经常遇到需要从给定概率分布(PDF)中抽取随机样本的情况。例如,我们可能想估算一些总结性统计量,或者为模拟创建一群粒子。

如果概率分布是标准分布,如均匀分布或高斯(正态)分布,那么numpy/scipy生态系统提供了一些简便的方法来从这些分布中抽取样本,方法是通过numpy.randomscipy.stats模块。

然而,在实际应用中,我们经常遇到非高斯的概率分布。有时,它们非常非高斯。例如:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/a816e849fa2d0c53df5dd8cde36582eb.png

一个非常非高斯的 PDF。等高线是密度相等的线,在对数空间中按相等间隔分隔。图片来源:作者。

我们如何从这个分布中抽取样本呢?

有几种广泛使用的技术可以从任意分布中抽取样本,比如拒绝采样或马尔可夫链蒙特卡罗(MCMC)。这些都是优秀且可靠的方法,并且有一些方便的 Python 实现。例如,emcee是一个在科学应用中广泛使用的 MCMC 采样器。

现有技术的问题在于它们需要相当多的设置和调试。使用拒绝采样时,必须选择一个提议分布,而不合适的选择会使得过程非常低效。使用 MCMC 时,必须担心样本是否已收敛,这通常需要进行一些后验测试来评估。

输入lintsampler。操作简单如同:

fromlintsamplerimportLintSamplerimportnumpyasnp x=np.linspace(xmin,xmax,ngrid)y=np.linspace(ymin,ymax,ngrid)sampler=LintSampler((x,y),pdf)pts=sampler.sample(N=100000)

在这段代码中,我们沿着两个维度构造了 1D 数组,然后将它们与表示我们想从中抽取样本的概率分布的pdf函数一起传递给LintSampler对象(从lintsampler包中导入)。我们在这个片段中没有列出pdf函数,但在 docs 中有一些完全自包含的示例。

现在,pts是一个包含来自 PDF 的 100000 个样本的数组。以下是它们的散点图:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d79dcd41533335c64d581654d00cf3ee.png

从上面奇怪的 PDF 中采样的点的散点图(后者由轮廓线表示)。图片由作者提供。

本例的重点是演示如何轻松地设置和使用lintsampler。在某些情况下,它也比 MCMC 和/或拒绝采样要快得多且高效。如果你有兴趣了解lintsampler背后的工作原理,请继续阅读。否则,可以访问 docs,那里有描述 如何安装 和使用lintsampler的说明,包括带有 1D、2D 和 3D 用例的示例笔记本,以及对一些lintsampler附加功能的描述: 准蒙特卡洛采样(又称低差异序列)和在 自适应树结构 上的采样。此外,还有一篇发表于《开源软件杂志》(JOSS) 的 论文,描述了lintsampler

lintsampler的工作原理

lintsampler背后是我们称之为线性插值采样的算法。文档的 理论 部分提供了一个更详细且更具数学性的算法描述,但这里简要说明一下。

下面的示例演示了当你将 PDF 和网格传递给LintSampler类时,lintsampler背后发生了什么。我们将以 2D 高斯分布的简单示例为例,但这种方法适用于任意维度,并且适用于更不友好的 PDF。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3ea73a9e43dfcf1f8357735edfbacb2c.png

左:2D 高斯概率密度函数(PDF)。右:在(不均匀)网格上评估的概率密度函数。图片来自作者。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d349e131a17ba10837746ab5363527d6.png

使用(双)线性插值填充的网格化概率密度函数。图片来自作者。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/abf2821331ada9ab62cafcd622eb73e0.png

左:与前一图相同,随机选择的单元被高亮显示。右:高亮单元的放大图,显示采样点。图片来自作者。

值得理解的是,这里的关键步骤是线性近似:我们将在lintsampler文档中描述这一点,以及逆变换采样过程的更多细节。将概率密度函数近似为每个网格单元内的线性函数意味着它具有封闭的、解析的形式用于其分位数函数(即其逆累积分布函数),这意味着进行逆变换采样本质上归结为绘制均匀样本并对其应用代数函数。

用户需要关心的主要问题是获得合适的网格分辨率,以便线性近似足够准确。什么是合适的分辨率会因使用案例而异,正如在lintsampler文档中的一些示例笔记本所展示的那样。

祝你采样愉快!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 0:22:20

Llama-2 与 Llama-3:模型之间的井字棋对决

原文:towardsdatascience.com/llama-2-vs-llama-3-a-tic-tac-toe-battle-between-models-7301962ca65d 在撰写这个故事的大约一周前,Meta 发布了新的开源 Llama-3 模型 ai.meta.com/blog/meta-llama-3/。Meta 声称,这些是“今天在 8B 和 70B …

作者头像 李华
网站建设 2026/4/18 8:55:37

解决WordPress粘贴图片政府公文格式转存问题

要求:开源,免费,技术支持 博客:WordPress 开发语言:PHP 数据库:MySQL 功能:导入Word,导入Excel,导入PPT(PowerPoint),导入PDF,复制粘贴word,导入微信公众号内容,web截屏 平台:Window…

作者头像 李华
网站建设 2026/4/18 3:32:24

M2FP WebUI按钮功能说明:每个操作背后的逻辑解析

M2FP WebUI按钮功能说明:每个操作背后的逻辑解析 📖 项目简介:M2FP 多人人体解析服务 在计算机视觉领域,人体解析(Human Parsing) 是一项比通用语义分割更精细的任务——它不仅要求识别“人”这一整体类别&…

作者头像 李华
网站建设 2026/4/18 3:29:27

LOBECHAT实战:构建银行智能客服系统的5个关键步骤

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个银行场景的智能客服系统,要求:1.支持身份验证和安全会话;2.处理账户查询、转账等常见业务;3.集成风控规则引擎;…

作者头像 李华