Generator.weibull – ワイブル分布から乱数配列を作成する方法

Generator.weibullは、ワイブル分布から乱数配列を生成するジェネレータメソッドです。

ワイブル分布は、一般化極値分布の一つで、極値問題のモデリングに使われます。具体的には、時間に対する劣化現象や寿命を統計的に記述するためによく使われます。

なお、一般化極値分布には、他にガンベル分布やフレシェ分布(逆ワイブル分布)があります。

このページではワイブル分布から乱数配列を生成するGenerator.weibullについて解説します。

目次

1. 書式

Generator.weibull

書き方:

Generator.weibull(a, size=None)

パラメーター:

a: float or array_like of floats
分布の形状パラメータ
size: int or tuple of ints, optional
出力する配列のshape。(m, n, k)を渡すと、shape(m, n, k)の乱数配列を生成する。デフォルト値Noneで、aがスカラーの場合は1つの乱数の値を返す。それ以外の場合はnp.array(a).sizeの乱数配列を返す。

戻り値: 

out: ndarray or scalar
パラメータを設定したワイブル分布から乱数配列を生成。

Notes

ワイブル分布の確率密度関数は次の通りです。

αがshapeで、λがscaleです。関数の最頻値は以下の式で求められます。

a=1 の時、ワイブル分布は指数分布に低減します。

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 0x7FD742387E58

こうして作成したジェネレータオブジェクト rng に対して、Generator.weibullを呼び出すことによって、ワイブル分布から乱数配列を取得することができます。

第一引数にαを、第二引数に配列のsizeを渡します。

In [2]:
rng.weibull(5., 5)
Out[2]:
array([0.62853473, 0.90678055, 0.88535843, 0.91084908, 0.76068124])

生成した乱数のヒストグラムと、確率密度関数を描いてみましょう。

In [3]:
a = 5. 

import matplotlib.pyplot as plt
x = np.arange(1,100.)/50.
def weib(x,n,a):
    return (a / n) * (x / n)**(a - 1) * np.exp(-(x / n)**a)

count, bins, ignored = plt.hist(rng.weibull(5.,1000))
x = np.arange(1,100.)/50.
scale = count.max()/weib(x, 1., 5.).max()
plt.plot(x, weib(x, 1., 5.)*scale)
plt.show()

ワイブル分布は、αが1に近づくほど指数分布に近づいていきます。

In [4]:
import matplotlib.pyplot as plt

plt.subplot(221)
count, bins, ignored = plt.hist(rng.weibull(1.,10000))
plt.title('a=1.', fontsize=12)

plt.subplot(222)
count, bins, ignored = plt.hist(rng.weibull(5.,10000))
plt.title('a=5.', fontsize=12)

plt.subplot(223)
count, bins, ignored = plt.hist(rng.weibull(20.,10000))
plt.title('a=20.', fontsize=12)

plt.subplot(224)
count, bins, ignored = plt.hist(rng.weibull(50.,10000))
plt.title('a=50.', fontsize=12)

plt.tight_layout()
plt.show()

3. まとめ

以上、Generator.weibullはワイブル分布から乱数配列を生成するジェネレータメソッドです。

以前は、numpy.random.weibull関数が使われていましたが、ジェネレータメソッドを使うようにしましょう。こちらの方が、処理が高速で、大量のデータを扱う科学技術計算に適しているからです。

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

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

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

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

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

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

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

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



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる