Generator.logistic – ロジスティック分布から乱数配列を作成する方法

Generator.logisticは、ロジスティック分布から乱数配列を生成するジェネレータメソッドです。

ロジスティック分布は、ガンベル分布の混合のように機能するので、疫学の極値問題によく使われます。また、国際チェス連盟のイロレーティング(プレイヤーの実力を相対評価で示す指標)にも使われています。チェスプレイヤーの成績が、ロジスティック分布とよく合致するからです。

ここでは、このロジスティック分布から乱数配列を生成するGenerator.logisticについて解説します。

目次

1. 書式

Generator.logistic

書き方:

Generator.logistic(loc=0.0, scale=1.0, size=None)

パラメーター:

loc: float or array_like of floats, optional
平均値μ。デフォルト値は0。
scale: float or array_like of floats, optional
標準偏差σ。デフォルト値は1。
size: int or tuple of ints, optional
出力する配列のshapeを指定する。デフォルト値のNoneの場合で、かつ、loc, scaleがスカラーの場合、1つの乱数の値を返す。それ以外の場合は、np.broadcast(loc, scale).sizeの乱数を生成する。

戻り値: 

out: ndarray or scalar
パラメータを設定したロジスティック分布からの乱数を出力する。

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

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

第一引数ではloc、第二引数でscale、第三引数でsizeを指定します。

In [2]:
rng.logistic(10, 1, 5)
Out[2]:
array([10.01674745,  8.67810226,  8.44347328, 10.84514798, 10.53226814])

それぞれ異なるlocとscaleを指定したときの違いをヒストグラムと確率密度関数で確認していきましょう。

In [3]:
import matplotlib.pyplot as plt

def logist(x, loc, scale):
    return np.exp((loc-x)/scale)/(scale*(1+np.exp((loc-x)/scale))**2)

plt.subplot(221)
loc, scale = 0, 1 
s = np.random.default_rng().logistic(loc, scale, 10000)
count, bins, ignored = plt.hist(s, bins=50)
lgst_val = logist(bins, loc, scale)
plt.plot(bins, lgst_val * count.max() / lgst_val.max())
plt.title('loc=0, scale=1', fontsize=12)

plt.subplot(222)
loc, scale = 10, 1 
s = np.random.default_rng().logistic(loc, scale, 10000)
count, bins, ignored = plt.hist(s, bins=50)
lgst_val = logist(bins, loc, scale)
plt.plot(bins, lgst_val * count.max() / lgst_val.max())
plt.title('loc=10, scale=1', fontsize=12)

plt.subplot(223)
loc, scale = 0, 10 
s = np.random.default_rng().logistic(loc, scale, 10000)
count, bins, ignored = plt.hist(s, bins=50)
lgst_val = logist(bins, loc, scale)
plt.plot(bins, lgst_val * count.max() / lgst_val.max())
plt.title('loc=0, scale=10', fontsize=12)

plt.subplot(224)
loc, scale = 10, 10 
s = np.random.default_rng().logistic(loc, scale, 10000)
count, bins, ignored = plt.hist(s, bins=50)
lgst_val = logist(bins, loc, scale)
plt.plot(bins, lgst_val * count.max() / lgst_val.max())
plt.title('loc=10, scale=10', fontsize=12)

plt.tight_layout()
plt.show()

3. まとめ

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

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

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

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

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

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

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

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

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

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



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる