歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【Python】scipyとmatplotlibでベータ関数を描画

 続パタの第4章にあるベータ分布のグラフを描画してみました。

続・わかりやすいパターン認識―教師なし学習入門―

続・わかりやすいパターン認識―教師なし学習入門―

 

 

結果はこれです。

f:id:takeshi0406:20150607103847p:plain

コードはこんな感じ。

import numpy as np
import scipy.stats from matplotlib import pyplot as plt x = np.linspace(0, 1, 1000) plt.xlim(0, 1) plt.ylim(0, 5) plt.xlabel(r"$\theta$",fontsize=20, fontname='serif') plt.ylabel(r"$P(\theta; \alpha, \beta)$",fontsize=20, fontname='serif') params = [[3,9],[6,6],[9,3],[1,1],[1,5],[5,1],[16,16]] for param in params: rv = scipy.stats.beta(param[0],param[1]) y = rv.pdf(x) plt.plot(x, y, '-', lw=2, label=param) plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0) #凡例を枠外に表示する plt.show()

 

 scipy.statsにベータ分布の関数が用意されていたので、それを利用しました。ベータ分布がパラメータ(α、β)によってどんな形になるのか確認したかっただけなので。

参考にしたのは以下のページです。

aidiary.hatenablog.com

scipy.stats.beta — SciPy v0.15.1 Reference Guide

 

numpyでもベータ分布を乱数として出力してくれる機能はあるのですが、↑のようにきれいな曲線は描けそうにありませんでした。

 

また、matplotlibで凡例を枠外に表示するやり方は以下のページを参考にしました。

matplotlibで、系列の凡例を枠外に表示する - Symfoware