bayesml.normal package#

モジュール内容#

このモジュールでは正規-ガンマ事前分布を用いた正規分布を利用できます。

_images/normal_example.png

確率的データ生成モデル#

確率的データ生成モデルは以下の通りです:

  • \(x \in \mathbb{R}\): データ点

  • \(\mu \in \mathbb{R}\): 平均パラメータ

  • \(\tau \in \mathbb{R}_{>0}\): ノイズの精度パラメータ

\[\begin{split}p(x | \mu, \tau) &= \mathcal{N}(x|\mu,\tau^{-1})\\ &= \sqrt{\frac{\tau}{2\pi}} \exp \left\{ -\frac{\tau}{2}(x-\mu)^2 \right\},\end{split}\]
\[\begin{split}&\mathbb{E}[x | \mu, \tau] = \mu, \\ &\mathbb{V}[x | \mu, \tau] = \tau^{-1}.\end{split}\]

事前分布#

事前分布は以下の通りです:

  • \(m_0 \in \mathbb{R}\): ハイパーパラメータ

  • \(\kappa_0 \in \mathbb{R}_{>0}\): ハイパーパラメータ

  • \(\alpha_0 \in \mathbb{R}_{>0}\): ハイパーパラメータ

  • \(\beta_0 \in \mathbb{R}_{>0}\): ハイパーパラメータ

  • \(\Gamma (\cdot)\): ガンマ関数

\[\begin{split}p(\mu, \tau) &= \mathcal{N}(\mu|m_0,(\kappa_0 \tau)^{-1}) \mathrm{Gam}(\tau | \alpha_0, \beta_0) \\ &= \sqrt{\frac{\kappa_0 \tau}{2\pi}} \exp \left\{ -\frac{\kappa_0 \tau}{2}(\mu-m_0)^2 \right\} \frac{\beta_0^{\alpha_0}}{\Gamma (\alpha_0)} \tau^{\alpha_0 - 1} \exp \{ -\beta_0 \tau \},\end{split}\]
\[\begin{split}\mathbb{E}[\mu] &= m_0 & \left( \alpha_0 > \frac{1}{2} \right), \\ \mathbb{V}[\mu] &= \frac{\beta_0}{\kappa_0 (\alpha_0 - 1)} & (\alpha_0 > 1), \\ \mathbb{E}[\tau] &= \frac{\alpha_0}{\beta_0}, \\ \mathbb{V}[\tau] &= \frac{\alpha_0}{\beta_0^2}.\end{split}\]

事後分布#

事後分布は以下の通りです:

  • \(x^n = (x_1, x_2, \dots , x_n) \in \mathbb{R}^n\): 与えられたデータ

  • \(m_n \in \mathbb{R}\): ハイパーパラメータ

  • \(\kappa_n \in \mathbb{R}_{>0}\): ハイパーパラメータ

  • \(\alpha_n \in \mathbb{R}_{>0}\):ハイパーパラメータ

  • \(\beta_n \in \mathbb{R}_{>0}\): ハイパーパラメータ

  • \(\Gamma (\cdot)\): ガンマ関数

\[\begin{split}p(\mu, \tau | x^n) &= \mathcal{N}(\mu|m_n,(\kappa_n \tau)^{-1}) \mathrm{Gam}(\tau | \alpha_n, \beta_n) \\ &= \sqrt{\frac{\kappa_n \tau}{2\pi}} \exp \left\{ -\frac{\kappa_n \tau}{2}(\mu-m_n)^2 \right\} \frac{\beta_n^{\alpha_n}}{\Gamma (\alpha_n)} \tau^{\alpha_n - 1} \exp \{ -\beta_n \tau \},\end{split}\]
\[\begin{split}\mathbb{E}[\mu | x^n] &= m_n & \left( \alpha_n > \frac{1}{2} \right), \\ \mathbb{V}[\mu | x^n] &= \frac{\beta_n}{\kappa_n (\alpha_n - 1)} & (\alpha_n > 1), \\ \mathbb{E}[\tau | x^n] &= \frac{\alpha_n}{\beta_n}, \\ \mathbb{V}[\tau | x^n] &= \frac{\alpha_n}{\beta_n^2},\end{split}\]

