news 2026/4/25 13:24:26

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/20 12:32:37

从论文到生产:MGeo地址匹配模型的工业化部署指南

从论文到生产:MGeo地址匹配模型的工业化部署指南 在物流配送、地图导航、政务管理等业务场景中,地址匹配的准确性直接影响服务质量和运营效率。MGeo作为多模态地理语言模型,通过融合地理上下文与语义特征,能够实现高精度的地址识…

作者头像 李华
网站建设 2026/4/19 15:03:01

地址数据标注提速:MGeo预标注+人工校验工作流

地址数据标注提速:MGeo预标注人工校验工作流实战指南 在数据标注团队的实际工作中,地址相似度标注往往是最耗时费力的任务之一。传统纯人工标注方式不仅效率低下,而且标注人员容易因疲劳导致准确率下降。本文将介绍如何利用MGeo模型实现"…

作者头像 李华
网站建设 2026/4/23 19:11:07

Promise vs 回调地狱:实测开发效率提升300%

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个对比测试项目,展示相同功能的两种实现方式:1. 使用传统回调函数嵌套 2. 使用Promise链式调用。要求:实现用户登录、数据获取、数据处理…

作者头像 李华
网站建设 2026/4/22 17:34:30

快速验证:用OLLAMA下载加速方案原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个OLLAMA下载加速原型验证工具,功能包括:1. 最小化可行产品实现;2. 基础镜像切换功能;3. 简单速度测试;4. 结果快…

作者头像 李华