【问题标题】:Matlab: Truncated multivariate normal random sampling?Matlab:截断多元正态随机抽样?
【发布时间】:2020-05-19 00:59:44
【问题描述】:

我希望直接在 Matlab 中从截​​断的多元正态分布中采样。

我知道我可以简单地使用 mvnrnd 并检查返回的值是否在感兴趣的域内。但是,当需要大量样本时,这是一种资源浪费。

Matlab 有一个内置函数truncatereference,它将截断给定的概率分布对象。不幸的是,mvnpdfreference 返回给定位置的 pdf 值,而不是概率对象,请参阅:pdf。此外,truncate 似乎只支持一维问题。

除了简单地忽略感兴趣域之外的数据之外,任何想法如何直接从截断的多元正态中采样?还是这通常是我必须忍受的?

文件交换的示例似乎实现了某种形式的拒绝抽样:

Truncated Normal Generator

Truncated Multivariate Normal Generator

Another Truncated Normal Generator

【问题讨论】:

    标签: matlab random probability probability-density probability-distribution


    【解决方案1】:

    显然,从这个分布中抽样并不是微不足道的。但这里有一些提示。

    • Truncated multivariate normal in SciPy? 。在那里,接受的答案使用 Markov-chain Monte Carlo 基于截断正态分布的 log-PDF 进行采样。 (请注意,答案使用的是 Python,而不是 MATLAB。)
    • https://hal.archives-ouvertes.fr/hal-01063978/document 。这是一种从该分布中采样的算法。尽管这也使用了拒绝抽样,但如果感兴趣的域远离分布的模式,它可能会更有效。仅当感兴趣的域是凸的时才有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      • 2021-11-02
      • 2013-12-05
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多