今回は、
第5回
実際、
matplotlibのインストール
matplotlibはpythonとNumpyのための高機能なグラフ描画ライブラリです。今後もグラフを描画することがあるかと思いますので、
公式サイトのダウンロードから各OS向けのパッケージを入手してインストールしてください。ソースコードからインストールする場合は、
svn co https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/trunk/matplotlib cd matplotlib python setup.py build python setup.py install
確率分布とは
「成人男性の身長は正規分布に従う」
![図1 身長のヒストグラム 図1 身長のヒストグラム](/assets/images/dev/serial/01/machine-learning/0007/thumb/TH800_0006.png)
このような表を度数分布表
ここで例として使った
# -*- coding:utf-8 -*-
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import numpy as np
# 身長の疑似データを生成
sample = 1000
mu, sigma = 170, 5
data = np.random.normal(mu, sigma, sample)
# ヒストグラムの描画
n, bins, patches = plt.hist(data, normed=1, alpha=0.75, align='mid')
y = mlab.normpdf(bins, mu, sigma)
l = plt.plot(bins, y, 'r-', linewidth=1)
plt.title(r'$\mathrm{Histgram\ of\ Height:}\ \mu=%d,\ \sigma=%d$' % (mu, sigma))
plt.xlabel('Height')
plt.ylabel('Probability')
plt.grid(True)
plt.show()
様々な分布
冒頭でも紹介しましたが、
離散型確率分布と連続型確率分布の違いについては既に説明しているので詳細な説明は省略しますが、
離散した数値から成るデータでは、
しかし、
離散型確率分布 | 連続型確率分布 |
---|---|
二項分布、 ポアソン分布、 ベルヌーイ分布、 多項分布、 幾何分布、 負の二項分布、 超幾何分布、 ... |
ガンマ分布、 ベータ分布、 t分布、 F分布、 ディリクレ分布、 指数分布、 カイ二乗分布、 ... |
ここで列挙したものは代表的な分布で、
ベルヌーイ分布(Bernoulli Distribution)
正規分布を聞いたことがある人でも、
試行の結果、
![画像](/assets/images/dev/serial/01/machine-learning/0007/thumb/TH400_0001.png)
例として、
![画像](/assets/images/dev/serial/01/machine-learning/0007/thumb/TH800_0007.png)
このベルヌーイ分布は、
二項分布 (Binomial Distribution)
ベルヌーイ分布は1回の試行結果でした。それでは、
![画像](/assets/images/dev/serial/01/machine-learning/0007/thumb/TH800_0005.png)
例えば、になりますね。これが、
通りの中で、
の確率で起こるため、
![画像](/assets/images/dev/serial/01/machine-learning/0007/thumb/TH400_0000.png)
試行回数を10ずつ増やしながら、
# -*- coding:utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import math
def comb(n, r):
return math.factorial(n) / (math.factorial(n - r) * math.factorial(r))
def binomial(p):
def f(n, x):
prob = comb(n, x) * p ** x * (1 - p) ** (n - x)
return prob
return f
p = 0.5
L = []
trial_count = (10, 20, 30, 40, 50)
colors = ["r", "g", "b", "c", "y"]
f = binomial(p)
for n in trial_count :
L.append([f(n, x) for x in range(n)])
for prob, color in zip(L, colors) :
plt.plot(prob, color)
ax = plt.axes()
ax.set_xlim(0, 50)
ax.set_ylim(-0.05, 0.3)
plt.title(r'$\mathrm{Binomial Distribution}\ P=%f$' % (p))
plt.xlabel('Trial')
plt.ylabel('Probability')
plt.legend([str(n) for n in trial_count])
plt.show()
ポアソン分布(Poisson Distribution)
1時間あたりの交通事故が発生する確率や、
![画像](/assets/images/dev/serial/01/machine-learning/0007/thumb/TH400_0008.png)
この分布は平均
![画像](/assets/images/dev/serial/01/machine-learning/0007/thumb/TH800_0002.png)
例として、
![画像](/assets/images/dev/serial/01/machine-learning/0007/thumb/TH800_0010.png)
このグラフを描画しているコードでも、
# -*- coding:utf-8 -*_
import matplotlib.pyplot as plt
import numpy as np
import math
def poisson(lambd):
def f(x):
return float(lambd ** x) * np.exp(-lambd) / math.factorial(x)
return f
N = 8
L = []
score_mean = 0.8
f = poisson(score_mean)
L.append([f(k) for k in range(N + 1)])
for prob in L:
plt.plot(range(N + 1), prob, 'r')
ax = plt.axes()
ax.set_xlim(0, N)
ax.set_ylim(-0.01, 0.5)
plt.title('Soccer Score')
plt.xlabel('Score')
plt.ylabel('Probability')
plt.grid(True)
plt.show()
まとめ
今回は離散型確率分布の中から3つの分布を紹介しました。連続型確率分布でも標本が小さい時に有効なt分布や、
次回の理論編は、