gpt4 book ai didi

c++ - C++中高斯分布的混合

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:29 25 4
gpt4 key购买 nike

我知道像 gsl 这样的库可以生成高斯分布并根据高斯分布生成随机数。 https://www.gnu.org/software/gsl/manual/html_node/The-Gaussian-Distribution.html我想知道是否有任何库可以生成服从混合高斯分布的随机数并可以返回基于混合高斯分布的给定值的概率?非常感谢。 enter image description here

跟进 : 如果我先生成一个介于(0,1)之间的随机数是不是一样,如果落在(0, 0.5)之间,我就生成一个服从一个高斯分布的数,否则从其他高斯分布生成数字。这个过程是否与生成数字服从两个高斯的混合相同? (假设两个高斯之间的权重相等)

最佳答案

你是对的:你可以分两步从高斯混合模型生成样本:

  • 根据混合权重,随机决定从哪个高斯分布中采样。
  • 根据选定的高斯分布创建一个随机样本。

这是一个使用 C++ 内置随机数生成器的最小工作示例:

#include <iostream>
#include <random>
#include <array>

int main()
{
std::random_device rd;
std::mt19937 gen(rd());

using normal_dist = std::normal_distribution<>;
using discrete_dist = std::discrete_distribution<std::size_t>;

auto G = std::array<normal_dist, 3>{
normal_dist{5.0, 0.1}, // mean, stddev of G[0]
normal_dist{8.0, 0.4}, // mean, stddev of G[1]
normal_dist{2.0, 0.3} // mean, stddev of G[2]
};
auto w = discrete_dist{
0.1, // weight of G[0]
0.6, // weight of G[1]
0.3 // weight of G[2]
};

for (int n = 0; n < 100; ++n) {
// Create one sample of the Gaussian mixture model
auto index = w(gen);
auto sample = G[index](gen);
std::cout << sample << " ";
}
std::cout << '\n';
}

Try it out here .

关于c++ - C++中高斯分布的混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37320025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com