news 2026/6/15 15:39:50

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/6/15 12:26:35

如何用MGeo检测虚假团购地址信息

如何用MGeo检测虚假团购地址信息 引言:团购平台的地址欺诈挑战与MGeo的应对价值 在本地生活服务快速发展的今天,团购平台(如美团、大众点评、高德生活服务等)面临着日益严峻的虚假商户地址注入问题。不法商家通过伪造或微调真实地…

作者头像 李华
网站建设 2026/6/15 1:11:38

企业级CI/CD中处理无编译器环境的5种实战方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个CI/CD故障诊断中心,专门处理NO COMPILER类错误:1. 集成主流构建工具(Maven/Gradle等)的常见错误库 2. 根据错误日志自动识别是JRE环境还是Docker环…

作者头像 李华
网站建设 2026/6/15 12:31:06

大模型开发新选择:Java + LangChain实战指南(小白友好,建议收藏)

本文详细介绍了Java开发者如何使用LangChain4j框架构建大语言模型应用。从LLM基础概念入手,讲解了提示词工程、词向量等关键技术,并展示了LangChain的核心模块如模型I/O、内存管理和检索增强生成。文章还介绍了链和代理等高级应用,帮助Java开…

作者头像 李华
网站建设 2026/6/15 12:32:41

海外华人应用:中英文混合地址匹配实战

海外华人应用:中英文混合地址匹配实战 为什么我们需要解决中英文地址匹配问题? 跨境电商订单处理中,经常遇到同一个地址存在中英文不同表述的情况。比如"中山路12号"和"No.12 Zhongshan Road"明明是同一个地点&#xf…

作者头像 李华
网站建设 2026/6/15 13:35:18

【真实测评】那款让我悄悄交稿的“降AI神器”,真的有点东西。

朋友们,我又来交作业了。最近后台被问爆的还是那个老难题:AI写的论文,查重和AIGC检测全红,到底怎么救?市面上各种“降AI率”工具我测了一轮又一轮,有的效果飘忽,有的改完面目全非,直…

作者头像 李华