现有的用户?据a href="//www.parkandroid.com/account/login/?next=/wiki/inverse-transform-sampling/" id="problem-login-link-alternative" class="btn-link ax-click" data-ax-id="clicked_login_from_generic_modal" data-ax-type="button" data-is_modal="true" data-next="/wiki/inverse-transform-sampling/">登录据/a>
已经有账户了?据a href="//www.parkandroid.com/account/login/?next=/wiki/inverse-transform-sampling/" class="ax-click" data-ax-id="clicked_signup_modal_login" data-ax-type="link">登录此处。据/a>
通常在写一些数据分析代码的过程中,或者在制定系统的模拟时,就像通过人群的病毒传播,细胞中的基因表达,或股票市场的动态,我们想要样本随机从概率分布中抽取。问题是,大多数语言只能使用简单的随机数发生器,能够绘制据span class="katex"> 你据/span>^据/span>一致地从实单位区间据span class="katex"> [据/span>0.据/span>那据/span>1据/span>]据/span>,或从一个给定的整数范围。当我们需要模拟像掷骰子这样简单的事情时,均匀分布是好的,但当更复杂的概率至关重要时,它就不够了;我们通常需要非线性分布,如高斯分布,泊松分布,甚至奇异的选择,如Gumbel分布。我们能否找到一种方法,使用简单的随机数生成器从任意概率分布中取样?据/P.>据P.>据span class="image-caption">
在我们开始之前,让我们来看看在模拟中使用错误的概率分布的影响的示例。据/P.>据P.>考虑下面模拟的两个社交网络。右侧的网络是使用所谓的Bernoulli分发生成的,以确定每个人拥有的朋友数量,而左侧的一个是使用稍微现实的albert-barabasi分布产生的。据/P.>据P.>据span class="image-caption">
为了进行公平比较,网络被限制为具有相同数量的个人(据span class="katex"> 5.据/span>×据/span>1据/span>0.据/span>3.据/span>),以及友谊总数(据span class="katex"> 1据/span>0.据/span>×据/span>1据/span>0.据/span>3.据/span>).据P.>据/P.>据!-- end-meta -->
这些网络之间有一些明显的区别,包括伯努利网络的数量很大(据span class="katex"> 〜据/span>2据/span>0.据/span>)的高度集群子网包含大致相同数量的节点,而Albert-Barabasi网络只有少数高度连接的子网,然后是一个人口较少但仍然高度连接的子网层次结构。据/P.>据P.>我们还可以清楚地看到生成分布的痕迹,因为Albert-Barabasi网络在每个节点的朋友数量上比伯努利网络表现出更大的多样性,伯努利网络看起来相当均匀。这是因为伯努利分布在尾部的衰减非常快。据/P.>据P.>据span class="image-caption">
这些网络的结构存在许多其他有趣的差异,超出了这个例子的范围,但我们可以看到在模拟中采用正确的概率分布非常重要。据/P.>据/D.一世V.>据/D.一世V.>据D.一世V. id="sampling-transform" class="anchor skill-heading collapsed" data-controller="app/wiki:expandOrCollapse">
采样变换据/h2>
我们希望使用随机数发生器来抽取非平面分发,从而从均匀分布中汲取。因此,我们需要一些方法来将样本从均匀分布转换为来自任意分布的样本据span class="katex"> F据/span>.据/P.>据P.>想象一下有代表性的抽样,据span class="katex"> F据/span>^据/span>=据/span>{据/span>F据/span>^据/span>1据/span>那据/span>F据/span>^据/span>2据/span>那据/span>......据/span>那据/span>F据/span>^据/span>N据/span>}据/span>我们可以对这个列表进行排序,并在索引上随机绘制据span class="katex"> 一世据/span>,每个值据span class="katex"> F据/span>^据/span>一世据/span>被抽取的概率是相等的,这就给出了我们想要的样本。在大的极限据span class="katex"> N据/span>,一组据span class="katex"> F据/span>^据/span>越来越能代表真实的分布吗据span class="katex"> F据/span>
例如,假设我们具有二进制分发的以下表示,它具有相同的机会生成1或0.如果我们随机对索引进行采样,则易于看到我们从整数转换随机抽取据span class="katex"> {据/span>1据/span>那据/span>......据/span>那据/span>N据/span>}据/span>Into从二进制分布中提取:据/P.>据P.>据span class="katex-display"> 指数据/span>1据/span>2据/span>⋮据/span>N据/span>/据/span>2据/span>N据/span>/据/span>2据/span>+据/span>1据/span>⋮据/span>N据/span>价值据/span>0.据/span>0.据/span>⋮据/span>0.据/span>1据/span>⋮据/span>1据/span>
现在假设我们有一个来自任意分布的代表性样本的类似表格据span class="katex"> F据/span>.让我们将样本折叠到第一个条目是值的成对表中,第二个是它出现的次数,并按值对表项进行排序:据/P.>据P.>据span class="katex-display"> 价值据/span>V.据/span>1据/span>⋮据/span>V.据/span>m据/span>频率据/span>N据/span>1据/span>⋮据/span>N据/span>m据/span>
如果我们想随机抽样据span class="katex"> F据/span>我们可以简单地画一个随机整数据span class="katex"> X.据/span>介于1和据span class="katex"> N据/span>,然后在表中查找。对于一些据span class="katex"> j据/span>,我们会有据span class="katex"> N据/span>j据/span>-据/span>1据/span>据据/span>X.据/span>据据/span>N据/span>j据/span>,在那里据span class="katex"> N据/span>j据/span>=据/span>一世据/span>=据/span>1据/span>σ.据/span>j据/span>N据/span>一世据/span>,于是我们绘制地图据span class="katex"> X.据/span>→据/span>V.据/span>j据/span>
如果我们采取大型样品的极限据span class="katex"> N据/span>→据/span>∞据/span>和规范化据span class="katex"> N据/span>一世据/span>→据/span>P.据/span>一世据/span>=据/span>N据/span>一世据/span>/据/span>N据/span>,然后我们可以绘制一个随机的实数据span class="katex"> 你据/span>^据/span>零和一个,并将其映射到据span class="katex"> V.据/span>j据/span>通过求的近似解据span class="katex"> 你据/span>^据/span>=据/span>P.据/span>j据/span>=据/span>一世据/span>=据/span>1据/span>σ.据/span>j据/span>P.据/span>一世据/span>
在连续限制,我们有据span class="katex"> 一世据/span>=据/span>1据/span>σ.据/span>j据/span>P.据/span>一世据/span>→据/span>-据/span>∞据/span>∫据/span>X.据/span>^据/span>P.据/span>(据/span>X.据/span>)据/span>D.据/span>X.据/span>,因此我们的采样问题求解整体方程据/P.>据P.>据span class="katex-display"> 你据/span>^据/span>=据/span>-据/span>∞据/span>∫据/span>X.据/span>^据/span>P.据/span>(据/span>X.据/span>'据/span>)据/span>D.据/span>X.据/span>'据/span>=据/span>CDF.据/span>(据/span>X.据/span>^据/span>)据/span>
因此,如果我们希望从任意分布中采样据span class="katex"> P.据/span>(据/span>X.据/span>)据/span>,我们简单抽样据span class="katex"> 你据/span>^据/span>从平面分布和映射到解据span class="katex"> 你据/span>^据/span>=据/span>CDF.据/span>(据/span>X.据/span>^据/span>)据/span>,即据/P.>据P.>据span class="katex-display"> X.据/span>^据/span>=据/span>CDF.据/span>-据/span>1据/span>(据/span>你据/span>^据/span>)据/span>
为了直观地说明它是如何工作的,考虑下面所示的双峰高斯函数。我们期望从这个分布中得到的收益集中在两个峰值周围,很少的收益来自于它们之间的区域,或它们旁边的区域。据/P.>据P.>据span class="image-caption">
正如我们在表格类比中所展示的,在表表示的索引上随机绘制据span class="katex"> F据/span>^据/span>和抽样分布是一样的吗据span class="katex"> F据/span>^据/span>.在连续的情况下,从CDF的范围随机绘制据span class="katex"> F据/span>(并映射到相关的据span class="katex"> X.据/span>^据/span>值)等价于随机抽取据span class="katex"> F据/span>^据/span>本身。因此,如果我们在随机高度上画一条水平线,我们期望有很高的概率映射到这两个高斯函数,而非常低的概率映射到它们之外的区域。据/P.>据P.>据span class="image-caption">
我们看到高斯占据了CDF范围内的大部分垂直空间,而互相间占据了一个条子。我们几乎可以在任何地方放置水平线,并有很好的机会映射到两个高斯之一。实际上,要映射到低概率区域,我们必须在CDF(上面的金盒)中精确地将水平线正常放置。据/P.>据!-- end-example -->
指数分布据/strong>
指数分布的CDF给出据/P.>据P.>据span class="katex-display"> CDF.据/span>(据/span>X.据/span>^据/span>)据/span>=据/span>-据/span>∞据/span>∫据/span>X.据/span>^据/span>P.据/span>(据/span>X.据/span>)据/span>D.据/span>X.据/span>=据/span>λ据/span>0.据/span>∫据/span>X.据/span>^据/span>E.据/span>-据/span>λ据/span>X.据/span>D.据/span>X.据/span>=据/span>1据/span>-据/span>E.据/span>-据/span>λ据/span>X.据/span>^据/span>
解据span class="katex"> X.据/span>^据/span>,我们发现据span class="katex"> X.据/span>^据/span>=据/span>λ据/span>1据/span>日志ydF4y2BaG.据/span>1据/span>-据/span>你据/span>^据/span>1据/span>
现在让我们展示一下它的工作原理。完全从零开始编写代码是很简单的,但是如果我们使用开源项目来处理一些常见的操作,就会更快、更方便,而且更可靠。我们将使用数值Python库据code>numpy.据/code>为了产生一些随机数,据P.>据/P.>据D.一世V.class="codex-static-code" data-controller="app/codex/controllers:expandableCode">
1 2 3据/P.re>进口据/span>numpy.据/span>as.据/span>np据/span>进口据/span>matplotlib.pyplot.据/span>as.据/span>plt据/span>uniform_rands据/span>=据/span>np据/span>.据/span>随机的据/span>.据/span>随机的据/span>(据/span>1000000据/span>)据/span>
为了进行完整性检查,让我们看看我们在这一点上有什么。如果我们画一个直方图,我们应该看到实数在0和1之间的平坦分布。据/P.>据P.>据span class="image-caption">
现在我们根据上面找到的cdf变换从平坦分布映射我们的样本。据/P.>据D.一世V.class="codex-static-code" data-controller="app/codex/controllers:expandableCode">
1 2 3据/P.re> |
|
期望分布的共图,以及标准化的数据直方图表明,我们的转换样本非常符合我们的期望分布。在更多点的限制下,协议将是精确的。据/P.>据!-- end-hidden -->
真实分布和近似分布之间看似无关紧要的分歧可能会导致有害的后果。一个引人注目的例子是所谓的长尾分布区域,它描述了罕见事件的概率。有时,数学上方便的分布被用来代替经验确定的分布。例如,高斯分布及其近亲被用来描述金融市场中的某些行为。据/P.>据P.>在许多情况下,所用的分布是对真实分布的非常近似的近似,仅在长尾尾部不同。虽然在尾巴中的分歧可能看起来像是无害的差异(它的分布稀疏区域的差异),但实际上是非常重要的,并且出于风险管理的目的,也许是最重要的。据/P.>据P.>根据定义,这些事件很少发生,这使得人们在心理上容易忽略它们,但在技术上却很难恰当地描述它们。正是这种组合使得他们如此阴险。作为错误评估尾部概率危险的一个简单例子,考虑下面的两个分布,一个是高斯分布,一个是反向Gumbel分布。据/P.>据P.>据span class="image-caption">
在左边的观点中,分布看起来非常相似,它们有相同的平均值,几乎相同的轮廓,在两个分布的累积面积的90%或更多,并且都迅速下降到一致区域之外的小值。然而,从对数的角度来看,我们可以清楚地看到,高斯分布认为12倍损失的风险几乎比反向Gumbel分布低10个数量级。据/P.>据P.>在实际情况下,这意味着使用高斯分布的分析师认为,12倍下降的概率大约为1 / 1据span class="katex"> 1据/span>0.据/span>1据/span>1据/span>交易,而反向牙龈使用分析师希望它大致发生一次据span class="katex"> 2据/span>×据/span>1据/span>0.据/span>3.据/span>交易。在交易策略和风险管理方面,这种信念上的分歧将导致完全不同的行为,并可能最终导致高斯公司出现无法弥补的大爆发。据/P.>据P.>虽然情况的完整细节无疑比这个简单的例子更复杂,但只是这样的使用,但不是确切的待机分布促成了长期资本管理的着名爆炸,由学术可能的两个套利基金支持接受者的据a target="_blank" rel="nofollow" href="https://en.wikipedia.org/wiki/Robert_C._Merton">瑞典央行经济学奖据/a>纪念阿尔弗雷德·诺贝尔的科学据/a>.在经历了4年无与伦比的投资回报后,该基金在一个夏天出现了令人难以置信的崩盘,部分原因是对不同事件之间相关性的严重错误估计。据/P.>据P.>据span class="image-caption">
LTCM资产管理价值的轨迹(1994年3月据span class="katex"> →据/span>1998年10月)据P.>据/P.>据!-- end-meta -->
现有的用户?据a href="//www.parkandroid.com/account/login/?next=/wiki/inverse-transform-sampling/" id="problem-login-link-alternative" class="btn-link ax-click" data-ax-id="clicked_login_from_problem_modal" data-ax-type="button" data-is_modal="true" data-next="/wiki/inverse-transform-sampling/">登录据/a>
问题加载…据/P.>据P.class="note-text">注意加载......据/P.>据P.class="set-text">设置加载......据/P.>据/D.一世V.>据D.一世V.class="nf-feeditem-modal-wrapper">
社交网络据/h2>