1

事前確率に基づいて、一定量のオプションから選択する確率ジェネレーターを作成したいと思います。たとえば、次の事前確率に基づいて、A、B、Cのいずれかをランダムに選択するとします。

P(A) = .4
P(B) = .5
P(C) = .1

では、上記の確率に基づいてA、B、またはCをランダムに生成するランダムジェネレーターを作成するにはどうすればよいですか?

編集:申し訳ありませんが、アイテムの数を追加するのを忘れました、そしてそれらの確率は常に同じではありません。ですから、必ずしも上記のように3つだけではありません。これはMx2行列になります。ここで、Mはアイテムの数であり、2番目の列の合計(確率)は1です。

4

3 に答える 3

3

私は混乱していますが、あなたがMとして何を意味するのか、しかしPが確率行列である場合の私の見解は次のとおりです。

cumP = cumsum (P);
ind = find(cumP>rand, 1, 'first');
sol = P(ind);
于 2012-11-18T18:33:58.430 に答える
1
p=rand;
probs_vector=[.4 .5 .1];
current_prob=probs_vector(1);
index=1;
while (current_prob<p)
    index=index+1;
    current_prob=current_prob+probs_vector(index)
end

無限ループなどを防ぐために、ベクトルの合計が1になり、上下しないようにするために、いくつかの基本的なチェックを行う必要がありますが、それらの詳細はあなたに任せます。index出力です。

于 2012-11-18T18:10:12.630 に答える
0

Pが長さNの確率のベクトルである場合、1行のコードでそこからサンプルを返すことができます。

out = 1 + sum( rand() > cumsum(P) );

これにより、Pの確率に応じて1からNまでの整数が返されます。

于 2012-11-18T21:22:15.377 に答える