bayes_gp_gui.py 技術ドキュメント

プログラムの動作

bayes_gp_gui.py は、ベイジアン最適化やガウス過程 (Gaussian Process) に基づくデータ解析を行うバックエンドプログラム bayes_gp_plain2.py のためのグラフィカルユーザーインターフェース (GUI) アプリケーションです。このプログラムは、Pythonの tkinter ライブラリを使用して構築されており、ユーザーが直感的に入力ファイルの選択、解析パラメータの設定、および解析の実行を行えるように設計されています。

主な機能は以下の通りです。

  • GUIの提供: ファイル選択ダイアログ、テキスト入力フィールド、数値スライダー、チェックボックス、ドロップダウンメニューなどを用いて、各種パラメータを視覚的に設定できます。

  • パラメータ管理: 入力ファイルパス、出力ファイルパス、ガウス過程の計算に必要なパラメータ(例えば、探査回数、基底関数の数、取得関数の種類など)を設定し、それらをバックエンドの計算エンジンに渡します。

  • ファイル入出力: Excel (.xlsx) および CSV (.csv) 形式のデータファイルを読み込み、解析結果をExcel (.xlsx) および NumPy圧縮形式 (.npz) で出力します。

  • 国際化: 設定ファイルで言語 (en または ja) を切り替えることができ、GUIの表示言語を変更できます(再起動後に適用)。

  • 開発用タブとエディタタブ: 開発者向けのデバッグ機能や、設定ファイルを直接編集するためのエディタ機能を備えたタブが用意されています。

このプログラムは、コマンドラインインターフェース (CLI) に不慣れなユーザーでも、ベイジアン最適化の手法を容易に利用できるようにすることを目的としています。

原理

bayes_gp_gui.py 自体はGUIを提供するフロントエンドであり、直接的な解析アルゴリズムや数式は実装していません。解析の核心部分は、インポートされている bayes_gp_plain2 モジュール(コード内では c_engine とエイリアスされている)に委ねられています。

しかし、GUIで設定されるパラメータは、ベイジアン最適化とガウス過程の原理に深く関連しています。

ベイジアン最適化の概要: ベイジアン最適化は、未知の目的関数を最適化するための強力な手法です。これは主に以下の2つの要素で構成されます。

  1. 代理モデル (Surrogate Model): 目的関数の振る舞いを近似するためのモデルです。bayes_gp_gui.py が使用する bayes_gp_plain2 モジュールでは、一般的にガウス過程がこの代理モデルとして使用されます。ガウス過程は、関数の値の分布を確率的にモデル化し、各点での平均値 (予測値) と分散 (不確実性) を提供します。 $\( P(f(\mathbf{x}) | D) \sim \mathcal{N}(\mu(\mathbf{x}), \sigma^2(\mathbf{x})) \)\( ここで \)D\( は観測データ、\)\mu(\mathbf{x})\( は予測平均、\)\sigma^2(\mathbf{x})$ は予測分散です。

  2. 獲得関数 (Acquisition Function): 代理モデルの予測に基づいて、次に評価すべき最適な点を決定するための基準です。獲得関数は、現在のモデルで最も有望な領域(高い予測値)と不確実性の高い領域(探索されていない領域)とのバランスをとるように設計されます。

GUIで設定可能な主要パラメータと原理との関連:

  • max_num_probes: ベイジアン最適化の最大試行回数(プローブ数)を決定します。この回数だけ獲得関数に基づいて新しい点がサンプリングされ、目的関数が評価されます。

  • num_search_each: 各イテレーションで探索するプローブの数を指定します。

  • num_rand_basis: ガウス過程モデルで使用されるランダムガウス基底関数の数を指定します。これにより、ガウス過程の近似精度と計算コストがトレードオフされます。

  • interval: ハイパーパラメータを更新するイテレーション間隔を指定します。ガウス過程のハイパーパラメータ (例: 振幅、長さスケール、ノイズレベル) は、観測データに最もよくフィットするように最適化されます。

  • score_mode: 獲得関数の種類を指定します。GUIでは以下の選択肢が提供されます。

    • EI (Expected Improvement): 期待改善量。現在の最良値を超える期待される改善量を最大化します。

    • PI (Probability of Improvement): 改善確率。現在の最良値を超える確率を最大化します。

    • TS (Thompson Sampling): トンプソンサンプリング。代理モデルから目的関数のサンプルパスを生成し、そのサンプルパスの最大値を次に評価する点として選択します。

  • random_seed: 乱数シードを設定することで、実験の再現性を確保します。

  • standardize: 入力データや出力データを標準化するかどうかを決定します。データの標準化は、ガウス過程モデルの性能向上に寄与することが多いです。

これらのパラメータは、ベイジアン最適化プロセスにおいて、探索 (Exploration) と活用 (Exploitation) のバランスを調整し、効率的な最適解の探索を可能にします。

必要な非標準ライブラリとインストール方法

bayes_gp_gui.py を実行するために、以下の非標準Pythonライブラリが必要です。

  • openpyxl: Excel (.xlsx) ファイルの読み書きに使用されます。

  • numpy: 数値計算、特にガウス過程の計算やデータ操作に必要です。

  • tklib: これはカスタムライブラリであり、このGUIアプリケーションが依存する共通のGUIユーティリティやアプリケーションフレームワークを提供します。通常、このライブラリは bayes_gp_gui.py と同じプロジェクト内で提供され、Pythonのパスに自動的に追加されるように設定されています。ユーザーが個別に pip でインストールするものではありません。sys.path.append(tklib_path) でプログラム実行時にパスが設定されます。

  • bayes_gp_plain2: ベイジアン最適化とガウス過程の主要な計算ロジックを含むモジュールです。これは bayes_gp_gui.py と同じプロジェクト内に配置されている必要があります。

