トップページに戻る
下記の配布プログラムは古くなっております。
最新版は 材料計算科学・データ解析チュートリアルコース 2022年度
をご覧ください。
こちらのページも、新しい公開プログラムページを準備中です。
PHYSBOを使った実験・計算のためのベイズ最適化pythonプログラム
CLI (Command line interface) 版
公開対象: 一般
拠点・研究室メンバー限定で、GUIインターフェースも使えます。
本プログラム及びベイズ最適化のオンライン講義を行いました
日時: 2022/12/6(火) 13:00~14:10
Anacondaの標準モジュール + PHYSBO
で動くベイズ最適化プログラムです。
必要ファイル:
・ 必要なモジュールは本ページ最後をご覧ください
推奨動作環境:
インストールの仕方は本ページ最後をご覧ください
- pythonバージョン 3.6以上
- Anaconda / python3
他のpython環境でも、必要なモジュールをインストールすれば動くと思います。
- PHYSBO
【注意】 Windows版の最新のAnaconda3/python3.9では、PHYSBOのインストールに
Visual C Tookitが必要です。
さらに、numpyでエラーが起こります。
その場合、python3.6環境を作って実行してください
使用方法
- 準備:
データファイルの入っている bayes_gp_plain.zip
をダウンロードし、適当なディレクトリィに展開します
- 実行環境:
python3.6環境が必要な場合、環境を変更してください。
例: conda activate py36
- ベイズ最適化実行と次回推薦条件(記述子)の選択:
python bayes_gp_plain.py を実行すると、data_simple.xlsx
を読み込み、ベイズ最適化を実行し、下のようなグラフを表示します
このグラフで、★に対応するindexが、次回の推奨実験・計算条件の番号です。
その他の候補を探す場合、グラフ中でマウスをクリックすると、最も近い条件が以下のようにコンソールに表示されます。
clicked at idx = 6: descriptors = [ 0.2 -1. ] given target value = nan
predicted target value = -1.6781033080848489 +- 0.04800849464821686
- プログラムの動作:
デフォルトでは、本プログラムは目的関数を最大化する条件を探索します。
また、入力ファイルの1列目が目的関数、2列目以降が記述子として選ばれます。
空文字でない目的関数を持つデータを学習データとして使ってガウス過程回帰を行い、入力ファイルにある全記述子に対して予測平均値と標準偏差を計算し、上記グラフのようにプロットします
- 最大化・最小化・数値最適化の制御
(入力ファイルのヘッダー制御文字):
入力ファイルのヘッダー文字列の先頭に以下の文字列を加えると、条件をコントロールできます。
=-0.5: 目的関数が
-0.5に等しくなる記述子を探索します。
【注意】 目的関数は
-0.5からの自乗偏差和
に変換されます。自乗偏差和は正規分布に従わないため、ガウス過程になりません。
本プログラムでこのモードで計算した結果については正しい理論的根拠がないことに注意してください。
min: 目的関数を最小化します。目的関数には -1.0
が掛けられますので、出力グラフの上下は入力データとは逆転します
max: 初期値。目的関数を最大化します。
- 先頭文字が '-'
の場合、目的関数からも記述子からも除外されます
目的関数を最大化する例: python bayes_gp_plain.py data_simple.xlsx
ヘッダーに上記の制御文字がないため、1列目を目的関数、2~3列目を記述子とし、最大化を実行る
目的関数を最小化する例: python bayes_gp_plain.py
data_target_min.xlsx
4列目のヘッダーの先頭に '-'
があるため、記述子としては2,3列目だけが使われる
目的関数を-0.5に最適化する例: python bayes_gp_plain.py data_target_value.xlsx
4列目のヘッダーの先頭に
'-' があるため、記述子としては2,3列目だけが使われる
- 次回候補を含めたデータの更新:
2により次回の推薦条件(記述子)を決めたら、その条件で実験あるいは計算を行い、その結果を入力ファイルの目的関数に記入し、2を繰り返します。
プログラムの起動時オプション
使い方とオプション: python bayes_gp_plain.py infile
max_num_probes num_rand_basis score_mode interval
max_num_probes: Use a number to reach convergence
num_rand_basis: Use a large number so as to reproduce training data
score_mode : [EI|PI|TS]
EI: Expected Improvement
PI: Probability of Improvement
TS: Thompson Sampling
interval : # of cycle to update hyper parameters
実行例: python bayes_gp_plain.py data_simple.xlsx 1 200 EI
200個のランダムガウス基底を用いて計算し、獲得関数としてEI
(Expected Improvement) を用いる。
Tips
- num_rand_basisは、記述子の自由度・データに比べて十分大きい値を設定すると、学習データの再現性が高くなります
(ただし計算時間がかかりますが、学習データ数が300程度、記述子が10種類程度であれば、num_rand_basisが200でも問題ありません)
- 記述子、目的関数が桁で変わる場合、対数を取ることで変数範囲をなるべく線形化したほうが良いです
- 学習データの再現性が悪い場合、max_num_probesを大きくして改善するかどうか確認してください。
intervalをmax_num_probesより小さい値にすると、その繰り返し回数でハイパーパラメータの更新が行われますので、再現性が改善される可能性があります
- 本プログラムでは、明示的に乱数のseedを与えていません
(policy.set_seed(0) 行をコメントアウト)。そのため、実行ごとに結果が変わることがあります。
インストール方法
condaあるいはpipのインストールで "OpenSSLエラー"
が起こった場合、
> conda/pip install openssl
でOpenSSL モジュールをインストールしてください。
参考: 【Anaconda】ライブラリのインストール時にOpenSSLに関するエラーが発生してしまう場合の対処法について
- 天下一反省会!
- Anacondaの仮想環境作成
python3.6の環境を作成します
> conda create -n py36 python=3.6
- py36 を有効化します
> conda activate py36
- pysboをインストールします
> pip install physbo
以下のエラーが出たら、Microsoft C++
Build Toolsをインストールする必要があります。
..(cut)... physbo\misc\_src\logsumexp.pyx tree = Parsing.p_module(s,
pxd, full_module_name) error: Microsoft Visual C++
14.0 or greater is required. Get it with "Microsoft C++ Build
Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
----------------------------------------
ERROR: Failed building wheel for physbo
Failed to build physbo
ERROR: Could not build wheels for physbo which use PEP 517 and cannot be
installed directly
以下の参考: Microsoft
Visual C++ 14.0 or greater is required.」が出た場合の対処方法 |
ジコログ
i ) ここ
から vs_buildtools....exe
をダウンロードし、インストール。この際、「C++によるデスクトップ開発」をチェックして、インストールしてください
ii)
インストールが終わったら、Windowsのスタートメニューから
"Visual Studio XXXX" の "Developer Command Prompt for VS XXX"
を起動し、
> pip install physbo
でインストールしてください (上記コマンドプロンプト以外でも、Build
toolsへのPATHが通っている環境ならOK)。
- matplotlibをインストールします
> conda install matplotlib
- pandasをインストールします
> conda install pandas
- openpyxlをインストールします
> conda install openpyxl
tklib / bayes_gp_gui.py を使う場合
- chardetをインストールします
> conda install chardet
tklibのインストール
- 拠点・研究室の共有フォルダーから以下をダウンロードして、適当なディレクトリィに展開します。
適当なドライブのルートに \tkProg をつくり、その下に
tklib、tkprog_MDX あるいはtkprog_COE
をコピーすることをお勧めします。
tkProgのディレクトリィを [tkProg]、tkprog_MDX/tkprog_COE
を [tkprog_XXX] と書きます。
tkProg\tklib
tkProg\tkprog_MDX¥PHYSBO (拠点メンバーの場合)
tkProg\tkprog_COE¥PHYSBO (研究室メンバーの場合)
- 環境変数 PYTHONPATH に [tkProg]\tklib\python を追加する。