Skip to content

Commit 6f20685

Browse files
committed
update documents
1 parent a99eead commit 6f20685

File tree

3 files changed

+19
-103
lines changed

3 files changed

+19
-103
lines changed

doc/devdoc/abstract_class.md

Lines changed: 4 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<img src="../logos/BayesML_logo.png" width="200">
22

3-
# 抽象クラス概要 Ver.3
3+
# 抽象クラス概要 Ver.4
44
<div style="text-align:right">
55
作成:中原
66
</div>
@@ -10,38 +10,7 @@
1010
データ生成観測確率モデルとその事前分布の抽象基底クラス.GenModelクラスに継承することで,以下の名前のメソッドの実装を強いる.
1111

1212
* `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())`といったアンパック渡しの機能を活かした使い方が可能となる.
4514
* `def get_h_params(self):`
4615
* 事前分布のハイパーパラメータを返すメソッド.ハイパーパラメータ名をキーとする辞書を返す.
4716
* `def save_h_params(self):`(抽象クラスではない)
@@ -70,39 +39,7 @@
7039
データ生成観測確率モデルのパラメータ事後分布の抽象基底クラス.LearnModelクラスに継承することで以下のメソッドの実装を強いる.
7140

7241
* `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())`といったアンパック渡しの機能を活かした使い方が可能となる.
10643
* `def get_h0_params(self):`
10744
* 事後分布のハイパーパラメータの初期値を返すメソッド.ハイパーパラメータ名をキーとする辞書を返す.
10845
* `def save_h0_params(self):`(抽象クラスではない)
@@ -112,39 +49,7 @@
11249
* `def get_hn_params(self):`
11350
* データに基づいて更新された事後分布のハイパーパラメータを返すメソッド.ハイパーパラメータ名をキーとする辞書を返す.
11451
* `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())`といったアンパック渡しの機能を活かした使い方が可能となる.
14853
* `def save_hn_params(self):`(抽象クラスではない)
14954
* データに基づいて更新された事後分布のハイパーパラメータをファイルに保存するメソッド.`get_hn_params(self):`さえ正しく実装されていれば汎用的に機能するよう`bayesml/base.py`に実装済みなので,基本的に個別のモデルでオーバーライドする必要はない.
15055
* `def load_hn_params(self):`(抽象クラスではない)

doc/devdoc/development_flow.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@
3535
1. `__init__`, `set_`, `get_`関数を実装する
3636
* `__init__`入力されたパラメータが正しい集合に属しているか(上記のベルヌーイ分布なら$p \in [0, 1]$を満たすかどうか等)を判定する関数を実装する.
3737
* 他の変数と独立にその変数が正しいか判定する関数は`bayesml/_check.py`に整理してある.もしそこに見つからない場合は後の人も使えるように`bayesml/_check.py`に追記しておく.
38-
* 複数の変数間の関係によって入力が正しいか否か変わる場合(ハイパーパラメータとパラメータの次元が整合するか等)は各モデル上に実装する.`bayesml/autoregressive/_autoregressive.py`を参考にしてほしい.
38+
* 複数の変数間の関係によって入力が正しいか否か変わる場合(ハイパーパラメータとパラメータの次元が整合するか等)は各モデル上に実装する.最適な書き方については模索中だが,`bayesml/autoregressive/_autoregressive.py`を参考にしてほしい.
3939
* 境界値テストを必ず実施する.実数値については1.0E-8精度で確認する.(境界値テストについては検索してほしい)
40-
* `__init__`がきちんと書ければ,`set_`関数はそれをコピペすることでほとんど書けるはずである.ただし,いくつかの入力を受け付けるよう`**kwargs`を使って書く.雛型は[abstract_class.md](./abstract_class.md)を参照してほしい.
4140
* `get_`関数は単に辞書を返すだけである.
41+
* `__init__`がきちんと書ければ,`set_`関数はそれをコピペすることでほとんど書けるはずである.ただし,`get_`が返す辞書と同じ順番の位置引数を受け取るようにする(生成,学習モデル間のパラメータ,ハイパーパラメータの受け渡し効率化のため.また,`save_``load_`関数の統一的実装のため).
4242
* `save_`, `load_`関数の実装は不要になった.
4343
2. `gen_params`, `gen_sample`, `visualize_model`を実装する
4444
* 先に実装した`set_`関数でハイパーパラメータやパラメータを変化させたときに,生成されるパラメータやサンプルの挙動が妥当かどうかを`visualize_model`でチェックする.
@@ -49,8 +49,8 @@
4949
* `__init__`入力されたパラメータが正しい集合に属しているか(上記のベルヌーイ分布なら$p \in [0, 1]$を満たすかどうか等)を判定する関数を実装する.詳細はGenModelの場合と同様である.
5050
* `set_hn_params`, `overwrite_h0_params`, `reset_hn_params`では`calc_pred_dist`を,`set_h0_params`では`reset_hn_params`を呼ぶなどして同じ記述の繰り返しをなるべく避ける.途中でバグが見つかっても1箇所修正すれば漏れなく全体が修正されるような構成を心がける.
5151
* この時点では`calc_pred_dist`の中身は`pass`でも構わない.
52-
* `__init__`がきちんと書ければ,`set_`関数はそれをコピペすることでほとんど書けるはずである.ただし,いくつかの入力を受け付けるよう`**kwargs`を使って書く.雛型は[abstract_class.md](./abstract_class.md)を参照してほしい.
5352
* `get_`関数は単に辞書を返すだけである.
53+
* `__init__`がきちんと書ければ,`set_`関数はそれをコピペすることでほとんど書けるはずである.ただし,`get_`が返す辞書と同じ順番の位置引数を受け取るようにする(生成,学習モデル間のパラメータ,ハイパーパラメータの受け渡し効率化のため.また,`save_``load_`関数の統一的実装のため).
5454
* `save_`, `load_`関数の実装は不要になった.
5555
2. `update_posterior``visualize_posterior`を実装する
5656
* 行列のサイズが合っているかを常に確認する.できるだけ非正方行列でテストする.

doc/devdoc/math_replace_vscode.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
<img src="../logos/BayesML_logo.png" width="200">
22

3-
# vs code数式置換メモ(インライン数式限定)
3+
# vs code数式置換メモ Ver.2
44

55
<div style="text-align:right">
66
作成:中原
77
</div>
88

9+
## インライン数式
10+
911
rst -> md
1012
```
1113
:math:`(.*?)` -> $$$1$
@@ -15,3 +17,12 @@ md -> rst
1517
```
1618
\$(.*?)\$ -> :math:`$1`
1719
```
20+
21+
## .mdファイル中のLaTeX数式のpdf出力用
22+
23+
以下の順序で置換する.`\`がエスケープ文字であること,二つの`_`で挟むことが強調の命令になっていることから,以下の置換をしておかないとpdfに変換した際に数式がうまく表示されない.(VS Codeのプレビュー機能であれば以下の置換をせずに正しく表示される.)
24+
25+
1. `\\ --> \cr`
26+
2. `_ --> \_`
27+
3. `\{ --> \\{`
28+
4. `\} --> \\}`

0 commit comments

Comments
 (0)