ここでハイパーパラメータの更新式は以下で与えられます

\[\begin{split}\bar{x} &= \frac{1}{n} \sum_{i=1}^n x_i, \\ m_n &= \frac{\kappa_0 m_0 + n \bar{x}}{\kappa_0 + n}, \\ \kappa_n &= \kappa_0 + n, \\ \alpha_n &= \alpha_0 + \frac{n}{2}, \\ \beta_n &= \beta_0 + \frac{1}{2} \left( \sum_{i=1}^n (x_i - \bar{x})^2 + \frac{\kappa_0 n}{\kappa_0 + n} (\bar{x} - m_0)^2 \right).\end{split}\]

予測分布#

予測分布は以下の通りです:

  • \(x_{n+1} \in \mathbb{R}\): 新たなデータ点

  • \(\mu_\mathrm{p} \in \mathbb{R}\): 予測分布のハイパーパラメータ

  • \(\lambda_\mathrm{p} \in \mathbb{R}_{>0}\): 予測分布のハイパーパラメータ

  • \(\nu_\mathrm{p} \in \mathbb{R}_{>0}\): 予測分布のハイパーパラメータ

\[\begin{split}p(x_{n+1} | x^{n} ) &= \mathrm{St}(x_{n+1} | \mu_\mathrm{p}, \lambda_\mathrm{p}, \nu_\mathrm{p}) \\ &= \frac{\Gamma (\nu_\mathrm{p} / 2 + 1/2 )}{\Gamma (\nu_\mathrm{p} / 2)} \left( \frac{\lambda_\mathrm{p}}{\pi \nu_\mathrm{p}} \right)^{1/2} \left( 1 + \frac{\lambda_\mathrm{p} (x_{n+1} - \mu_\mathrm{p})^2}{\nu_\mathrm{p}} \right)^{-\nu_\mathrm{p}/2 - 1/2},\end{split}\]
\[\begin{split}\mathbb{E}[x_{n+1} | x^n] &= \mu_\mathrm{p} & (\nu_\mathrm{p} > 1), \\ \mathbb{V}[x_{n+1} | x^n] &= \frac{1}{\lambda_\mathrm{p}} \frac{\nu_\mathrm{p}}{\nu_\mathrm{p}-2} & (\nu_\mathrm{p} > 2),\end{split}\]

ここで、パラメータは事後分布のハイパーパラメータから以下のように求められます:

\[\begin{split}\mu_\mathrm{p} &= \mu_n, \\ \lambda_\mathrm{p} &= \frac{\kappa_n}{\kappa_n + 1} \frac{\alpha_n}{\beta_n}, \\ \nu_\mathrm{p} &= 2 \alpha_n.\end{split}\]

GitHubスターのお願い#

もしこのページが参考になったら、GitHubリポジトリにスターをいただけると開発の励みになります。
以下のリンクからリポジトリを開いて右上の☆Starを押してください。

リポジトリを開いて右上の☆Starを押す!

GitHubスター

クラス#

class bayesml.normal.GenModel(mu=0.0, tau=1.0, h_m=0.0, h_kappa=1.0, h_alpha=1.0, h_beta=1.0, seed=None)#

ベースクラス: Generative

確率的データ生成モデルと事前分布

パラメータ:
mufloat, optional

実数。デフォルトは 0.0 です

taufloat, optional

正の実数、デフォルトでは1.0です

h_mfloat, optional

実数。デフォルトは 0.0 です

h_kappafloat, optional

正の実数、デフォルトでは1.0です

h_alphafloat, optional

正の実数、デフォルトでは1.0です

h_betafloat, optional