openpyxlnumpypip を使ってインストールできます。

pip install openpyxl numpy

tklib および bayes_gp_plain2 は、このプログラムが属するパッケージまたはリポジトリから提供されるカスタムモジュールであるため、別途インストールする必要はありません。これらは bayes_gp_gui.py が配置されているディレクトリ構造内で正しく参照されることを前提としています。

必要な入力ファイル

bayes_gp_gui.py は、GUI上で「Input File」として指定されるデータファイルを必要とします。

  • 形式: Excelファイル (.xlsx) または CSVファイル (.csv)。

  • データ構造: コードからは具体的な列名やヘッダー形式は指定されていませんが、ベイジアン最適化の目的上、最適化対象の入力変数(特徴量)と目的変数(ターゲット値)が含まれていることが期待されます。

    • 通常、各行が1つのデータ点に対応し、各列が異なる変数(特徴量または目的変数)に対応します。

    • bayes_gp_plain2.py モジュールがどのようなデータ形式を期待するかによって、具体的な要件が決定されます。

例 (CSV形式の場合):

feature1,feature2,target_value
1.2,3.4,5.6
2.1,4.3,6.5
...

例 (Excel形式の場合):

feature1

feature2

target_value

1.2

3.4

5.6

2.1

4.3

6.5

...

...

...

生成される出力ファイル

bayes_gp_gui.py は、解析の実行後に以下の種類のファイルを生成します。出力ファイル名は、入力ファイル名に基づいて自動的に提案されますが、GUI上で変更可能です。

  1. 予測結果ファイル (Excel形式)

    • ファイル名: 入力ファイル名が input_data.csv の場合、デフォルトで input_data-predict{i}.xlsx のような形式で提案されます。{i} は連番やタイムスタンプなどに置き換えられる可能性があります。

    • 内容: ガウス過程モデルによる予測結果が含まれるExcelファイルです。通常、新たなデータ点での予測平均、予測分散、そして獲得関数の値などが含まれます。ベイジアン最適化の各ステップで提案される次の評価点などの情報も含まれる可能性があります。

  2. 保存されたモデル/結果ファイル (NumPy .npz 形式)

    • ファイル名: 入力ファイル名が input_data.csv の場合、デフォルトで input_data-save{i}.npz のような形式で提案されます。

    • 内容: NumPyの np.savez または np.savez_compressed で保存される形式のファイルです。これには、ベイジアン最適化の過程で学習されたガウス過程モデルのハイパーパラメータ、訓練データ、または中間結果など、後続の分析やモデルの再利用に必要な情報が格納されます。

コマンドラインでの使用例 (Usage)

bayes_gp_gui.py は、GUIアプリケーションとして設計されており、引数なしで直接実行することでGUIが起動します。

python bayes_gp_gui.py

このプログラムは、tklib ライブラリの tkApplication_GUI をベースにしているため、一般的なGUIアプリケーションと同様に、追加のコマンドライン引数で初期設定を行うことは想定されていません。すべての設定はGUIを介して行われます。

コマンドラインでの具体的な使用例

bayes_gp_gui.py を実行する最も基本的な方法は、Pythonインタープリタを介してスクリプトを起動することです。

実行コマンド:

python bayes_gp_gui.py

実行結果の説明:

上記のコマンドを実行すると、Bayes/GP GUI とタイトルが表示されたTkinterベースのグラフィカルユーザーインターフェースが新しいウィンドウとして起動します。

GUIウィンドウには、以下のような要素が表示されます。

  • メニューバー: File (Open, Exit) や Tool (Setup) などのメニューが含まれます。

  • ツールバー: SetupEdit ini file、言語選択 (ja/en)、Exit などのボタンが配置されています。

  • メインエリア (タブ形式): 複数のタブがあり、デフォルトでは「Analyze」タブが表示されます。

    • Analyze タブ:

      • infileoutfileoutresfile の入力・出力ファイルパスを設定するフィールドとボタン。

      • ベイジアン最適化の各種パラメータ (nx_2D, ny_2D, max_num_probes, num_search_each, num_rand_basis, interval, score_mode, random_seed, fraction_test, standardize) を設定するスライダーや入力フィールド。

      • analyzevalidatecitationusage(cli) の実行ボタン。

      • プログラムからのメッセージが表示されるテキストボックス。

    • Graph タブ: グラフ表示に関する設定 (fig_width, fig_height, fontsize, legend_fontsize) を行うフィールド。

    • 開発用タブ: DevelopmentEditor testWidget test1Widget test2Widget test3 といった、開発・デバッグやウィジェットのテスト用のタブも含まれています。

ユーザーはGUI上で必要な入力ファイルを指定し、ベイジアン最適化のパラメータを設定した後、「analyze」ボタンをクリックすることで、bayes_gp_plain2.py によるデータ解析を開始できます。解析の進捗や結果は、GUI内のメッセージボックスに表示されるか、指定された出力ファイルに保存されます。