0

ベルヌーイ確率変数の ML 推定を適用しています。私は最初に次のコードを持っています:

muBern = 0.75;
bernoulliSamples = rand(1, N); 
bernoulliSamples(bernoulliSamples < muBern) = 1;
bernoulliSamples(bernoulliSamples > muBern & bernoulliSamples ~= 1) = 0;
bernoulliSamples; % 1xN matrix of Bernoulli measurements, 1's and 0's

estimateML = zeros(1,N);
for n = 1:N
    estimateML(n) = (1/n)*sum(bernoulliSamples(1:n)); % The ML estimate for muBern
end

これはかなりうまく機能しますが、コードを実行するたびに、N=100観測結果の 1 つにすぎません。この実験をI=100何度も繰り返し、すべての結果の平均を取り、実験を正確に表す解を取得したいと考えています。

muBern = 0.75;
bernoulliSamples = rand(I, N); 
bernoulliSamples(bernoulliSamples < muBern) = 1;
bernoulliSamples(bernoulliSamples > muBern & bernoulliSamples ~= 1) = 0;
bernoulliSamples; % IxN matrix of Bernoulli measurements, 1's and 0's

estimateML = zeros(I,N);
for n = 1:N
    estimateML(n,:) = (1/n)*sum(bernoulliSamples(1:n,2)); % The ML estimate for muBern
end

このforループが意図したとおりに実行されているかどうか疑問に思っています。各行は完全に異なる実験を表しています。2 番目のコード インスタンスは、100 の異なる実験の原因として 100 の異なる結果のみを使用して、最初のコード インスタンスと同じことを行っていますか?

4

2 に答える 2

5

ループは必要ありません。単一実験の場合、ループを次のように置き換えます。これは同じことを行います。

estimateML = cumsum(bernoulliSamples) ./ (1:N);

複数の実験の場合、これを使用します。

estimateML = bsxfun(@rdivide, cumsum(bernoulliSamples,2), 1:N);
于 2013-09-30T14:13:06.503 に答える
1

答えを思いついた、私はそれを考えすぎていた.誰かが興味を持っているなら、私が探していたものは次のとおりです:

for n = 1:N
    estimateML(:,n) = (1/n)*sum(bernoulliSamples(:,1:n),2); % The ML estimate for muBern
end
于 2013-09-30T14:12:26.703 に答える