python で
幾何分布とは 何か
統計学入門から
X回目で
統計学入門 (基礎統計学Ⅰ) | 東京大学教養学部統計学教室 |本 | 通販 | Amazon には、
幾何分布とは
幾何分布は、
時間を 1,2,3,…離散的に 考える とき、 初めてのSを 得るまで 待つ 時間の 長さの 確率分布であり、 離散的な 待ち時間分布 waiting time distribution と 呼ばれる。 現実での
例 災害の
到来、 失敗する 回数 負の
二項分布との 関係 負の二項分布 の
公式は 以下で、 k = 1 の 場合、 幾何分布となる。
$$ f(x)= {k+x-1}Cp^kq^{x}, {x} = 0, 1, 2 … $$
wikipediaから
幾何分布 - Wikipedia に
幾何分布の
重要な 性質と して、 無記憶性と 呼ばれる ものが ある。 中略..
各種のギャンブルに おいて 負けが 続くと、 しばしば 「運が たまっている」とか 「そろそろ 勝ちが 巡ってくる」と いった 考えに 陥りがちである。しかし、 試行の 独立性を 仮定する 限りに おいては、 この 考えは 誤謬であり、 負けが 続いていると いう 情報は 未来の 確率に 何の 影響も 与えないと いう ことが、 無記憶性から わかる。 この 逆、 すなわち 無記憶性を 持つ 離散型確率分布が 幾何分布のみである ことも、 比較的容易に 示される。
幾何分布の 計算が できる ライブラリに ついて
他の分布と
numpy.random.geometric
scipy.stats.geom
numpy.random.geometric を 使う
numpy.random.geometric は
* ヒストグラム描画
# ヒストグラム描画 %matplotlib inline import numpy as np import matplotlib.pyplot as plt # グラフサイズの指定 plt.figure(figsize=(6,6),dpi=100) #成功確率 0.05 試行回数 10000 x1 = np.random.geometric(0.05,10000) count, bins, ignored = plt.hist(x1, 30, normed=True,histtype="bar",color="blue", alpha=0.3) #成功確率 0.1 試行回数 10000 x2 = np.random.geometric(0.1,10000) count, bins, ignored = plt.hist(x2, 30, normed=True,histtype="bar",color="yellow", alpha=0.3) #成功確率 0.2 試行回数 10000 x3 = np.random.geometric(0.2,10000) count, bins, ignored = plt.hist(x3, 30, normed=True,histtype="bar",color="green", alpha=0.3) # 描画 plt.show()
- n回で
成功する 確率を 求める
5回で成功する 確率、 5回以上で 成功する 確率 を 求めます。
# ヒストグラム描画 import numpy as np #成功確率 0.05 試行回数 10000 x1 = np.random.geometric(0.05,10000) # 5回目で成功する確率 print((x1 == 5).sum() / 10000) # 5回以上で成功する確率 print((x1 >= 5).sum() / 10000) #成功確率 0.1 試行回数 10000 x2 = np.random.geometric(0.1,10000) # 5回目で成功する確率 print((x2 == 5).sum() / 10000) # 5回以上で成功する確率 print((x2 >= 5).sum() / 10000) #成功確率 0.2 試行回数 10000 x3 = np.random.geometric(0.2,10000) # 5回目で成功する確率 print((x3 == 5).sum() / 10000) # 5回以上で成功する確率 print((x3 >= 5).sum() / 10000)
0.0398 0.8063 0.0625 0.6534 0.0855 0.4179
scipy.stats.geom を 使う
scipy.stats.geom を
%matplotlib inline from scipy.stats import geom import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 1) p = 0.1 # mements は 文字列 mvsk を指定すると、 m > 平均 v > 分散 > s > 歪度(わいど) k > 尖度(せんど) が返る mean, var, skew, kurt = geom.stats(p, moments='mvsk') print("平均", mean) print("分散", var) print("歪度", skew) print("尖度", kurt) # グラフ描画 x = np.arange(geom.ppf(0.01, p), geom.ppf(0.99, p)) ax.plot(x, geom.pmf(x, p), 'bo', ms=8, label='geom pmf') ax.vlines(x, 0, geom.pmf(x, p), colors='b', lw=5, alpha=0.5) rv = geom(p) ax.vlines(x, 0, rv.pmf(x), colors='k', linestyles='-', lw=1, label='frozen pmf') ax.legend(loc='best', frameon=False) plt.show()
平均 10.0 分散 90.0 歪度 2.0027758514399734 尖度 6.011111111111111
- ランダムな
配列を 返す
scipy.stats.geom.rvs
でnumpy.random.geometric
と同様の 幾何分布に 従う ランダムな 配列を 取得できます。
p = 0.1 from scipy.stats import geom r = geom.rvs(p, size=10000) # 5回目で成功する確率 print((r == 5).sum() / 10000)
0.067
参考
以下、
以上です。
コメント