読者です 読者をやめる 読者になる 読者になる

俺とプログラミング

某IT企業でエンジニアをしてます。このブログではプログラミングに関わることを幅広く発信します。

Pythonのベイズ法ライブラリBayesPyのインストールとサンプルの実行

Python Ubuntu Machine Learning

変分ベイズ法(VB: Variational Baysian Methods)を試してみたかったのでBayesPyというライブラリを使いました。そのインストールの方法などを紹介します。環境はUbuntuです。

インストール

Python3.x系のみサポートしています(Python2.x系では使えない)。 まずはPython3.x用のpipをインストールします。

# python3-devが必要
sudo apt-get install python3-dev 

# pip3のインストール
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
rm get-pip.py

# bayespyのインストール
sudo pip3 install bayespy

# cairocffiもインストールする(エラーがでるため)
sudo pip3 install cairocffi

変分ベイズ法のサンプル

ランダムに初期化しているため、やるたびに結果は変わります。

import numpy as np
import matplotlib.pyplot as plt
import bayespy.plot as bplt
from bayespy.nodes import Dirichlet, Categorical
from bayespy.nodes import Gaussian, Wishart
from bayespy.nodes import Mixture
from bayespy.inference import VB

# 4つの分布にしたがってランダムに点を生成
y0 = np.random.multivariate_normal([0,0],[[2,0],[0,0.1]], size=50)
y1 = np.random.multivariate_normal([0,0],[[0.1,0],[0,2]], size=50)
y2 = np.random.multivariate_normal([2,2],[[2,-1.5],[-1.5,2]], size=50)
y3 = np.random.multivariate_normal([-2,-2],[[0.5,0],[0,0.5]], size=50)
y = np.vstack([y0,y1,y2,y3])

# ベクトルの長さ(200)
N = y.shape[0]

# 要素の次元
D = 2

# 推定する分布の数
K = 5

# 変分ベイズ法
alpha = Dirichlet(1e-5*np.ones(K), name='alpha')
Z = Categorical(alpha, plates=(N,),name='z')
mu = Gaussian(np.zeros(D), 1e-5*np.identity(D), plates=(K,),name='mu')
Lambda = Wishart(D,1e-5*np.identity(D), plates=(K,), name='Lambda')
Y = Mixture(Z, Gaussian, mu, Lambda, name='Y')
Z.initialize_from_random()
Q = VB(Y,mu,Lambda,Z,alpha)
Y.observe(y)
Q.update(repeat=1000)

# 結果を描画
bplt.gaussian_mixture_2d(Y, alpha=alpha, scale=2)
bplt.pyplot.show()
  • 実行結果

f:id:ttlg:20151218191841p:plain

Copyright © 2016 ttlg All Rights Reserved.