Generator.dirichlet – ディリクレ分布から乱数配列を作成する方法

Generator.dirichletは、NumPyでディリクレ分布から乱数配列を生成するための、randomモジュールのジェネレータメソッドです。

ディリクレ分布はベータ分布を多変量に拡張した分布と考えることができ、ベイズ推定における多項分布の共役事前分布であることが知られています。

このページでは、このGenerator.dirichletについて解説します。なお、同じ操作をするのに今までは、np.random.dirichlet関数を使っていましたが、現在ではGenerator.dirichletが推奨されています。

目次

1. 書式

Generator.dirichlet

書き方:

Generator.dirichlet(alpha, size=None)

パラメーター:

alpha: sequence of floats, length k
分布のパラメータ。length k は標本の長さk。
size: int or tuple of ints, optional
出力する配列のshapeを指定。デフォルトのNoneでは、長さkのベクトルを返す。

戻り値: 

samples: ndarray
shape(size, k)の乱数

例外:

ValueError
alphaに0以下の値が含まれている場合

2. サンプルコード

まずは、random.default_rng コンストラクタでジェネレータオブジェクトを作成します。『numpy.random.default_rng – 乱数生成のためのジェネレータオブジェクトの作成』に目を通しておいてください。

In [1]:
import numpy as np
rng = np.random.default_rng()
rng
Out[1]:
Generator(PCG64) at 0x7FC59398BB88

こうして作成したジェネレータオブジェクト rng に対して、Generator.diricletを呼び出します。その際、第一引数にalpha、第二引数にsizeを渡します。

sizeを指定しない場合は、alphaの長さkの配列を返します。

In [2]:
alpha = [5., 5., 5.]
rng.dirichlet(alpha)
Out[2]:
array([0.37584693, 0.28580375, 0.33834932])

sizeを指定すると、(size, k)の2次元配列を返します。

In [3]:
rng.dirichlet(alpha, 5)
Out[3]:
array([[0.31150908, 0.47373517, 0.21475575],
       [0.3250308 , 0.41268781, 0.26228138],
       [0.24343561, 0.31836816, 0.43819623],
       [0.56278605, 0.29648092, 0.14073303],
       [0.2044565 , 0.32324463, 0.47229886]])

ディリクレ分布のパラメータの直感的な理解を助ける例として、長さ1.0の紐をハサミで切って、異なる長さのK本の紐にするというものがあります。ここでは3本にするとして、それぞれ長さが指定されているとします。これを定規を使わずに、指定の長さになるように感覚的に切っていきます。

これを20回行ったとしたら、実際の紐の長さは確率的に次のようになります。

In [4]:
import matplotlib.pyplot as plt

s = rng.dirichlet((10, 5, 3), 20).transpose()

plt.barh(range(20), s[0])
plt.barh(range(20), s[1], left=s[0], color='g')
plt.barh(range(20), s[2], left=s[0]+s[1], color='r')
plt.title("Lengths of Strings")

3. まとめ

以上のように、Generator.diricletはディリクレ分布から乱数配列を生成するジェネレータメソッドです。

これまで使われていたnp.random.diriclet関数は継続して使用可能ですが、Generator.diricletメソッドを使った方が遥かに高速で科学技術計算に適しています。

Python初心者におすすめのプログラミングスクール

「未経験からでもPythonを学べるプログラミングスクールを探しているけど、色々ありすぎてわからない」なら、次の3つのプログラミングスクールから選んでおけば間違いはありません。

Aidemy Premium:全くの初心者ができるだけ効率よく短期間で実務的に活躍できるAI人材になることを目的とした講座。キャリアカウンセリングや転職エージェントの紹介などの転職支援も充実しており、受講者の転職成功率が高い。

AIジョブカレPythonの基本をおさえた人が、実際に機械学習やディープラーニングを活用できるようになるための講座。転職補償型があるなどキャリア支援の内容が非常に手厚く、講師の質も最高クラス。コスパ最高。Python初心者用の対策講座もある。

データミックスプログラミング経験者のビジネスマンが、更なるキャリアアップのためにデータの処理方法を学んでデータサイエンティストになるための講座。転職だけでなく起業やフリーランスとして独立する人も多い。Python初心者用の対策講座もある。

特に、あなたが以下のような目標を持っているなら、この中から選んでおけば間違いはないでしょう。

・未経験からPythonエンジニアとして就職・転職したい
・AIエンジニアやデータサイエンティストとしてキャリアアップしたい
・起業やフリーランスを視野に入れたい

理由は「Python初心者のためのおすすめプログラミングスクール3選」で解説しています。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる