あるケミストの独り言(winchemwinの日記)

ケミスト(化学者)の視点で、面白そうな情報(シミュレーション関係など)を発信

機械学習による予測モデルの作成(暑さ指数-東京)その4

 前回の記事で、「暑さ指数」と「気象データ」の相関について、SVRSupport Vector Regression,サポートベクター回帰)でのハイパーパラメーターの設定の検討の事例として、グリッドサーチの事例を紹介しました。

 今回は、ハイパーパラメータ自動最適化フレームワークOptuna™を利用した事例を紹介したいと思います。

コード1 ライブラリーのインポート

 まずはライブラリーのインポートです。ほぼ前回と同様ですが、今回はグリットサーチの代わりにoptuna をインポートしています。Optuna™はハイパーパラメータの値に関する試行錯誤を自動化的に行い、ハイパーパラメータの最適値を自動的に発見するよう動いてくれます。

 

コード2 データ読み込み、前処理

 

コード3 説明変数の標準化

続いてデータの読み込み、説明変数、目的変数の設定、訓練用データ及びテストデータの設定、説明変数の標準化を行っていますが、これらにについては前回と同様です。

 

コード4 Optuna 設定

Optunaですが、最適化は関数(’objective')で意義された手法に基づき、実行されますので、予め関数を定義しておきます。

上記の関数(’objective')では、はじめに最適化するハイパーパラメーターの設定(prams)を行い、続いて回帰モデルとしてSVRで予測モデルの作成を行う設定としています。

さらに、得られた予測モデルの評価値の算出するとともに、trial.set_user_attr() を使って試行ごとの評価値を記録しています(この値はあとからデータフレームとして取り出すことが可能です)。最終的にはこの関数ではR2値を評価目標値として、ハイパーパラメータの最適化を行う形にしています。

 

コード5 最適化実施、結果表示

 Optunaでの最適化の実施はいたってシンプルです。上記のStudy以下の2行で実施しています。最適化の方向ですが、関数で定義した目標値がR2でしたので、R2を最大化する方向で設定しています(maximize)。続いて、先に設定した関数(’objective’)に従って、トライアル回数500回で最適化を実施しています。

 最適化の結果はベストのスコアとパラメータと表示するとともに、記録されてる試行データをデータフレームとして設定し、こちらも表示させています。

 以下は最適化途中の表示と最終的なスコアとパラメータの表示になります。ベストスコアではR2値も良好な値となっており、問題なく最適化されていることがわかります。 

 最適化途中表示

最適化スコア、パラメータ表示

 途中の試行の様子も以下のようにデータフレームとして取り出し、表示させることが可能です。

 

データフレーム 試行結果表示(抜粋)

 以上がOptunaを使ったハイパーパラメーター最適化の結果です。先に紹介したランダムサーチやグリッドサーチの有用ですが、Optunaはベイズ最適化の手法にもとづき確からしい結果に比較的短時間でたどり着くには非常に有用なライブラリーかと思います。

 皆さんもハイパーパラメーター最適化の際には一度試されてみてはいかがと思います。

 以上、Optunaを用いた事例について紹介させていただきました。

 暑さ指数に関する予測モデルの作成の記事は今回で終了予定です。次回以降はまた異なるデータでの予測モデル作成の事例を紹介できればと思っています。