|
1 | 1 | <img src="../logos/BayesML_logo.png" width="200">
|
2 | 2 |
|
3 |
| -# 抽象クラス概要 Ver.3 |
| 3 | +# 抽象クラス概要 Ver.4 |
4 | 4 | <div style="text-align:right">
|
5 | 5 | 作成:中原
|
6 | 6 | </div>
|
|
10 | 10 | データ生成観測確率モデルとその事前分布の抽象基底クラス.GenModelクラスに継承することで,以下の名前のメソッドの実装を強いる.
|
11 | 11 |
|
12 | 12 | * `def set_h_params(self):`
|
13 |
| - * 事前分布のハイパーパラメータを設定するためのメソッド.入力されたハイパーパラメータが理論上の仮定(分散共分散行列の正定値性等)を満たさない時はエラーを返すようにする.よく使う入力値チェックは`bayesml/_check.py`に書いておく.GenModelの`get_h_params()`,LearnModelの`get_h0_params()`, `get_hn_params()`で得られた辞書ならいずれも受け付けるようにする.雛型は以下.この動作のために`self._H_PARAM_KEYS`, `self._H0_PARAM_KEYS`, `self._HN_PARAM_KEYS`という変数(set型,文字列を{}で囲って宣言する)を用意しておく. |
14 |
| - |
15 |
| - ``` python |
16 |
| - def set_h_params(self,**kwargs): |
17 |
| - """Set the hyperparameters of the prior distribution. |
18 |
| - |
19 |
| - Parameters |
20 |
| - ---------- |
21 |
| - **kwargs |
22 |
| - a python dictionary {'h_alpha':float, 'h_beta':float} or |
23 |
| - {'h0_alpha':float, 'h0_beta':float} or {'hn_alpha':float, 'hn_beta':float} |
24 |
| - They are obtained by ``get_h_params()`` of GenModel, |
25 |
| - ``get_h0_params`` of LearnModel or ``get_hn_params`` of LearnModel. |
26 |
| - """ |
27 |
| - if kwargs.keys() == self._H_PARAM_KEYS: |
28 |
| - self.h_alpha = _check.pos_float(kwargs['h_alpha'],'h_alpha',ParameterFormatError) |
29 |
| - self.h_beta = _check.pos_float(kwargs['h_beta'],'h_beta',ParameterFormatError) |
30 |
| - elif kwargs.keys() == self._H0_PARAM_KEYS: |
31 |
| - self.h_alpha = _check.pos_float(kwargs['h0_alpha'],'h_alpha',ParameterFormatError) |
32 |
| - self.h_beta = _check.pos_float(kwargs['h0_beta'],'h_beta',ParameterFormatError) |
33 |
| - elif kwargs.keys() == self._HN_PARAM_KEYS: |
34 |
| - self.h_alpha = _check.pos_float(kwargs['hn_alpha'],'h_alpha',ParameterFormatError) |
35 |
| - self.h_beta = _check.pos_float(kwargs['hn_beta'],'h_beta',ParameterFormatError) |
36 |
| - else: |
37 |
| - raise(ParameterFormatError( |
38 |
| - "The input of this function must be a python dictionary with keys:" |
39 |
| - +str(self._H_PARAM_KEYS)+" or " |
40 |
| - +str(self._H0_PARAM_KEYS)+" or " |
41 |
| - +str(self._HN_PARAM_KEYS)+".") |
42 |
| - ) |
43 |
| - ``` |
44 |
| - |
| 13 | + * 事前分布のハイパーパラメータを設定するためのメソッド.入力されたハイパーパラメータが理論上の仮定(分散共分散行列の正定値性等)を満たさない時はエラーを返すようにする.よく使う入力値チェックは`bayesml/_check.py`に書いておく.GenModelの`get_h_params()`,LearnModelの`get_h0_params()`, `get_hn_params()`で得られる辞書の順序と位置引数の順序を揃えるようにする.Python 3.7以降では辞書の要素の順序が保持されるようになったため,これにより`genmodel.set_h_params(*learnmodel.get_hn_params().vaules())`といったアンパック渡しの機能を活かした使い方が可能となる. |
45 | 14 | * `def get_h_params(self):`
|
46 | 15 | * 事前分布のハイパーパラメータを返すメソッド.ハイパーパラメータ名をキーとする辞書を返す.
|
47 | 16 | * `def save_h_params(self):`(抽象クラスではない)
|
|
70 | 39 | データ生成観測確率モデルのパラメータ事後分布の抽象基底クラス.LearnModelクラスに継承することで以下のメソッドの実装を強いる.
|
71 | 40 |
|
72 | 41 | * `def set_h0_params(self):`
|
73 |
| - * 事後分布のハイパーパラメータの初期値を設定するためのメソッド(`reset_hn_params()`を呼ぶことで,`hn_`で始まる事後分布ハイパーパラメータや`p_`で始まる予測分布パラメータも同時に初期化する).入力されたハイパーパラメータが理論上の仮定(分散共分散行列の正定値性等)を満たさない時はエラーを返すようにする.よく使う入力値チェックは`bayesml/_check.py`に書いておく.GenModelの`get_h_params()`,LearnModelの`get_h0_params()`, `get_hn_params()`で得られた辞書ならいずれも受け付けるようにする.雛型は以下.この動作のために`self._H_PARAM_KEYS`, `self._H0_PARAM_KEYS`, `self._HN_PARAM_KEYS`という変数(set型,文字列を{}で囲って宣言する)を用意しておく. |
74 |
| - |
75 |
| - ``` python |
76 |
| - def set_h0_params(self,**kwargs): |
77 |
| - """Set initial values of the hyperparameter of the posterior distribution. |
78 |
| - |
79 |
| - Parameters |
80 |
| - ---------- |
81 |
| - **kwargs |
82 |
| - a python dictionary {'h_alpha':float, 'h_beta':float} or |
83 |
| - {'h0_alpha':float, 'h0_beta':float} or {'hn_alpha':float, 'hn_beta':float} |
84 |
| - They are obtained by ``get_h_params()`` of GenModel, |
85 |
| - ``get_h0_params`` of LearnModel or ``get_hn_params`` of LearnModel. |
86 |
| - """ |
87 |
| - if kwargs.keys() == self._H_PARAM_KEYS: |
88 |
| - self.h0_alpha = _check.pos_float(kwargs['h_alpha'],'h0_alpha',ParameterFormatError) |
89 |
| - self.h0_beta = _check.pos_float(kwargs['h_beta'],'h0_beta',ParameterFormatError) |
90 |
| - elif kwargs.keys() == self._H0_PARAM_KEYS: |
91 |
| - self.h0_alpha = _check.pos_float(kwargs['h0_alpha'],'h0_alpha',ParameterFormatError) |
92 |
| - self.h0_beta = _check.pos_float(kwargs['h0_beta'],'h0_beta',ParameterFormatError) |
93 |
| - elif kwargs.keys() == self._HN_PARAM_KEYS: |
94 |
| - self.h0_alpha = _check.pos_float(kwargs['hn_alpha'],'h0_alpha',ParameterFormatError) |
95 |
| - self.h0_beta = _check.pos_float(kwargs['hn_beta'],'h0_beta',ParameterFormatError) |
96 |
| - else: |
97 |
| - raise(ParameterFormatError( |
98 |
| - "The input of this function must be a python dictionary with keys:" |
99 |
| - +str(self._H_PARAM_KEYS)+" or " |
100 |
| - +str(self._H0_PARAM_KEYS)+" or " |
101 |
| - +str(self._HN_PARAM_KEYS)+".") |
102 |
| - ) |
103 |
| - self.reset_hn_params() #GenModelのset_h_params(),LearnModelのset_hn_params()とはここも違う |
104 |
| - ``` |
105 |
| - |
| 42 | + * 事後分布のハイパーパラメータの初期値を設定するためのメソッド(`reset_hn_params()`を呼ぶことで,`hn_`で始まる事後分布ハイパーパラメータや`p_`で始まる予測分布パラメータも同時に初期化する).入力されたハイパーパラメータが理論上の仮定(分散共分散行列の正定値性等)を満たさない時はエラーを返すようにする.よく使う入力値チェックは`bayesml/_check.py`に書いておく.GenModelの`get_h_params()`,LearnModelの`get_h0_params()`, `get_hn_params()`で得られる辞書の順序と位置引数の順序を揃えるようにする.Python 3.7以降では辞書の要素の順序が保持されるようになったため,これにより`learnmodel.set_h_params(*genmodel.get_hn_params().vaules())`といったアンパック渡しの機能を活かした使い方が可能となる. |
106 | 43 | * `def get_h0_params(self):`
|
107 | 44 | * 事後分布のハイパーパラメータの初期値を返すメソッド.ハイパーパラメータ名をキーとする辞書を返す.
|
108 | 45 | * `def save_h0_params(self):`(抽象クラスではない)
|
|
112 | 49 | * `def get_hn_params(self):`
|
113 | 50 | * データに基づいて更新された事後分布のハイパーパラメータを返すメソッド.ハイパーパラメータ名をキーとする辞書を返す.
|
114 | 51 | * `def set_hn_params(self):`
|
115 |
| - * 更新後の事後分布のハイパーパラメータを直接設定するためのメソッド(`calc_pred_dist()`を用いて`p_`で始まる予測分布パラメータも同時に初期化する).入力されたハイパーパラメータが理論上の仮定(分散共分散行列の正定値性等)を満たさない時はエラーを返すようにする.よく使う入力値チェックは`bayesml/_check.py`に書いておく.GenModelの`get_h_params()`,LearnModelの`get_h0_params()`, `get_hn_params()`で得られた辞書ならいずれも受け付けるようにする.雛型は以下.この動作のために`self._H_PARAM_KEYS`, `self._H0_PARAM_KEYS`, `self._HN_PARAM_KEYS`という変数(set型,文字列を{}で囲って宣言する)を用意しておく. |
116 |
| - |
117 |
| - ``` python |
118 |
| - def set_hn_params(self,**kwargs): |
119 |
| - """Set updated values of the hyperparameter of the posterior distribution. |
120 |
| - |
121 |
| - Parameters |
122 |
| - ---------- |
123 |
| - **kwargs |
124 |
| - a python dictionary {'h_alpha':float, 'h_beta':float} or |
125 |
| - {'h0_alpha':float, 'h0_beta':float} or {'hn_alpha':float, 'hn_beta':float} |
126 |
| - They are obtained by ``get_h_params()`` of GenModel, |
127 |
| - ``get_h0_params`` of LearnModel or ``get_hn_params`` of LearnModel. |
128 |
| - """ |
129 |
| - if kwargs.keys() == self._H_PARAM_KEYS: |
130 |
| - self.hn_alpha = _check.pos_float(kwargs['h_alpha'],'hn_alpha',ParameterFormatError) |
131 |
| - self.hn_beta = _check.pos_float(kwargs['h_beta'],'hn_beta',ParameterFormatError) |
132 |
| - elif kwargs.keys() == self._H0_PARAM_KEYS: |
133 |
| - self.hn_alpha = _check.pos_float(kwargs['h0_alpha'],'hn_alpha',ParameterFormatError) |
134 |
| - self.hn_beta = _check.pos_float(kwargs['h0_beta'],'hn_beta',ParameterFormatError) |
135 |
| - elif kwargs.keys() == self._HN_PARAM_KEYS: |
136 |
| - self.hn_alpha = _check.pos_float(kwargs['hn_alpha'],'hn_alpha',ParameterFormatError) |
137 |
| - self.hn_beta = _check.pos_float(kwargs['hn_beta'],'hn_beta',ParameterFormatError) |
138 |
| - else: |
139 |
| - raise(ParameterFormatError( |
140 |
| - "The input of this function must be a python dictionary with keys:" |
141 |
| - +str(self._H_PARAM_KEYS)+" or " |
142 |
| - +str(self._H0_PARAM_KEYS)+" or " |
143 |
| - +str(self._HN_PARAM_KEYS)+".") |
144 |
| - ) |
145 |
| - self.calc_pred_dist() #GenModelのset_h_params(),LearnModelのset_h0_params()とはここも違う |
146 |
| - ``` |
147 |
| - |
| 52 | + * 更新後の事後分布のハイパーパラメータを直接設定するためのメソッド(`calc_pred_dist()`を用いて`p_`で始まる予測分布パラメータも同時に初期化する).入力されたハイパーパラメータが理論上の仮定(分散共分散行列の正定値性等)を満たさない時はエラーを返すようにする.よく使う入力値チェックは`bayesml/_check.py`に書いておく.GenModelの`get_h_params()`,LearnModelの`get_h0_params()`, `get_hn_params()`で得られる辞書の順序と位置引数の順序を揃えるようにする.Python 3.7以降では辞書の要素の順序が保持されるようになったため,これにより`learnmodel.set_h_params(*genmodel.get_hn_params().vaules())`といったアンパック渡しの機能を活かした使い方が可能となる. |
148 | 53 | * `def save_hn_params(self):`(抽象クラスではない)
|
149 | 54 | * データに基づいて更新された事後分布のハイパーパラメータをファイルに保存するメソッド.`get_hn_params(self):`さえ正しく実装されていれば汎用的に機能するよう`bayesml/base.py`に実装済みなので,基本的に個別のモデルでオーバーライドする必要はない.
|
150 | 55 | * `def load_hn_params(self):`(抽象クラスではない)
|
|
0 commit comments