【Python】Optunaを使ってハイパーパラメータ最適化を簡単に行う方法

Python

機械学習を実装する際には、ハイパーパラメータの調整が非常に重要です。しかし、これは手動で行うには大変時間がかかります。そこで、今回はPythonのライブラリ「Optuna」を使ってハイパーパラメータ最適化を簡単に行う方法を解説します。

Optunaとは?

Optunaは、Pythonで実装された軽量で使いやすいハイパーパラメータ最適化ライブラリです。Optunaを使うことで、ハイパーパラメータの調整を自動化でき、効率的に最適なパラメータを見つけることができます。

個人的には機械学習のハイパラ調整だけでなく、整数の組み合わせ最適化などでも使用しています。さまざまなシーンで使用されている事例を多く耳にします。

Optuna - A hyperparameter optimization framework
Optuna is an automatic hyperparameter optimization software framework, particularly designed for machine learning. It features an imperative, define-by-run styl...

Optunaの使い方

Optunaはpipを使って簡単にインストールできます。

pip install optuna

Optunaを使ったハイパーパラメータ最適化の基本的な流れ

  1. 目的関数を定義する
  2. 最適化するパラメータの範囲を指定する
  3. 最適化プロセスを実行する

それでは、具体的なコード例を見ていきましょう。

import optuna

# 目的関数の定義
def objective(trial):
    # ハイパーパラメータの範囲指定
    x = trial.suggest_float("x", -10, 10)
    y = trial.suggest_float("y", -10, 10)

    # モデルの評価指標を計算(例として、二次関数の最小値を求める)
    return (x - 2) ** 2 + (y + 3) ** 2

# 最適化プロセスの実行
study = optuna.create_study()
study.optimize(objective, n_trials=100)

# 最適化結果の表示
print("Best trial:")
trial = study.best_trial
print(f"  Value: {trial.value}")
print(f"  Params: {trial.params}")

上記のコードでは、二次関数の最小値を求める問題を解いています。xyの範囲を-10から10の間に指定し、100回の試行で最適なパラメータを探しています。

結果として、最適な試行とその評価値(最小値)およびパラメータが表示されます。

まとめ

Optunaを使うことで、ハイパーパラメータ最適化を簡単に行うことができます。目的関数とパラメータ範囲を設定し、最適化プロセスを実行するだけで、効率的に最適なパラメータを見つけることができます。機械学習モデルの性能向上に役立ててください。

Optunaは、さまざまな機械学習ライブラリ(scikit-learn、TensorFlow、PyTorchなど)と連携することができます。これにより、独自の機械学習モデルに対しても簡単にハイパーパラメータ最適化を実施できます。

番外編

Optunaは機械学習のハイパーパラメータを最適化するために開発されたライブラリです。そこで番外編として、機械学習と絡めたコードを紹介します。

例として、scikit-learnのSVMモデルのハイパーパラメータ最適化をOptunaを使って行うコード例を紹介します。

import optuna
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC

# データの準備
iris = datasets.load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 目的関数の定義
def objective(trial):
    # ハイパーパラメータの範囲指定
    C = trial.suggest_float("C", 1e-10, 1e10, log=True)
    kernel = trial.suggest_categorical("kernel", ["linear", "poly", "rbf", "sigmoid"])

    # モデルの学習
    svm = SVC(C=C, kernel=kernel)
    svm.fit(X_train, y_train)

    # モデルの評価
    y_pred = svm.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)

    return accuracy

# 最適化プロセスの実行
study = optuna.create_study(direction="maximize")
study.optimize(objective, n_trials=100)

# 最適化結果の表示
print("Best trial:")
trial = study.best_trial
print(f"  Value: {trial.value}")
print(f"  Params: {trial.params}")

上記のコードでは、Irisデータセットを用いてSVMモデルのハイパーパラメータCkernelを最適化しています。最適化の目的は、テストデータでの正解率を最大化することです。

このように、Optunaを使って独自の機械学習モデルに対しても簡単にハイパーパラメータ最適化を実施できます。ぜひ、Optunaを活用してモデルの性能を向上させてください。

関連記事

データサイエンティストの書評ブログ
趣味が読書くらいしかない駆け出しデータサイエンティストの書評ブログです。日々の勉強のアウトプットや趣味の読書のおすすめをしていきます。

コメント

タイトルとURLをコピーしました