6

Python でディリクレ分布の pdf を計算したいのですが、どのような種類の標準ライブラリでもそのためのコードを見つけることができませんでした。scipy.stats には分布の長いリストが含まれていますが、ディリクレは含まれていないようです。

ディリクレは非常に一般的であるため、scipy.stats などで検索する必要がある他の名前があるかどうか、または何らかの理由でそれを見逃しただけかどうか疑問に思っています。

4

4 に答える 4

5

numpy で見つけられませんでしたが、実装するのに十分に見えました。これは醜い小さなワンライナーです。(x = [x1, ..., xk] と alpha = [a1, ..., ak] を提供する必要があることを除いて、ウィキペディアで指定された関数に従いました)。

import math
import operator

def dirichlet_pdf(x, alpha):
  return (math.gamma(sum(alpha)) / 
          reduce(operator.mul, [math.gamma(a) for a in alpha]) *
          reduce(operator.mul, [x[i]**(alpha[i]-1.0) for i in range(len(alpha))]))

警告: 私はこれをテストしていません。それが機能するかどうか教えてください。

于 2012-05-18T20:49:45.547 に答える
3

scipyバージョン 0.15の時点で、使用できますscipy.stats.dirichlet.pdf (こちらを参照)

于 2015-11-03T02:05:44.673 に答える
-1

ガンマ分布からディリクレ分布を導き出すことができます。これはウィキペディアのページに示されています。そこに、次の python コードがあります。

    params = [a1, a2, ..., ak]
    sample = [random.gammavariate(a,1) for a in params]
    sample = [v/sum(sample) for v in sample]
于 2012-05-18T20:23:40.923 に答える
-2

に含まれている可能性があると思いますが、それがnumpy.random.mtrand.dirichletpdfなのかサンプリング用なのか完全にはわかりません。

于 2012-05-19T00:54:43.407 に答える