Note
Go to the end to download the full example code.
plot_edf
- optuna.visualization.plot_edf(study, *, target=None, target_name='Objective Value')[source]
Plot the objective value EDF (empirical distribution function) of a study.
Note that only the complete trials are considered when plotting the EDF.
Note
EDF is useful to analyze and improve search spaces. For instance, you can see a practical use case of EDF in the paper Designing Network Design Spaces.
Note
The plotted EDF assumes that the value of the objective function is in accordance with the uniform distribution over the objective space.
- Parameters:
study (Study | Sequence[Study]) – A target
Study
object. You can pass multiple studies if you want to compare those EDFs.target (Callable[[FrozenTrial], float] | None) –
A function to specify the value to display. If it is
None
andstudy
is being used for single-objective optimization, the objective values are plotted.Note
Specify this argument if
study
is being used for multi-objective optimization.target_name (str) – Target’s name to display on the axis label.
- Returns:
A
plotly.graph_objects.Figure
object.- Return type:
Figure
The following code snippet shows how to plot EDF.
import math
import optuna
from plotly.io import show
def ackley(x, y):
a = 20 * math.exp(-0.2 * math.sqrt(0.5 * (x**2 + y**2)))
b = math.exp(0.5 * (math.cos(2 * math.pi * x) + math.cos(2 * math.pi * y)))
return -a - b + math.e + 20
def objective(trial, low, high):
x = trial.suggest_float("x", low, high)
y = trial.suggest_float("y", low, high)
return ackley(x, y)
sampler = optuna.samplers.RandomSampler(seed=10)
# Widest search space.
study0 = optuna.create_study(study_name="x=[0,5), y=[0,5)", sampler=sampler)
study0.optimize(lambda t: objective(t, 0, 5), n_trials=500)
# Narrower search space.
study1 = optuna.create_study(study_name="x=[0,4), y=[0,4)", sampler=sampler)
study1.optimize(lambda t: objective(t, 0, 4), n_trials=500)
# Narrowest search space but it doesn't include the global optimum point.
study2 = optuna.create_study(study_name="x=[1,3), y=[1,3)", sampler=sampler)
study2.optimize(lambda t: objective(t, 1, 3), n_trials=500)
fig = optuna.visualization.plot_edf([study0, study1, study2])
show(fig)
Total running time of the script: (0 minutes 1.163 seconds)