【问题标题】:How to sample a multivariate normal distribution in Math.NET?如何在 Math.NET 中对多元正态分布进行采样?
【发布时间】:2021-07-10 04:34:42
【问题描述】:

我在这里遗漏了一些明显的东西吗? Math.NET 有a wealth 的概率分布采样类,但没有多元正态分布。它有NormalMatrixNormal 类——有没有一种简单的方法可以采用其中任何一个来采样由均值向量和协方差矩阵定义的多元正态分布?

【问题讨论】:

  • 我对 Math.NET 一无所知,但 MatrixNormal 不是打算成为多元正态分布吗?
  • @RobertDodier MatrixNormalmatrix normal distribution。它由矩阵值均值、行方差矩阵和列方差矩阵定义。对其进行采样会产生矩阵。
  • 哦,好的。好吧,为什么不取p = 1,那么它与普通的mvn相同,不是吗?但是,如果您不想走那条路,请注意 Y = L 。 X 具有协方差为 L 的 mvn 分布。 transpose(L) = Sigma,其中 Sigma 是正定的,即 L 是协方差的 Cholesky 分解,并且 X = (x_1, ..., x_n) 其中 x_k 都是独立的零均值,单位方差正态分布。然后你可以将平均向量添加到 Y。

标签: statistics math.net


【解决方案1】:

根据@robert-dodier 的建议,MatrixNormal 分布在p = 1 处成为多元正态分布。这比如果有一个原生的Multinormal 分发类更冗长,但不是很多:

using MathNet.Numerics.LinearAlgebra;

Vector Sample<T>(System.Random random, Vector<T> mean, Matrix<T> cov)
{
    return MatrixNormal.Sample(
        random, mean.ToColumnMatrix(), cov, Matrix<T>.Build.DenseIdentity(1)).Column(0);

}

但是,由于分布执行 Cholesky 分解,因此只允许使用正定协方差矩阵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 2020-12-18
    相关资源
    最近更新 更多