2023.08.31 Optuna基本【optuna】
Preferred Networks社が開発したベイズ推定によりパラメータ最適化を行うライブラリである。
NNのパイパーパラメータの最適化だけでなく、一般の最適化問題に広く利用することができる。
code:python3.py
import optuna # ライブラリの読み込み
def objective(trial): # 目的関数
x = trial.suggest_float("X", -10, 10)
return x**2 # (1) ここで帰す値を最小化するように振る舞う
study = optuna.create_study() # 学習器の生成
study.optimize(objective, n_trials=10, show_progress_bar=True) # (1)で帰す値を最小化する
学習の結果、studyオブジェクトに結果が格納される、
code:(続き).py
print('# 最適なパラメータの値')
print(study.best_params)
print('# 最適化後の目的関数の値')
print(study.best_value)
code:結果.txt
# 最適なパラメータの値
{'X': -0.34457562452455015}
# 最適化後の目的関数の値
0.11873236101648377
各試行の結果は変数 trials に FrozenTrial 型のリストとして保持されている。
code:(続き).py
print('# 全試行過程')
print(type(study.trials))
code:text
# 全試行回数
<class 'list'>
study.trialsを表示すると、たくさんの情報が画面に出力されちょっと分かりにくいので、終端の FrozenTrial オブジェクトについて調べてみよう。確認したところ以下の変数を有しているようです。
number : 試行回数
state : 結果の状態
values : この試行における目的関数の値
datetime_start : 計算開始のタイムスタンプ
datetime_complete : 計算終了のタイムスタンプ
params(dict) : この試行において用いて変数の値
user_attrs(dict) : ??
system_attrs(dict) : ??
intermediate_values(dict) : ??
distributions(dict) : 変数の型、上限値と下限値
trial_id : ??
value : ??
code:(続き).py
print('* number:', last.number, '# 試行回数')
print('* state:', last.state, '# 状態、完了したか')
print('* values:', last.values)
print('* datetime_start:', last.datetime_start)
print('* datetime_complete:', last.datetime_complete)
print('* params(dict)')
for i in last.params.items():
print(' * ',i)
print('* user_attrs(dict):', last.user_attrs)
print('* system_attrs(dict):', last.system_attrs)
print('* intermediate_values(dict):', last.intermediate_values)
print('* distributions(dict):')
for i in last.distributions.items():
print(' *', i)
# print(last.trial_id)
print('* value:', last.value)