正の実数、デフォルトでは1.0です

seed{None, int}, optional

numpy.random.default_rng() を初期化するシード値です。デフォルトでは None

メソッド

gen_params()

事前分布からパラメータを生成します。

gen_sample(sample_size)

確率的データ生成モデルからサンプルを生成します。

get_constants()

GenModel の定数を取得します。

get_h_params()

事前分布のハイパーパラメータを取得します。

get_params()

確率的データ生成モデルのパラメータを取得します。

load_h_params(filename)

h_paramsにハイパーパラメータをロードします。

load_params(filename)

Load the parameters saved by save_params.

save_h_params(filename)

python pickle モジュールを使ってハイパーパラメータを保存します。

save_params(filename)

python の pickle モジュールを使ってパラメータを保存します。

save_sample(filename, sample_size)

生成されたサンプルを NumPy .npz フォーマットで保存します。

set_h_params([h_m, h_kappa, h_alpha, h_beta])

事前分布のハイパーパラメータを設定します。

set_params([mu, tau])

確率的データ生成モデルのパラメータを設定します。

visualize_model([sample_size, hist_bins])

確率的データ生成モデルと生成されたサンプルを可視化します。

get_constants()#

GenModel の定数を取得します。

このモデルは定数を持ちません。 したがって、この関数は emtpy dict {} を返します。

返り値:
constantsan empty dict
set_h_params(h_m=None, h_kappa=None, h_alpha=None, h_beta=None)#

事前分布のハイパーパラメータを設定します。

パラメータ:
h_mfloat, optional

実数。デフォルトは None です

h_kappafloat, optional

正の実数、デフォルトではNone

h_alphafloat, optional

正の実数、デフォルトではNone

h_betafloat, optional

正の実数、デフォルトではNone

get_h_params()#

事前分布のハイパーパラメータを取得します。

返り値:
h_paramsdict of {str: float}
  • "h_m":``self.h_m``の値

  • "h_kappa":``self.h_kappa``の値

  • "h_alpha" : self.h_alpha の値

  • "h_beta" : self.h_beta の値

gen_params()#

事前分布からパラメータを生成します。

生成された値は、self.mu および self.tau に設定されます。

set_params(mu=None, tau=None)#

確率的データ生成モデルのパラメータを設定します。

パラメータ:
mufloat, optional

実数 \(\mu \in \mathbb{R}\)。デフォルトはNoneです。

taufloat, optional

正の実数、デフォルトではNone

get_params()#

確率的データ生成モデルのパラメータを取得します。

返り値:
paramsdict of {str:float}
  • "mu":self.mu の値

  • "tau" : self.tau の値

gen_sample(sample_size)#

確率的データ生成モデルからサンプルを生成します。

パラメータ:
sample_sizeint

正の整数

返り値:
xnumpy ndarray

サイズが「sammple_size」の1次元配列です。

save_sample(filename, sample_size)#

生成されたサンプルを NumPy .npz フォーマットで保存します。

キーワード "x "でNpzFileとして保存されます。

パラメータ:
filenamestr

サンプルを保存するファイル名。ない場合は .npz が追加されます。

sample_sizeint

正の整数

visualize_model(sample_size=1000, hist_bins=10)#

確率的データ生成モデルと生成されたサンプルを可視化します。

パラメータ:
sample_sizeint, オプション

正の整数(デフォルトは1000)

hist_binsfloat, optional

正の浮動小数点数、デフォルト値は10

例

>>> from bayesml import normal
>>> model = normal.GenModel()
>>> model.visualize_model()
_images/normal_example.png
class bayesml.normal.LearnModel(h0_m=0.0, h0_kappa=1.0, h0_alpha=1.0, h0_beta=1.0)#

ベースクラス: Posterior, PredictiveMixin

事後分布と予測分布

パラメータ:
h0_mfloat, optional

実数。デフォルトは 0.0 です

h0_kappafloat, optional

