Optuna#
Examples using Surfaces with Optuna.
Basic Optuna Usage#
import optuna
from surfaces.test_functions.algebraic import RastriginFunction
optuna.logging.set_verbosity(optuna.logging.WARNING)
func = RastriginFunction(n_dim=5)
space = func.search_space
def objective(trial):
params = {
name: trial.suggest_float(name, values.min(), values.max())
for name, values in space.items()
}
return func(params)
study = optuna.create_study(direction='minimize')
study.optimize(objective, n_trials=100)
print(f"Best value: {study.best_value:.6f}")
print(f"Best params: {study.best_params}")
With Categorical Parameters#
import optuna
from surfaces.test_functions.machine_learning import KNeighborsClassifierFunction
optuna.logging.set_verbosity(optuna.logging.WARNING)
func = KNeighborsClassifierFunction()
space = func.search_space
def objective(trial):
params = {
'n_neighbors': trial.suggest_int('n_neighbors', 3, 50),
'algorithm': trial.suggest_categorical('algorithm', space['algorithm']),
}
return -func(params) # Negate for minimization (maximize accuracy)
study = optuna.create_study(direction='minimize')
study.optimize(objective, n_trials=30)
print(f"Best accuracy: {-study.best_value:.4f}")
Benchmarking Multiple Functions#
"""Benchmark Optuna on multiple Surfaces functions."""
import optuna
from surfaces.test_functions.algebraic import SphereFunction, RastriginFunction
optuna.logging.set_verbosity(optuna.logging.WARNING)
functions = [
('Sphere', SphereFunction(n_dim=10)),
('Rastrigin', RastriginFunction(n_dim=10)),
]
for name, func in functions:
space = func.search_space
def make_objective(f, s):
def objective(trial):
params = {k: trial.suggest_float(k, v.min(), v.max())
for k, v in s.items()}
return f(params)
return objective
study = optuna.create_study()
study.optimize(make_objective(func, space), n_trials=100)
print(f"{name}: {study.best_value:.6f}")