0Pricing
Learn AI with Python · レッスン

Optuna によるベイズ最適化

optuna.create_study()、suggest_float/int/categorical、枝刈り、可視化を学びます。

「Optuna によるベイズ最適化」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

ランダムサーチよりスマートな方法

グリッドサーチとランダムサーチは、過去の結果を考慮しません。ベイズ最適化は過去の試行結果から学習し、次に有望なハイパーパラメータを提案するため、より少ない評価回数で良い値を見つけられます。

Optunaの役割

Optunaは、ハイパーパラメータ最適化で広く使われているフレームワークです。目的関数を定義すると、Optunaがハイパーパラメータを賢くサンプリングし、どの設定が有効だったかを記録します。

Studyの作成

studyが最適化を管理します。accuracyやAUCにはdirectionを"maximize"に設定し、lossやerrorには"minimize"に設定します。

import optuna

study = optuna.create_study(direction="maximize")

目的関数

目的関数はtrialオブジェクトを受け取り、ハイパーパラメータを提案し、モデルを学習させ、最適化するスコアを返します。

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score

def objective(trial):
    n = trial.suggest_int("n_estimators", 100, 500)
    d = trial.suggest_int("max_depth", 3, 20)
    clf = RandomForestClassifier(n_estimators=n, max_depth=d)
    return cross_val_score(clf, X, y, cv=3).mean()

整数パラメータの提案

trial.suggest_int(name, low, high)は範囲内の整数を選びます。stepやlog=Trueを追加すると、サンプリング方法を制御できます。

def objective(trial):
    n_estimators = trial.suggest_int("n_estimators", 100, 1000, step=50)
    return train_and_score(n_estimators)

浮動小数点パラメータの提案

trial.suggest_float(name, low, high)は実数を選びます。学習率のように何桁もの範囲にわたるパラメータには、log=Trueを使います。

def objective(trial):
    lr = trial.suggest_float("learning_rate", 1e-4, 0.3, log=True)
    subsample = trial.suggest_float("subsample", 0.5, 1.0)
    return train_and_score(lr, subsample)

カテゴリカルパラメータの提案

trial.suggest_categorical(name, choices)は固定されたリストから選択します。カーネルの種類やブースティング手法などの選択肢に適しています。

def objective(trial):
    kernel = trial.suggest_categorical("kernel", ["linear", "rbf", "poly"])
    return train_svm(kernel)

最適化の実行

study.optimize(objective, n_trials=N)は、N回の試行で探索を実行します。試行回数を増やすほど広い範囲を探索でき、Optunaは時間の経過とともに有望な領域へ重点を移します。

study.optimize(objective, n_trials=100)

最良の結果を読み取る

最適化後は、最良のハイパーパラメータをstudy.best_paramsで、最良の目的関数スコアをstudy.best_valueで取得できます。

print("Best params:", study.best_params)
print("Best value:", study.best_value)

best = RandomForestClassifier(**study.best_params)
best.fit(X, y)

有望でない試行の枝刈り

Optunaでは、prunersを使って成績の悪い試行を早期に停止し、計算量を削減できます。学習ループ内で中間値を報告し、trial.should_prune()を確認します。

import optuna

study = optuna.create_study(
    direction="maximize",
    pruner=optuna.pruners.MedianPruner(),
)

Optunaが大規模化に対応できる理由

Optunaは、試行の並列実行、永続ストレージ、探索結果の可視化に対応しています。計算コストの高いモデルでは、サンプル効率の高いベイズ手法により、グリッドサーチやランダムサーチよりはるかに少ない試行で優れた設定を見つけられます。

確認問題

Optunaについての知識を確認しましょう。

まとめ

まとめ: Optunaはベイズ最適化を使ってハイパーパラメータを効率的に調整します。directionを指定してstudyを作成し、trial.suggest_int/float/categoricalを使う目的関数を記述して、study.optimize(objective, n_trials=N)を実行します。その後、study.best_paramsとstudy.best_valueを確認します。prunerは成績の低い試行を停止して計算量を削減します。

よくある質問

「Optuna によるベイズ最適化」レッスンは無料ですか?

はい。「Optuna によるベイズ最適化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「Optuna によるベイズ最適化」で何を学びますか?

optuna.create_study()、suggest_float/int/categorical、枝刈り、可視化を学びます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「Optuna によるベイズ最適化」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 交差検証の戦略
  2. 分類指標を深く学ぶ
  3. グリッドサーチとランダムサーチ
  4. Optuna によるベイズ最適化
← Learn AI with Pythonに戻る