0

実際に採取したデータの分布に合わせた疑似データを生成したい。iPhone 開発のための C/Obj-C での効率的で正確な方法を探しています。現在、1000 のサンプリングされたイベントでの 60 の異なるカテゴリの発生には、確率 (0-1) が割り当てられています。同じ確率に適合する 1000 個の新しいイベントを生成したいと考えています。

明確化 {

セット {1,2,...,60} のカテゴリ分布があります。この分布のサンプルが各カテゴリの確率に適合することを理解しています。したがって、この分布から 1000 個のサンプルを取得する必要があります。私は(これまでの回答のおかげで)次のことを行う必要があると判断しました。

  1. 値を合計し、それぞれを合計で割ることによって、この分布を正規化します。

  2. それらを注文します。

  3. 各値を以前のすべての値の合計に置き換えて、CDF を作成します。

  4. 次に、0 から 1 の間の一様乱数を生成し、選択した数値以下の値を持つ CDF 内の最大の数値を見つけ、この CDF 値に対応するカテゴリを返します。

    }

Q1 . これは問題を解決する正しい方法ですか?

Q2 . カテゴリの確率を格納するために NSDecimals を使用しているという警告は引き続き保持されます。これを簡単に行うために使用できるライブラリや Cocoa や Math.h などの関数はありますか? 私は新しいライブラリを試すことにオープンです。現在、このプロジェクトには Core-Plot と標準の Cocoa ライブラリしかありません。ありがとう。

4

2 に答える 2

1

問題の説明が不明確です。しかし、逆変換サンプリングを探しているようです。

基本的に、最初に元のデータに対応する累積分布関数 (CDF)を生成する必要があります。F(x) と呼びます。次に、範囲 0->1 の一様乱数データを生成し、逆 CDF、つまり F -1 (x) を使用して変換します。

于 2012-06-08T00:12:15.753 に答える
0

これが私の提案です。これは、「正規化された確率」とは、すべてのタイプの確率の合計が1であることを意味することを前提としています(そうでない場合は、再スケーリングする必要があります)。

  • 60種類の注文をしてください。(アルファベット順で言ってください。)
  • 0から1までの乱数を生成します(これを「ターゲット」と呼びます)。
  • 最初は0でアキュムレータを作成します。
  • 60種類をループします。タイプごとに:
    • そのタイプのイベントの確率をアキュムレータに追加します。
    • アキュムレータがターゲット以上の場合は、そのタイプのイベントを生成して停止します。

それを1000回行うと、探しているディストリビューションが得られると思います。

于 2012-06-07T23:28:51.790 に答える