はじめに
「Optunaを使ってハイパーパラメータを最適化したいけれど、Pythonでどう書けばいいの?」
「試してみたいけれど、どこを設定して何を実行すればいいのか分からない」と感じていませんか。
機械学習モデルの精度を調整するなかで、学習率や木の深さなどを一つずつ変更して試していると、組み合わせが増えて手作業では確認しにくくなりますよね。
この記事では、Optunaの基本的な使い方から、Pythonでハイパーパラメータ最適化を実装する手順、実行結果の確認方法まで解説します。
Optunaとは?
Optunaは、機械学習モデルの性能に影響するハイパーパラメータを効率よく探索するための最適化フレームワークです。
ここでは、Optunaとは何か、ハイパーパラメータ最適化とは何かを確認したうえで、Optunaが選ばれる理由を解説します。
Optunaとは
Optunaは、Pythonで利用できるハイパーパラメータ最適化フレームワークです。
探索する値の範囲と評価方法を設定すると、条件を変えながら学習と評価を繰り返し、より良い組み合わせを探します。
学習率や木の深さなどを手作業で何度も調整する手間を減らせるのが特徴です。
ハイパーパラメータ最適化とは
ハイパーパラメータ最適化とは、モデルの学習前に設定する値を複数の候補から試し、評価結果が良くなる組み合わせを探すことです。
たとえば学習率や木の深さに範囲を設定し、条件を変えながら学習・評価することで、適した値を選びやすくなります。
Optunaが選ばれる理由
Optunaが選ばれる理由は、試行結果を活用しながら、次に試すハイパーパラメータを効率よく探索できるためです。
また、良い結果が見込めない試行を途中で打ち切るPruning機能があり、不要な学習時間を減らせます。
そのため、すべての組み合わせを試すよりも効率よく有力な値を探せます。
Optunaを使うための準備
Optunaを使ってハイパーパラメータ最適化を始めるには、まずPython環境にOptunaをインストールする必要があります。
ここでは、Optunaのインストール方法と、正しくインストールできたか確認する方法を順番に解説します。
Optunaのインストール方法
Optunaは、Python環境でpipコマンドを使ってインストールできます。
ターミナルやコマンドプロンプトを開き、「pip install optuna」を実行し、エラーなく完了すれば利用する準備は完了です。
インストールできたか確認する方法
インストール後は、Pythonで「import optuna」を実行し、エラーが表示されなければ正しくインストールされています。
また、「optuna.version」を実行すると、インストールされているバージョンも確認できます。
Optunaの基本的な使い方
Optunaでハイパーパラメータ最適化を行うには、評価処理を記述する関数を作成し、探索する値の範囲や最適化の条件を設定して実行します。
ここでは、objective()関数の作成からtrial.suggest_*によるハイパーパラメータの設定、Studyの作成、study.optimize()の実行、best_params・best_valueによる結果の取得まで順番に解説します。
objective()関数を作成する
objective()関数には、1回の試行で行うモデルの学習と評価を記述します。
引数にtrialを受け取り、ハイパーパラメータを設定してモデルを学習し、最後に精度や損失などの評価値をreturnで返します。
Optunaは、この値をもとに各試行を比較します。
trial.suggest_*でハイパーパラメータを設定する
探索するハイパーパラメータは、objective()関数内でtrial.suggest_*を使って設定します。
整数はsuggest_int()、小数はsuggest_float()複数の候補から選ぶ場合はsuggest_categorical()を使い、探索範囲や候補を指定します。
study.create_study()でStudyを作成する
最適化を始める前に、optuna.create_study()でStudyを作成します。
評価値を大きくしたい場合は「direction="maximize"」小さくしたい場合は「direction="minimize"」を指定し、その方向に沿って最適な値を探索します。
study.optimize()を実行する(n_trialsなど主要な引数)
Studyを作成したら、study.optimize()にobjective()関数を渡して最適化を実行します。
n_trialsで試行回数を指定でき、「n_trials=100」なら最大100回の試行が行われます。
また、timeoutを使えば実行時間を秒単位で設定できます。
最適化結果(best_params・best_value)を取得する
最適化が完了したら、study.best_paramsで最も良かったハイパーパラメータの組み合わせを確認できます。
また、study.best_valueではそのときの評価値を取得できるため、探索結果を簡単に確認できます。
Optunaの実装例
Optunaの基本的な流れを理解したら、実際のPythonコードでどのように最適化を行うのか確認すると理解しやすくなります。
ここでは、Optunaを使った基本的な実装例から実行結果の確認方法、見つかった最適なパラメータを使ってモデルを学習する方法まで順番に解説します。
最小構成のPythonサンプルコード
Optunaでは、objective()関数の中で探索するハイパーパラメータと評価値を設定し、study.optimize()で最適化を実行します。最小構成では、次のように記述できます。
import optuna
def objective(trial):
x = trial.suggest_float("x", -10, 10)
return (x - 2) ** 2
study = optuna.create_study(direction="minimize")
study.optimize(objective, n_trials=100)
print(study.best_params)
print(study.best_value)
このコードでは、xを-10から10の範囲で探索し、(x - 2) ** 2が最小になる値を100回の試行から探します。
実行結果の見方
実行後は、study.best_paramsで最も良い結果を得たパラメータを確認します。
この例ではxが2に近いほど評価値が小さくなるため、best_paramsには2付近の値が表示されます。
また、study.best_valueは0に近いほど良い結果です。
最適化したパラメータでモデルを学習する
最適化したパラメータは、study.best_paramsから取得してモデルの学習に利用できます。
たとえば「best_params = study.best_params」として取得し、モデル作成時に「Model(**best_params)」のように渡せば、Optunaで見つけた値を使って学習できます。
Optunaでよくあるエラーと対処法
Optunaを使って最適化を進めていると、インストールが正常に完了しなかったり、objective()関数の実行中にエラーが発生したりすることがあります。
ここでは、Optunaをインストールできない場合、objective()関数でエラーが発生する場合、最適化結果が期待どおりにならない場合に分けて、主な原因と対処法を解説します。
Optunaをインストールできない
Optunaをインストールできない場合は、Pythonとpipが同じ環境を参照しているか確認しましょう。
「python -m pip install optuna」のようにPythonを指定して実行すると、対象の環境にインストールできます。
それでもエラーが出る場合は、Pythonやpipのバージョン、仮想環境を確認します。
objective()関数でエラーが発生する
objective()関数でエラーが出る場合は、trialの受け取り方やtrial.suggest_*の指定、returnする評価値を確認します。
エラーメッセージを確認しながら、該当する行の変数名やデータ型、探索範囲などを見直しましょう。
最適化結果が期待どおりにならない
期待した結果にならない場合は、directionや探索範囲、評価値、n_trialsの設定を確認します。
最大化と最小化の指定が正しいか、適切な値が探索範囲に含まれているかを見直し、必要に応じてn_trialsを増やして再実行しましょう。
まとめ
Optunaを使うと、学習率や木の深さなどを一つずつ手作業で調整する負担を減らしながら、より良いハイパーパラメータを効率よく探せます。
最初は設定項目が多く感じるかもしれませんが、基本となる流れを一度つかめば、さまざまな機械学習モデルの調整に活用できます。まずは少ないパラメータを使ったシンプルなコードから試し、探索範囲や試行回数を少しずつ調整してみましょう。
実際に動かしながら結果の変化を確認していくことで、Optunaを使ったハイパーパラメータ最適化の進め方も理解しやすくなります。