正の実数、デフォルトでは1.0です

h0_alphafloat, optional

正の実数、デフォルトでは1.0です

h0_betafloat, optional

正の実数、デフォルトでは1.0です

属性:
hn_mfloat

実数

hn_kappafloat

正の実数

hn_alphafloat

正の実数

hn_betafloat

正の実数

p_mufloat

実数

p_lambdafloat

正の実数

p_nufloat

正の実数

メソッド

calc_log_marginal_likelihood()

対数周辺尤度の計算

calc_pred_dist()

予測分布のパラメータを計算します。

calc_pred_var()

予測分布の分散を計算

estimate_interval([credibility])

パラメータの信頼区間

estimate_params([loss, dict_out])

与えられた基準の下で、確率的データ生成モデルのパラメータを推定します。

fit(x)

モデルをデータに当てはめます。

get_constants()

LearnModel の定数を取得します。

get_h0_params()

事後分布のハイパーパラメータの初期値を取得します。

get_hn_params()

事後分布のハイパーパラメータを取得します。

get_p_params()

予測分布のパラメータを取得します。

load_h0_params(filename)

h0_paramsにハイパーパラメータをロードします。

load_hn_params(filename)

hn_paramsにハイパーパラメータをロードします。

make_prediction([loss])

与えられた基準の下で、新しいデータ点を予測します。

overwrite_h0_params()

事後分布のハイパーパラメータの初期値を学習した値で上書きします。

pred_and_update(x[, loss])

逐次的に新しいデータ点を予測し、事後分布を更新します。

predict()

次のデータ点を予測します。

reset_hn_params()

事後分布のハイパーパラメータを初期値に戻します。

save_h0_params(filename)

python pickle モジュールを使ってハイパーパラメータを保存します。

save_hn_params(filename)

python pickle モジュールを使ってハイパーパラメータを保存します。

set_h0_params([h0_m, h0_kappa, h0_alpha, ...])

事前分布のハイパーパラメータを設定します。

set_hn_params([hn_m, hn_kappa, hn_alpha, ...])

事後分布のハイパーパラメータの更新値を設定します。

update_posterior(x)

訓練データを使って事後分布のハイパーパラメータを更新します。

visualize_posterior()

パラメータの事後分布を可視化します。

get_constants()#

LearnModel の定数を取得します。

このモデルは定数を持ちません。 したがって、この関数は emtpy dict {} を返します。

返り値:
constantsan empty dict
set_h0_params(h0_m=None, h0_kappa=None, h0_alpha=None, h0_beta=None)#

事前分布のハイパーパラメータを設定します。

パラメータ:
h0_mfloat, optional

実数。デフォルトは None です

h0_kappafloat, optional

正の実数、デフォルトではNone

h0_alphafloat, optional

正の実数、デフォルトではNone

h0_betafloat, optional

正の実数、デフォルトではNone

get_h0_params()#

事後分布のハイパーパラメータの初期値を取得します。

返り値:
h0_paramsdict of {str: float}
  • "h0_m":``self.h0_m``の値

  • "h0_kappa" : self.h0_kappa の値

  • "h0_alpha" : self.h0_alpha の値

  • "h0_beta" : self.h0_beta の値

set_hn_params(hn_m=None, hn_kappa=None, hn_alpha=None, hn_beta=None)#

事後分布のハイパーパラメータの更新値を設定します。

パラメータ:
hn_mfloat, optional

実数。デフォルトは None です

hn_kappafloat, optional

正の実数、デフォルトではNone

hn_alphafloat, optional

正の実数、デフォルトではNone

hn_betafloat, optional

正の実数、デフォルトではNone

get_hn_params()#

事後分布のハイパーパラメータを取得します。

返り値:
hn_paramsdict of {str: float}
  • "hn_m":``self.hn_m``の値

  • "hn_kappa":``self.hn_kappa``の値

  • "hn_alpha" : self.hn_alpha の値

  • "hn_beta" : self.hn_beta の値

