🐟
GPyOptによるベイズ最適化+実験計画 (1) ~1変数~
GPyOptによるベイズ最適化+実験計画 (1) ~1変数~
編集中
参考にしたリンク
- 【GPyOpt】ベイズ最適化で次の実験条件を導出する!
https://qiita.com/oki_kosuke/items/e68d5f68c972c3af32cc
ライブラリ
- python 3.8.13
- matplotlib 3.1.3
- gpy 1.10.0
- gpyopt 1.2.6
- numpy 1.22.3
- pandas 1.2.5
(注) GPyOptのplot_aquisition()でエラーが発生。Matplotlib 3.1.3以前では回避できるとのことから各ライブラリをダウングレードして使用。
やりたいこと
- 下記のようなデータについて、ベイズ最適化を実施。
- 獲得関数をプロット。
- 推奨される次のプロットを算出。
- 想定範囲はx:-1.0 ~ 5.0
Data No. | x | y |
---|---|---|
1 | 1.0 | 4.0 |
2 | 2.0 | 5.0 |
3 | 3.0 | 2.0 |
コード
# 必要なライブラリをインポート
import GPy
import GPyOpt
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
# 得られたx,yを入力。x,yともにnumpyの2D arrayとなることに注意!
x_obs = np.asarray([[1.0],[2.0],[3.0]])
y_obs = np.asarray([[4.0],[5.0],[2.0]])
bounds = [{'name': 'x', 'type': 'continuous', 'domain': (-1.0, 5.0)}]
params = {'acquisition_type':'EI',#獲得関数としてEIを指定
'f':None, #予測関数はなし
'domain':bounds, #パラメータの探索範囲の指定
'model_type':'GP', #標準的なガウシアンプロセスを指定.
'X':x_obs, #既知データの説明変数(インプットするx)
'Y':y_obs, #既知データの目的変数(インプットするy)
'de_duplication':True, #重複したデータをサンプルしないように設定.
"normalize_Y":False, #defaltはTrue
"exact_feval":False #defaltはFalse
}
myBopt = GPyOpt.methods.BayesianOptimization(**params)
myBopt.plot_acquisition()
# 次点の推奨、予測
x_suggest = myBopt.suggest_next_locations(ignored_X=x_obs)
y_predict = myBopt.model.model.predict(x_suggest) #y_predictは(予測平均,予測分散)がタプルで返ってくる
y_mean=y_predict[0]
y_variance=y_predict[1]
print(f'つぎは{x_suggest}、yの予測平均は{y_mean}、分散は{y_variance}')
つぎは[[5.]]、yの予測平均は[[-0.28367933]]、分散は[[8.76588952]]
Discussion