離散べき法則分布から正確に変量を生成する


8

べき法則に従って分布するランダムな整数を正確に生成するための最良の方法は何ですか?()を取得する確率はと等しく、メソッドはうまく機能するはずです。、K = 1 2 ... PのK = K - γ / ζ γ γ > 1kk=1,2,pk=kγ/ζ(γ)γ>1

私は2つの素朴なアプローチを見ることができます:

  1. 計算はいくつかの大規模までよう次いで、これらの確率に応じて整数を生成する、1に"十分に近い"です。が巨大である必要があるため、が1に近い場合、これは機能しません。K maxのΣのK maxの K = 1、γ k個の最大pkkmaxk=1kmaxγkmax

  2. 連続するべき乗則の分布(解く方法を知っている簡単な問題)から実数を引き出し、何らかの方法で整数に丸めます。上記の方法で各整数を取得する正確な確率を分析的に計算することが可能です。拒否を使用してこれらをに修正できます(関数を評価できる場合は、これも計算できます)。(これは、ある値よりも大きいに対してよりも高い確率で整数を取得し、それよりも小さいを個別に処理する方法でため、になります。) ζ P K K Kpkζpkkk

正確でもある(概算ではない)より良い方法はありますか?


2
既製のソフトウェアを探しているのではありません。私は方法を探しています。
Szabolcs 2014年

メソッドは見つかりましたか?
syko 2016年

回答:


6

方法2(のわずかに変更されたバージョン)は非常に単純で、実際には

ウィキペディアで提供されているパレート分布関数の定義を使用する

FX(x)={1(xmx)αxxm,0x<xm,

とを取る場合、との比率で最大となるあなただけで比率で拡張することができ意味、と直線拒絶サンプリングを使用します。それはかなり効率的です。 α=γP、X、Q、X=FXX+1xm=12α=γpxx=1x=1qx=FX(x+12)FX(x12)x=1x=1

より明確にするために:とを使用してパレートから生成し、(切り捨てではなく)最も近い整数に丸める場合、拒否サンプリングを使用することが可能と思われますで -の各生成された値そのプロセスの確率で受け入れられる。 α=γM=P1/Q1XPのXxm=12α=γM=p1/q1xpxMqx

ここに画像の説明を入力してください

(ここでのは私が怠惰であるため、少し切り上げられました。実際には、この場合の適合は少し異なりますが、プロットで異なるようにするには十分ではありません。実際、小さい画像では、少し小さすぎるように見えます実際には小さすぎます)M

より慎重なのチューニングと(いくつかのために 0と1の間と言う)は、おそらく、さらに効率を高めるが、このアプローチは、私がプレイした場合には、合理的に良くないでしょう。 α α = γ - Axmαα=γaa

典型的な値の範囲をある程度理解できれば、そこで効率を詳しく調べることができます。γ


方法1は、ほぼ常に方法1を実行してから、尾を処理する別の方法を適用することにより、正確に適応させることもできます。これは非常に高速な方法です。

たとえば、長さが256の整数ベクトルを取得し、最初の値をで埋め、次の値をで埋める場合、まで続きます-これはほぼアレイ全体を使い果たします。残りのいくつかのセルは、右テールと左部分からの確率の小さな「残り」のビットの処理を組み合わせた2番目の方法に移動することを示しています。256 P 2256 P I < 1256p11256p22256pi<1

左側の残骸は、いくつかの方法で(たとえば、自動化されている場合は、「ヒストグラムを二乗する」と言っても、それほど効率的である必要はありません)、右側のテールは次のようにして実行できます。上記のAccept-Rejectアプローチのようなもの。

基本的なアルゴリズムは、1から256までの整数を生成することを含みます(これは、rngから8ビットのみを必要とします。効率が最優先の場合、ビット操作はそれらを「上から」取り、残りの均一な数値を残すことができます(最適です)このポイントまでの正規化されていない整数値として左)は、必要に応じて左の残党と右の尾を処理するために使用できます。

注意深く実装すると、この種の処理は非常に高速になる可能性があります。256 とは異なる値を使用できます(たとえば、が可能性があります)。ただし、概念的にはすべてが同じです。ただし、非常に大きなテーブルを使用する場合、尾を生成するために十分なビットがユニフォームに残っていない可能性があり、そこに2番目のユニフォーム値が必要です(ただし、非常にまれに必要になるため、それほど多くありません)問題)2 162k216

上記のように同じゼータ(2)の例では、212があるだろう1の、26 2の、7 3の、3 4の、いずれか5と250から256の値は残りを扱うことになります。97%以上の時間で、表(1〜5)のいずれかの値を生成します。


私は私の答えにいくつかの追加をしました、そして、より多くの詳細を与えるために、さらにいくつかを作るつもりです。
Glen_b-モニカ

ありがとう---私は追加を期待していませんでした。さらに編集する場合は、pingを送信してください。私はこのサイトに頻繁にアクセスせず、「2。進むべき道だ」という答えをすでに受け入れているので、他の方法では気付かないかもしれません。
Szabolcs 14

4

y

yの値を切り捨てる(切り捨てる)など、整数を生成するための他の近似手法では、結果が大幅に低下するため、使用しないでください。

r[0,1)x=P1(1r)P(x)=a=xP(X=a)P(x)P(x)=1r

正確な計算にはコストがかかるため、を定義する近似方法も提供されます は、連続べき乗則の値を丸めるだけではまったく同じではありません。この近似の誤差は、Clausetらの式(D.7)で与えられます。依存します。 γ

x=12(1r)1/(1γ)+12
γ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.