Categories
未分類

Optuna

概要

Optunaは、ハイパーパラメータの最適化を自動化するためのPythonのライブラリです。ハイパーパラメータ最適化は、機械学習やディープラーニングのモデル訓練において重要なタスクであり、最適なハイパーパラメータの設定によってモデルの性能を向上させることができます。

Optunaは、ハイパーパラメータの探索空間を定義し、探索アルゴリズムを適用して最適なパラメータセットを見つけるためのフレームワークを提供します。Optunaはさまざまな探索アルゴリズム(例:ランダムサーチ、ベイズ最適化など)をサポートしており、目的関数の評価結果に基づいて最適なハイパーパラメータを探索します。

Optunaの利点は、シンプルで使いやすいインターフェースと柔軟性にあります。また、分散コンピューティングをサポートしており、複数のマシンやクラウド上でのハイパーパラメータの探索を並列化することも可能です。

Optunaは、機械学習の研究や開発においてモデルのパフォーマンスを向上させるための貴重なツールとなっています。

コード例

import optuna
import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

# データの読み込み
data, target = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=42)

# 目的関数の定義
def objective(trial):
    params = {
        'objective': 'binary:logistic',
        'eval_metric': 'logloss',
        'n_estimators': trial.suggest_int('n_estimators', 100, 1000),
        'max_depth': trial.suggest_int('max_depth', 3, 10),
        'learning_rate': trial.suggest_loguniform('learning_rate', 0.001, 0.1),
        'subsample': trial.suggest_uniform('subsample', 0.5, 1.0),
        'colsample_bytree': trial.suggest_uniform('colsample_bytree', 0.5, 1.0),
        'gamma': trial.suggest_loguniform('gamma', 0.001, 1.0),
        'min_child_weight': trial.suggest_int('min_child_weight', 1, 10),
        'reg_alpha': trial.suggest_loguniform('reg_alpha', 0.001, 1.0),
        'reg_lambda': trial.suggest_loguniform('reg_lambda', 0.001, 1.0),
    }

    model = xgb.XGBClassifier(**params)
    model.fit(X_train, y_train)

    y_pred = model.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:', study.best_trial.params)
print('Best accuracy:', study.best_value)

この例では、Breast Cancerデータセットを使用し、XGBoostモデルのハイパーパラメータ最適化を行っています。objective関数は最大化する値(この場合は正確さ)を返すように定義されており、Optunaのsuggestメソッドを使用してハイパーパラメータの探索範囲を指定しています。optuna.create_study()で最適化のためのStudyオブジェクトを作成し、study.optimize()で最適化の実行を指示します。

最適化が完了すると、最良のトライアル(ハイパーパラメータの組み合わせ)とそのときの正確さが表示されます。このコードを実行すると、指定したトライアル数(n_trials)に応じて最適なハイパーパラメータが見つかるはずです。