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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 交差検証の戦略
- 分類指標を深く学ぶ
- グリッドサーチとランダムサーチ
- Optuna によるベイズ最適化