実験計画法やベイズ最適化 (Bayesian Optimization, BO) についてはこちらに書いたとおりです。Python コードもあります。
今回は実験計画法の 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) で回帰分析した結果が出ます。
モデル構築結果・クロスバリデーション結果それぞれ、
- 実測値 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, メールなどでご連絡いただけるとうれしいです。