あなたが正しいしている:あなたは、2つのステップにおけるガウス混合モデルからのサンプルを生成することができる:
- はランダムに応じて、ガウス分布を試料にそこから決定混合物の重量について。
- 選択したガウス分布からランダムサンプルを1つ作成します。
#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++の組み込みの乱数生成器を使用して最小限の作業例です。
出典
2016-05-19 16:03:25
jsb
あなたが掲示したグラフではじめて、「混合」とは2つのガウスの合計を意味します。 –