擅长:python、mysql、java
<p>看起来你想要的是基于拒绝的抽样方法,比如Metropolis-Hastings算法。Scipy可以使用其<a href="http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.optimize.basinhopping.html" rel="nofollow">scipy.optimize.basinhopping</a>函数实现此类方法。</p>
<p>基于拒绝的抽样方法允许您从任何给定的概率分布中抽取样本。我们的想法是从另一个“建议”pdf中随机抽取样本,该pdf很容易从中抽取样本(例如均匀分布或高斯分布),然后使用随机测试来确定是否应该“接受”来自建议分布的该样本作为所需分布的样本。</p>
<p>剩下的技巧是:</p>
<ol>
<li><p>求出N维联合概率密度函数的形式,它沿着每个维有你想要的形式的边缘,但是有你想要的相关矩阵。对于高斯分布,这很容易实现,在高斯分布中,所需的相关矩阵和平均向量就是定义分布所需的全部。如果你的边缘有一个简单的表达式,你可能会发现这个pdf有一些简单但乏味的代数。<a href="http://ac.els-cdn.com/0047259X9290078T/1-s2.0-0047259X9290078T-main.pdf?_tid=07a434d2-9162-11e4-a34e-00000aacb35f&acdnat=1420081275_a2ab3cec02ccff4436dddd5b88ed544e" rel="nofollow">This</a>这篇论文引用了其他一些人的观点,我敢肯定还有更多的人。</p></li>
<li><p>为<code>basinhopping</code>制定一个函数,以最小化它,使它被接受的“最小”数量等于您定义的这个pdf的样本。</p></li>
</ol>
<p>鉴于(1)的结果,(2)应该是直截了当的。</p>