目的変数が複数のときに実験計画法のベイズ最適化(Bayesian Optimization, BO)が対応!

シェアする

実験計画法やベイズ最適化 (Bayesian Optimization, BO) についてはこちらに書いたとおりです。Python コードもあります。

実験計画法で実験パラメータの候補を選択する (直交表を作成する) プログラムを公開します
今回は、実験計画法についてです。実験計画法の概要についてはこちらをご覧ください。 実験パラメータがあり、それぞれの候補...
ベイズ最適化(Bayesian Optimization, BO)~実験計画法で使ったり、ハイパーパラメータを最適化したり~
ガウス過程による回帰をうまく使って、実験計画法における新しい実験候補を探索したり、回帰モデルやクラス分類モデルのハイパーパラメータ (学習で...

今回は実験計画法の BO について目的変数が複数のときに対応しましたので報告します。プログラムは Github https://github.com/hkaneko1985/design_of_experiments/tree/master/Python にある demo_of_bayesian_optimization_multiple_y.py です。

準備

demo_of_bayesian_optimization_multiple_y.py を実行するには、以下の3つのファイルを準備する必要があります。

  • training_data.csv: トレーニングデータの csv ファイル。左からy1, y2, … と目的変数が並び、それに続いて x1, x2, … と説明変数が並びます
  • x_for_prediction.csv: 予測用データの csv ファイル。x1, x2, … と説明変数が並びます。training_data.csv の説明変数の名前と同じ名前にしてください
  • settings.csv: 目的変数の数だけ BO の設定を記載するファイル。説明は後述します

こちら https://github.com/hkaneko1985/design_of_experiments/tree/master/Python にデモンストレーション用の csv ファイルが 3 つともありますので、とりあえず実行してみるとよいでしょう。

最大化したい目的変数もあれば、最小化したい目的変数もあれば、範囲内に入れたい目的変数もあるのだけど??

すべて対応しています。settings.csv を開いてみましょう。目的変数 y の数だけ (最初は y が 3つで y1, y2, y3)、maximization(1)_or_minimization(-1)_or_range(0), lower_limit, upper_limit があると思います。maximization(1)_or_minimization(-1)_or_range(0) の行には、y ごとに 1 or -1 or 0 を指定しましょう。意味合いは以下のとおりです。

  • 1: 目的変数を最大化したい
  • -1: 目的変数を最小化したい
  • 0: 目的変数をある範囲内に入れたい

0 のときには、範囲を lower_limit, upper_limit で指定します。1 や -1 のときには関係ありません (デモ用のファイルには、1 や -1 のときに 0 が入っていますが、どんな値でもかまいません)。

どんな結果が出るの??

まず目的変数ごとに、ガウス過程回帰 (Gaussian Process Regression, GPR) で回帰分析した結果が出ます。

ガウス過程による回帰(Gaussian Process Regression, GPR)~予測値だけでなく予測値のばらつきも計算できる!~
ガウス過程による回帰(Gaussian Process Regression, GPR)について、pdfとパワーポイントの資料を作成しました...

モデル構築結果・クロスバリデーション結果それぞれ、

  • 実測値 vs. 推定値プロット
  • r2 (決定係数)
  • RMSE (Root-Mean-Squared Error)
  • MAE (Mean Absolute Error)

が表示されます。

続いて、予測用データに対して予測や Probability of Improvement (PI) の計算が行われます。目的変数をある範囲内に入れたい目的変数もあることを想定して、最大化・最小化したい場合と足並みを揃えるため (同じ確率として議論できるようにするため) PI としました。

以下のファイルが出力されます。

  • probabilities.csv: 目的変数ごとの確率の値が入った csv ファイル
  • sum_of_log_probabilities.csv: サンプルごとに、目的変数の確率の対数値を総和した csv ファイル

なぜ対数値を足したかというと、もともと確率の掛け算をするのですが、値が小さくなってしまうため、それに log とって、例えば log(AB) = log(A) + log(B) のようにして、log の和にしたわけです。

最後に、確率の対数値を総和の最大値と、最大となったインデックスを表示します。これが次に実験すべき実験条件の候補といえます。

必要な方はぜひご利用くださいませ。

以上です。

質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。

シェアする

フォローする