Traffine I/O

日本語

2022-12-01

ベルヌーイ分布

ベルヌーイ分布とは

コイントスで表が出るか裏が出るか、新薬に効果があるかないかなど、ある試行をして2つの事象しか得られない試行をベルヌーイ試行といい、ベルヌーイ分布とは、1回のベルヌーイ試行よって得られる確率分布になります。

ベルヌーイ試行では2つのうち一方の事象を「成功とみなし、確率変数 X がとる値を1、もう一方の事象を「失敗」とみなし、確率変数 X がとる値を0とみなします。成功確率を p とすると、それぞれの事象の確率は以下のようになります。

事象 1 0
確率 p 1-p

ベルヌーイ分布は成功確率 p に依存して以下のような分布になります。

Bernoulli distribution

二項分布との関係

二項分布において、n=1のときをベルヌーイ分布といいます。つまりベルヌーイ分布は二項分布の特殊なケースということになります。

サイコロの例

サイコロを1回投げて1の目が出る回数の分布について考えます。

まずは事象のついて考えます。事象としては、以下の2パターンになります。

  • 1の目が出る
  • 1の目が出ない

このように事象が発生する、しないといった2択の事象であり、試行が1回であるため、この事象が起こる確率の分布はベルヌーイ分布になります。

次に事象の発生確率を考えます。1の目が出る確率、1の目が出ない確率はそれぞれ以下のようになります。

事象 1 の目が出る 1 の目が出ない
確率 \frac{1}{6} \frac{5}{6}

Python コード

ベルヌーイ分布のgifを作成するコードは以下になります。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import animation, rc
from matplotlib.animation import FuncAnimation
from IPython.display import HTML, Image # For GIF

rc('animation', html='html5')
np.random.seed(5)

# Set up formatting for the movie files
Writer = animation.writers['ffmpeg']
writer = Writer(fps=15, metadata=dict(artist='Me'), bitrate=1800)

prob_vals = np.arange(start=0.0, stop=1.01, step=0.05)

plt.style.use('ggplot')
fig = plt.figure(figsize=(10, 5))

def update(i):
    # initialize the graph of the previous frame
    plt.cla()

    p = prob_vals[i]

    # draw bernoulli distribution
    plt.bar([0.0, 1.0], [1.0 - p, p], alpha=0.5) # bar graph
    plt.xlabel('x')
    plt.ylabel('probability')
    plt.suptitle('Bernoulli Distribution', fontsize=20)
    plt.title('$p=' + str(np.round(p, 2)) + '$', loc='left')
    plt.xticks(ticks=[0, 1]) # x axis ticks
    plt.grid()
    plt.ylim(-0.1, 1.1)

anime_prob = FuncAnimation(fig, update, frames=len(prob_vals), interval=1000)

anime_prob.save('bernoulli_dist.gif', writer='pillow', fps=1)
Image(url='bernoulli_dist.gif')

Bernoulli distribution

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!