update_posterior(x)#

訓練データを使って事後分布のハイパーパラメータを更新します。

パラメータ:
xnumpy.ndarray

実数

estimate_params(loss='squared', dict_out=False)#

与えられた基準の下で、確率的データ生成モデルのパラメータを推定します。

この基準は、「μ」と「τ」を個別に推定する際に適用される点にご注意ください。したがって、loss="KL" を指定した場合、スチューデントの t 分布とガンマ分布のタプルが返されます。

パラメータ:
lossstr, optional

ベイズリスク関数の基礎となる損失関数、デフォルトは "squared"。この関数は "squared"、"0-1"、"abs"、"KL "をサポートしています。

dict_outbool, optional

If True, output will be a dict, by default False.

返り値:
estimatestuple of {float, None, or rv_frozen}
  • mu_hat:μの推定値

  • tau_hat : tau の推定値

与えられた損失関数の下での推定値。存在しない場合は None が返されます。損失関数が "KL" の場合、事後分布そのものが scipy.stats の rv_frozen オブジェクトとして返されます。

estimate_interval(credibility=0.95)#

パラメータの信頼区間

パラメータ:
credibilityfloat, optional

パラメータがその区間に含まれるという事後確率(デフォルト値:0.95)

返り値:
(mu_lower, mu_upper),(tau_lower, tau_upper): float

区間の下端と上端

visualize_posterior()#

パラメータの事後分布を可視化します。

例

>>> from bayesml import normal
>>> gen_model = normal.GenModel(mu=1.0,tau=1.0)
>>> learn_model = normal.LearnModel()
>>> learn_model.update_posterior(x)
>>> learn_model.visualize_posterior()
_images/normal_posterior.png
get_p_params()#

予測分布のパラメータを取得します。

返り値:
p_paramsdict of {str: float}
  • "p_mu":``self.p_mu``の値

  • "p_lambda" : self.p_lambda の値

  • "p_nu" : self.p_nu の値

calc_pred_dist()#

予測分布のパラメータを計算します。

make_prediction(loss='squared')#

与えられた基準の下で、新しいデータ点を予測します。

パラメータ:
lossstr, optional

ベイズリスク関数の基礎となる損失関数、デフォルトは "squared"。この関数は "squared"、"0-1"、"abs"、"KL "をサポートしています。

返り値:
Predicted_value{float, rv_frozen}

指定された損失関数における予測値です。損失関数が「KL」の場合、事後分布そのものが scipy.stats の rv_frozen オブジェクトとして返されます。

pred_and_update(x, loss='squared')#

逐次的に新しいデータ点を予測し、事後分布を更新します。

パラメータ:
xfloat

実数

lossstr, optional

ベイズリスク関数の基礎となる損失関数、デフォルトは "squared"。この関数は "squared"、"0-1"、"abs"、"KL "をサポートしています。

返り値:
Predicted_value{float, rv_frozen}

指定された損失関数における予測値です。損失関数が「KL」の場合、事後分布そのものが scipy.stats の rv_frozen オブジェクトとして返されます。

calc_log_marginal_likelihood()#

対数周辺尤度の計算

返り値:
log_marginal_likelihoodfloat

対数周辺尤度

calc_pred_var()#

予測分布の分散を計算

返り値:
varfloat

予測分布の分散

fit(x)#

モデルをデータに当てはめます。

この関数は以下の関数のラッパーです:

>>> self.reset_hn_params()
>>> self.update_posterior(x)
>>> return self
パラメータ:
xnumpy.ndarray

すべての要素は実数でなければなりません。

返り値:
selfLearnModel

The fitted model.

predict()#

次のデータ点を予測します。

この関数は以下の関数のラッパーです:

>>> self.calc_pred_dist()
>>> return self.make_prediction(loss="squared")
返り値:
predicted_valuefloat

二乗誤差関数に基づく予測値。