Note
Go to the end to download the full example code.
Calibration of a polynomial regression#
from __future__ import annotations
import matplotlib.pyplot as plt
from matplotlib.tri import Triangulation
from gemseo.algos.design_space import DesignSpace
from gemseo.mlearning.core.calibration import MLAlgoCalibration
from gemseo.mlearning.regression.quality.mse_measure import MSEMeasure
from gemseo.problems.dataset.rosenbrock import create_rosenbrock_dataset
Load the dataset#
dataset = create_rosenbrock_dataset(opt_naming=False, n_samples=25)
Define the measure#
test_dataset = create_rosenbrock_dataset(opt_naming=False)
measure_evaluation_method_name = "TEST"
measure_options = {"test_data": test_dataset}
Calibrate the degree of the polynomial regression#
Define and execute the calibration#
calibration_space = DesignSpace()
calibration_space.add_variable("degree", 1, "integer", 1, 10, 1)
calibration = MLAlgoCalibration(
"PolynomialRegressor",
dataset,
["degree"],
calibration_space,
MSEMeasure,
measure_evaluation_method_name=measure_evaluation_method_name,
measure_options=measure_options,
)
calibration.execute(algo_name="PYDOE_FULLFACT", n_samples=10)
x_opt = calibration.optimal_parameters
f_opt = calibration.optimal_criterion
degree = x_opt["degree"][0]
f"optimal degree = {degree}; optimal criterion = {f_opt}"
INFO - 16:21:23: *** Start DOEScenario execution ***
INFO - 16:21:23: DOEScenario
INFO - 16:21:23: Disciplines: MLAlgoAssessor
INFO - 16:21:23: MDO formulation: DisciplinaryOpt
INFO - 16:21:23: Optimization problem:
INFO - 16:21:23: minimize criterion(degree)
INFO - 16:21:23: with respect to degree
INFO - 16:21:23: over the design space:
INFO - 16:21:23: +--------+-------------+-------+-------------+---------+
INFO - 16:21:23: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:21:23: +--------+-------------+-------+-------------+---------+
INFO - 16:21:23: | degree | 1 | 1 | 10 | integer |
INFO - 16:21:23: +--------+-------------+-------+-------------+---------+
INFO - 16:21:23: Solving optimization problem with algorithm PYDOE_FULLFACT:
INFO - 16:21:23: 10%|█ | 1/10 [00:00<00:00, 23.89 it/sec, feas=True, obj=5.89e+5]
INFO - 16:21:23: 20%|██ | 2/10 [00:00<00:00, 41.45 it/sec, feas=True, obj=1.73e+5]
INFO - 16:21:23: 30%|███ | 3/10 [00:00<00:00, 55.14 it/sec, feas=True, obj=3e+4]
INFO - 16:21:23: 40%|████ | 4/10 [00:00<00:00, 66.03 it/sec, feas=True, obj=1.1e-24]
INFO - 16:21:23: 50%|█████ | 5/10 [00:00<00:00, 74.94 it/sec, feas=True, obj=0.11]
INFO - 16:21:23: 60%|██████ | 6/10 [00:00<00:00, 82.31 it/sec, feas=True, obj=1.18e+3]
INFO - 16:21:23: 70%|███████ | 7/10 [00:00<00:00, 88.50 it/sec, feas=True, obj=6.9e+3]
INFO - 16:21:23: 80%|████████ | 8/10 [00:00<00:00, 93.75 it/sec, feas=True, obj=1.36e+4]
INFO - 16:21:23: 90%|█████████ | 9/10 [00:00<00:00, 98.29 it/sec, feas=True, obj=9.18e+4]
INFO - 16:21:24: 100%|██████████| 10/10 [00:00<00:00, 102.10 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:24: Optimization result:
INFO - 16:21:24: Optimizer info:
INFO - 16:21:24: Status: None
INFO - 16:21:24: Message: None
INFO - 16:21:24: Solution:
INFO - 16:21:24: Objective: 1.0957626812742524e-24
INFO - 16:21:24: Design space:
INFO - 16:21:24: +--------+-------------+-------+-------------+---------+
INFO - 16:21:24: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:21:24: +--------+-------------+-------+-------------+---------+
INFO - 16:21:24: | degree | 1 | 4 | 10 | integer |
INFO - 16:21:24: +--------+-------------+-------+-------------+---------+
INFO - 16:21:24: *** End DOEScenario execution ***
'optimal degree = 4; optimal criterion = 1.0957626812742524e-24'
Get the history#
calibration.dataset
Visualize the results#
degree = calibration.get_history("degree")
criterion = calibration.get_history("criterion")
learning = calibration.get_history("learning")
plt.plot(degree, criterion, "-o", label="test", color="red")
plt.plot(degree, learning, "-o", label="learning", color="blue")
plt.xlabel("polynomial degree")
plt.ylabel("quality")
plt.axvline(x_opt["degree"], color="red", ls="--")
plt.legend()
plt.show()

Calibrate the ridge penalty of the polynomial regression#
Define and execute the calibration#
calibration_space = DesignSpace()
calibration_space.add_variable("penalty_level", 1, "float", 0.0, 100.0, 0.0)
calibration = MLAlgoCalibration(
"PolynomialRegressor",
dataset,
["penalty_level"],
calibration_space,
MSEMeasure,
measure_evaluation_method_name=measure_evaluation_method_name,
measure_options=measure_options,
degree=10,
)
calibration.execute(algo_name="PYDOE_FULLFACT", n_samples=10)
x_opt = calibration.optimal_parameters
f_opt = calibration.optimal_criterion
x_opt["penalty_level"][0], f_opt
INFO - 16:21:24: *** Start DOEScenario execution ***
INFO - 16:21:24: DOEScenario
INFO - 16:21:24: Disciplines: MLAlgoAssessor
INFO - 16:21:24: MDO formulation: DisciplinaryOpt
INFO - 16:21:24: Optimization problem:
INFO - 16:21:24: minimize criterion(penalty_level)
INFO - 16:21:24: with respect to penalty_level
INFO - 16:21:24: over the design space:
INFO - 16:21:24: +---------------+-------------+-------+-------------+-------+
INFO - 16:21:24: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:21:24: +---------------+-------------+-------+-------------+-------+
INFO - 16:21:24: | penalty_level | 0 | 0 | 100 | float |
INFO - 16:21:24: +---------------+-------------+-------+-------------+-------+
INFO - 16:21:24: Solving optimization problem with algorithm PYDOE_FULLFACT:
INFO - 16:21:24: 10%|█ | 1/10 [00:00<00:00, 118.67 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:24: 20%|██ | 2/10 [00:00<00:00, 133.35 it/sec, feas=True, obj=3.25e+4]
INFO - 16:21:24: 30%|███ | 3/10 [00:00<00:00, 140.87 it/sec, feas=True, obj=1.78e+4]
INFO - 16:21:24: 40%|████ | 4/10 [00:00<00:00, 144.74 it/sec, feas=True, obj=1.72e+4]
INFO - 16:21:24: 50%|█████ | 5/10 [00:00<00:00, 147.69 it/sec, feas=True, obj=2e+4]
INFO - 16:21:24: 60%|██████ | 6/10 [00:00<00:00, 149.49 it/sec, feas=True, obj=2.35e+4]
INFO - 16:21:24: 70%|███████ | 7/10 [00:00<00:00, 150.67 it/sec, feas=True, obj=2.7e+4]
INFO - 16:21:24: 80%|████████ | 8/10 [00:00<00:00, 151.77 it/sec, feas=True, obj=3.03e+4]
INFO - 16:21:24: 90%|█████████ | 9/10 [00:00<00:00, 152.63 it/sec, feas=True, obj=3.33e+4]
INFO - 16:21:24: 100%|██████████| 10/10 [00:00<00:00, 152.88 it/sec, feas=True, obj=3.59e+4]
INFO - 16:21:24: Optimization result:
INFO - 16:21:24: Optimizer info:
INFO - 16:21:24: Status: None
INFO - 16:21:24: Message: None
INFO - 16:21:24: Solution:
INFO - 16:21:24: Objective: 17189.52649297074
INFO - 16:21:24: Design space:
INFO - 16:21:24: +---------------+-------------+-------------------+-------------+-------+
INFO - 16:21:24: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:21:24: +---------------+-------------+-------------------+-------------+-------+
INFO - 16:21:24: | penalty_level | 0 | 33.33333333333333 | 100 | float |
INFO - 16:21:24: +---------------+-------------+-------------------+-------------+-------+
INFO - 16:21:24: *** End DOEScenario execution ***
(np.float64(33.33333333333333), np.float64(17189.52649297074))
Get the history#
calibration.dataset
Visualize the results#
penalty_level = calibration.get_history("penalty_level")
criterion = calibration.get_history("criterion")
learning = calibration.get_history("learning")
plt.plot(penalty_level, criterion, "-o", label="test", color="red")
plt.plot(penalty_level, learning, "-o", label="learning", color="blue")
plt.axvline(x_opt["penalty_level"], color="red", ls="--")
plt.xlabel("ridge penalty")
plt.ylabel("quality")
plt.legend()
plt.show()

Calibrate the lasso penalty of the polynomial regression#
Define and execute the calibration#
calibration_space = DesignSpace()
calibration_space.add_variable("penalty_level", 1, "float", 0.0, 100.0, 0.0)
calibration = MLAlgoCalibration(
"PolynomialRegressor",
dataset,
["penalty_level"],
calibration_space,
MSEMeasure,
measure_evaluation_method_name=measure_evaluation_method_name,
measure_options=measure_options,
degree=10,
l2_penalty_ratio=0.0,
)
calibration.execute(algo_name="PYDOE_FULLFACT", n_samples=10)
x_opt = calibration.optimal_parameters
f_opt = calibration.optimal_criterion
x_opt["penalty_level"][0], f_opt
INFO - 16:21:24: *** Start DOEScenario execution ***
INFO - 16:21:24: DOEScenario
INFO - 16:21:24: Disciplines: MLAlgoAssessor
INFO - 16:21:24: MDO formulation: DisciplinaryOpt
INFO - 16:21:24: Optimization problem:
INFO - 16:21:24: minimize criterion(penalty_level)
INFO - 16:21:24: with respect to penalty_level
INFO - 16:21:24: over the design space:
INFO - 16:21:24: +---------------+-------------+-------+-------------+-------+
INFO - 16:21:24: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:21:24: +---------------+-------------+-------+-------------+-------+
INFO - 16:21:24: | penalty_level | 0 | 0 | 100 | float |
INFO - 16:21:24: +---------------+-------------+-------+-------------+-------+
INFO - 16:21:24: Solving optimization problem with algorithm PYDOE_FULLFACT:
INFO - 16:21:24: 10%|█ | 1/10 [00:00<00:00, 115.40 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:24: 20%|██ | 2/10 [00:00<00:00, 117.18 it/sec, feas=True, obj=1.58e+4]
INFO - 16:21:24: 30%|███ | 3/10 [00:00<00:00, 119.52 it/sec, feas=True, obj=3.15e+4]
INFO - 16:21:24: 40%|████ | 4/10 [00:00<00:00, 121.01 it/sec, feas=True, obj=4.74e+4]
INFO - 16:21:24: 50%|█████ | 5/10 [00:00<00:00, 122.31 it/sec, feas=True, obj=5.94e+4]
INFO - 16:21:24: 60%|██████ | 6/10 [00:00<00:00, 123.27 it/sec, feas=True, obj=6.27e+4]
INFO - 16:21:24: 70%|███████ | 7/10 [00:00<00:00, 123.92 it/sec, feas=True, obj=6.63e+4]
INFO - 16:21:24: 80%|████████ | 8/10 [00:00<00:00, 124.46 it/sec, feas=True, obj=6.93e+4]
INFO - 16:21:24: 90%|█████████ | 9/10 [00:00<00:00, 121.63 it/sec, feas=True, obj=7.25e+4]
INFO - 16:21:24: 100%|██████████| 10/10 [00:00<00:00, 122.13 it/sec, feas=True, obj=7.57e+4]
INFO - 16:21:24: Optimization result:
INFO - 16:21:24: Optimizer info:
INFO - 16:21:24: Status: None
INFO - 16:21:24: Message: None
INFO - 16:21:24: Solution:
INFO - 16:21:24: Objective: 15775.989581125898
INFO - 16:21:24: Design space:
INFO - 16:21:24: +---------------+-------------+-------------------+-------------+-------+
INFO - 16:21:24: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:21:24: +---------------+-------------+-------------------+-------------+-------+
INFO - 16:21:24: | penalty_level | 0 | 11.11111111111111 | 100 | float |
INFO - 16:21:24: +---------------+-------------+-------------------+-------------+-------+
INFO - 16:21:24: *** End DOEScenario execution ***
(np.float64(11.11111111111111), np.float64(15775.989581125898))
Get the history#
calibration.dataset
Visualize the results#
penalty_level = calibration.get_history("penalty_level")
criterion = calibration.get_history("criterion")
learning = calibration.get_history("learning")
plt.plot(penalty_level, criterion, "-o", label="test", color="red")
plt.plot(penalty_level, learning, "-o", label="learning", color="blue")
plt.axvline(x_opt["penalty_level"], color="red", ls="--")
plt.xlabel("lasso penalty")
plt.ylabel("quality")
plt.legend()
plt.show()

Calibrate the elasticnet penalty of the polynomial regression#
Define and execute the calibration#
calibration_space = DesignSpace()
calibration_space.add_variable("penalty_level", 1, "float", 0.0, 40.0, 0.0)
calibration_space.add_variable("l2_penalty_ratio", 1, "float", 0.0, 1.0, 0.5)
calibration = MLAlgoCalibration(
"PolynomialRegressor",
dataset,
["penalty_level", "l2_penalty_ratio"],
calibration_space,
MSEMeasure,
measure_evaluation_method_name=measure_evaluation_method_name,
measure_options=measure_options,
degree=10,
)
calibration.execute(algo_name="PYDOE_FULLFACT", n_samples=100)
x_opt = calibration.optimal_parameters
f_opt = calibration.optimal_criterion
x_opt["penalty_level"][0], x_opt["l2_penalty_ratio"][0], f_opt
INFO - 16:21:24: *** Start DOEScenario execution ***
INFO - 16:21:24: DOEScenario
INFO - 16:21:24: Disciplines: MLAlgoAssessor
INFO - 16:21:24: MDO formulation: DisciplinaryOpt
INFO - 16:21:24: Optimization problem:
INFO - 16:21:24: minimize criterion(penalty_level, l2_penalty_ratio)
INFO - 16:21:24: with respect to l2_penalty_ratio, penalty_level
INFO - 16:21:24: over the design space:
INFO - 16:21:24: +------------------+-------------+-------+-------------+-------+
INFO - 16:21:24: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:21:24: +------------------+-------------+-------+-------------+-------+
INFO - 16:21:24: | penalty_level | 0 | 0 | 40 | float |
INFO - 16:21:24: | l2_penalty_ratio | 0 | 0.5 | 1 | float |
INFO - 16:21:24: +------------------+-------------+-------+-------------+-------+
INFO - 16:21:24: Solving optimization problem with algorithm PYDOE_FULLFACT:
INFO - 16:21:24: 1%| | 1/100 [00:00<00:00, 116.45 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:24: 2%|▏ | 2/100 [00:00<00:00, 119.30 it/sec, feas=True, obj=4.14e+3]
INFO - 16:21:24: 3%|▎ | 3/100 [00:00<00:00, 120.67 it/sec, feas=True, obj=1.34e+4]
INFO - 16:21:24: 4%|▍ | 4/100 [00:00<00:00, 120.51 it/sec, feas=True, obj=1.79e+4]
INFO - 16:21:24: 5%|▌ | 5/100 [00:00<00:00, 121.18 it/sec, feas=True, obj=2.39e+4]
INFO - 16:21:24: 6%|▌ | 6/100 [00:00<00:00, 121.74 it/sec, feas=True, obj=3.15e+4]
INFO - 16:21:24: 7%|▋ | 7/100 [00:00<00:00, 122.24 it/sec, feas=True, obj=3.91e+4]
INFO - 16:21:24: 8%|▊ | 8/100 [00:00<00:00, 122.76 it/sec, feas=True, obj=4.5e+4]
INFO - 16:21:24: 9%|▉ | 9/100 [00:00<00:00, 123.03 it/sec, feas=True, obj=4.95e+4]
INFO - 16:21:24: 10%|█ | 10/100 [00:00<00:00, 123.47 it/sec, feas=True, obj=5.42e+4]
INFO - 16:21:24: 11%|█ | 11/100 [00:00<00:00, 126.01 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:24: 12%|█▏ | 12/100 [00:00<00:00, 125.52 it/sec, feas=True, obj=1.35e+4]
INFO - 16:21:24: 13%|█▎ | 13/100 [00:00<00:00, 125.29 it/sec, feas=True, obj=2.44e+4]
INFO - 16:21:24: 14%|█▍ | 14/100 [00:00<00:00, 125.08 it/sec, feas=True, obj=3.28e+4]
INFO - 16:21:24: 15%|█▌ | 15/100 [00:00<00:00, 124.95 it/sec, feas=True, obj=4.19e+4]
INFO - 16:21:24: 16%|█▌ | 16/100 [00:00<00:00, 124.79 it/sec, feas=True, obj=4.76e+4]
INFO - 16:21:24: 17%|█▋ | 17/100 [00:00<00:00, 124.70 it/sec, feas=True, obj=5.16e+4]
INFO - 16:21:24: 18%|█▊ | 18/100 [00:00<00:00, 124.63 it/sec, feas=True, obj=5.52e+4]
INFO - 16:21:24: 19%|█▉ | 19/100 [00:00<00:00, 124.68 it/sec, feas=True, obj=5.78e+4]
INFO - 16:21:24: 20%|██ | 20/100 [00:00<00:00, 124.78 it/sec, feas=True, obj=5.98e+4]
INFO - 16:21:24: 21%|██ | 21/100 [00:00<00:00, 126.09 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:24: 22%|██▏ | 22/100 [00:00<00:00, 125.86 it/sec, feas=True, obj=1.97e+4]
INFO - 16:21:24: 23%|██▎ | 23/100 [00:00<00:00, 125.56 it/sec, feas=True, obj=3.17e+4]
INFO - 16:21:24: 24%|██▍ | 24/100 [00:00<00:00, 125.36 it/sec, feas=True, obj=4.02e+4]
INFO - 16:21:24: 25%|██▌ | 25/100 [00:00<00:00, 125.28 it/sec, feas=True, obj=4.59e+4]
INFO - 16:21:24: 26%|██▌ | 26/100 [00:00<00:00, 125.17 it/sec, feas=True, obj=4.97e+4]
INFO - 16:21:24: 27%|██▋ | 27/100 [00:00<00:00, 125.12 it/sec, feas=True, obj=5.3e+4]
INFO - 16:21:24: 28%|██▊ | 28/100 [00:00<00:00, 125.03 it/sec, feas=True, obj=5.6e+4]
INFO - 16:21:24: 29%|██▉ | 29/100 [00:00<00:00, 125.04 it/sec, feas=True, obj=5.89e+4]
INFO - 16:21:24: 30%|███ | 30/100 [00:00<00:00, 125.04 it/sec, feas=True, obj=6.18e+4]
INFO - 16:21:24: 31%|███ | 31/100 [00:00<00:00, 125.88 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:24: 32%|███▏ | 32/100 [00:00<00:00, 125.71 it/sec, feas=True, obj=2.43e+4]
INFO - 16:21:24: 33%|███▎ | 33/100 [00:00<00:00, 125.58 it/sec, feas=True, obj=3.58e+4]
INFO - 16:21:24: 34%|███▍ | 34/100 [00:00<00:00, 125.49 it/sec, feas=True, obj=4.29e+4]
INFO - 16:21:24: 35%|███▌ | 35/100 [00:00<00:00, 125.39 it/sec, feas=True, obj=4.77e+4]
INFO - 16:21:24: 36%|███▌ | 36/100 [00:00<00:00, 125.32 it/sec, feas=True, obj=5.12e+4]
INFO - 16:21:24: 37%|███▋ | 37/100 [00:00<00:00, 125.27 it/sec, feas=True, obj=5.43e+4]
INFO - 16:21:24: 38%|███▊ | 38/100 [00:00<00:00, 125.23 it/sec, feas=True, obj=5.74e+4]
INFO - 16:21:24: 39%|███▉ | 39/100 [00:00<00:00, 125.19 it/sec, feas=True, obj=6.05e+4]
INFO - 16:21:24: 40%|████ | 40/100 [00:00<00:00, 124.40 it/sec, feas=True, obj=6.35e+4]
INFO - 16:21:24: 41%|████ | 41/100 [00:00<00:00, 125.06 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:24: 42%|████▏ | 42/100 [00:00<00:00, 124.94 it/sec, feas=True, obj=2.75e+4]
INFO - 16:21:24: 43%|████▎ | 43/100 [00:00<00:00, 124.85 it/sec, feas=True, obj=3.82e+4]
INFO - 16:21:24: 44%|████▍ | 44/100 [00:00<00:00, 124.75 it/sec, feas=True, obj=4.42e+4]
INFO - 16:21:24: 45%|████▌ | 45/100 [00:00<00:00, 124.71 it/sec, feas=True, obj=4.9e+4]
INFO - 16:21:24: 46%|████▌ | 46/100 [00:00<00:00, 124.64 it/sec, feas=True, obj=5.28e+4]
INFO - 16:21:24: 47%|████▋ | 47/100 [00:00<00:00, 124.59 it/sec, feas=True, obj=5.61e+4]
INFO - 16:21:24: 48%|████▊ | 48/100 [00:00<00:00, 124.55 it/sec, feas=True, obj=5.93e+4]
INFO - 16:21:24: 49%|████▉ | 49/100 [00:00<00:00, 124.53 it/sec, feas=True, obj=6.24e+4]
INFO - 16:21:24: 50%|█████ | 50/100 [00:00<00:00, 124.50 it/sec, feas=True, obj=6.54e+4]
INFO - 16:21:24: 51%|█████ | 51/100 [00:00<00:00, 124.99 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:24: 52%|█████▏ | 52/100 [00:00<00:00, 124.90 it/sec, feas=True, obj=2.99e+4]
INFO - 16:21:24: 53%|█████▎ | 53/100 [00:00<00:00, 124.79 it/sec, feas=True, obj=3.96e+4]
INFO - 16:21:24: 54%|█████▍ | 54/100 [00:00<00:00, 124.73 it/sec, feas=True, obj=4.51e+4]
INFO - 16:21:24: 55%|█████▌ | 55/100 [00:00<00:00, 124.66 it/sec, feas=True, obj=5e+4]
INFO - 16:21:24: 56%|█████▌ | 56/100 [00:00<00:00, 124.58 it/sec, feas=True, obj=5.43e+4]
INFO - 16:21:24: 57%|█████▋ | 57/100 [00:00<00:00, 124.54 it/sec, feas=True, obj=5.78e+4]
INFO - 16:21:24: 58%|█████▊ | 58/100 [00:00<00:00, 124.53 it/sec, feas=True, obj=6.11e+4]
INFO - 16:21:24: 59%|█████▉ | 59/100 [00:00<00:00, 124.50 it/sec, feas=True, obj=6.41e+4]
INFO - 16:21:24: 60%|██████ | 60/100 [00:00<00:00, 124.49 it/sec, feas=True, obj=6.66e+4]
INFO - 16:21:24: 61%|██████ | 61/100 [00:00<00:00, 124.92 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:24: 62%|██████▏ | 62/100 [00:00<00:00, 124.84 it/sec, feas=True, obj=3.18e+4]
INFO - 16:21:24: 63%|██████▎ | 63/100 [00:00<00:00, 124.76 it/sec, feas=True, obj=4.07e+4]
INFO - 16:21:24: 64%|██████▍ | 64/100 [00:00<00:00, 124.69 it/sec, feas=True, obj=4.6e+4]
INFO - 16:21:24: 65%|██████▌ | 65/100 [00:00<00:00, 124.61 it/sec, feas=True, obj=5.09e+4]
INFO - 16:21:24: 66%|██████▌ | 66/100 [00:00<00:00, 124.54 it/sec, feas=True, obj=5.53e+4]
INFO - 16:21:24: 67%|██████▋ | 67/100 [00:00<00:00, 124.50 it/sec, feas=True, obj=5.92e+4]
INFO - 16:21:24: 68%|██████▊ | 68/100 [00:00<00:00, 124.48 it/sec, feas=True, obj=6.25e+4]
INFO - 16:21:24: 69%|██████▉ | 69/100 [00:00<00:00, 124.47 it/sec, feas=True, obj=6.52e+4]
INFO - 16:21:24: 70%|███████ | 70/100 [00:00<00:00, 124.42 it/sec, feas=True, obj=6.71e+4]
INFO - 16:21:24: 71%|███████ | 71/100 [00:00<00:00, 124.81 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:24: 72%|███████▏ | 72/100 [00:00<00:00, 124.75 it/sec, feas=True, obj=3.32e+4]
INFO - 16:21:24: 73%|███████▎ | 73/100 [00:00<00:00, 124.69 it/sec, feas=True, obj=4.15e+4]
INFO - 16:21:24: 74%|███████▍ | 74/100 [00:00<00:00, 124.64 it/sec, feas=True, obj=4.69e+4]
INFO - 16:21:24: 75%|███████▌ | 75/100 [00:00<00:00, 124.56 it/sec, feas=True, obj=5.19e+4]
INFO - 16:21:24: 76%|███████▌ | 76/100 [00:00<00:00, 124.51 it/sec, feas=True, obj=5.63e+4]
INFO - 16:21:24: 77%|███████▋ | 77/100 [00:00<00:00, 124.46 it/sec, feas=True, obj=6.01e+4]
INFO - 16:21:24: 78%|███████▊ | 78/100 [00:00<00:00, 124.42 it/sec, feas=True, obj=6.32e+4]
INFO - 16:21:24: 79%|███████▉ | 79/100 [00:00<00:00, 124.36 it/sec, feas=True, obj=6.55e+4]
INFO - 16:21:24: 80%|████████ | 80/100 [00:00<00:00, 124.34 it/sec, feas=True, obj=6.72e+4]
INFO - 16:21:24: 81%|████████ | 81/100 [00:00<00:00, 124.69 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:24: 82%|████████▏ | 82/100 [00:00<00:00, 124.63 it/sec, feas=True, obj=3.44e+4]
INFO - 16:21:24: 83%|████████▎ | 83/100 [00:00<00:00, 124.58 it/sec, feas=True, obj=4.23e+4]
INFO - 16:21:24: 84%|████████▍ | 84/100 [00:00<00:00, 124.50 it/sec, feas=True, obj=4.78e+4]
INFO - 16:21:25: 85%|████████▌ | 85/100 [00:00<00:00, 124.46 it/sec, feas=True, obj=5.3e+4]
INFO - 16:21:25: 86%|████████▌ | 86/100 [00:00<00:00, 124.40 it/sec, feas=True, obj=5.74e+4]
INFO - 16:21:25: 87%|████████▋ | 87/100 [00:00<00:00, 124.35 it/sec, feas=True, obj=6.09e+4]
INFO - 16:21:25: 88%|████████▊ | 88/100 [00:00<00:00, 124.29 it/sec, feas=True, obj=6.35e+4]
INFO - 16:21:25: 89%|████████▉ | 89/100 [00:00<00:00, 124.25 it/sec, feas=True, obj=6.53e+4]
INFO - 16:21:25: 90%|█████████ | 90/100 [00:00<00:00, 124.20 it/sec, feas=True, obj=6.67e+4]
INFO - 16:21:25: 91%|█████████ | 91/100 [00:00<00:00, 124.49 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:25: 92%|█████████▏| 92/100 [00:00<00:00, 124.79 it/sec, feas=True, obj=6.89e+4]
INFO - 16:21:25: 93%|█████████▎| 93/100 [00:00<00:00, 125.09 it/sec, feas=True, obj=4.03e+4]
INFO - 16:21:25: 94%|█████████▍| 94/100 [00:00<00:00, 125.37 it/sec, feas=True, obj=2.71e+4]
INFO - 16:21:25: 95%|█████████▌| 95/100 [00:00<00:00, 125.67 it/sec, feas=True, obj=2.07e+4]
INFO - 16:21:25: 96%|█████████▌| 96/100 [00:00<00:00, 125.96 it/sec, feas=True, obj=1.78e+4]
INFO - 16:21:25: 97%|█████████▋| 97/100 [00:00<00:00, 126.22 it/sec, feas=True, obj=1.68e+4]
INFO - 16:21:25: 98%|█████████▊| 98/100 [00:00<00:00, 126.50 it/sec, feas=True, obj=1.69e+4]
INFO - 16:21:25: 99%|█████████▉| 99/100 [00:00<00:00, 126.77 it/sec, feas=True, obj=1.76e+4]
INFO - 16:21:25: 100%|██████████| 100/100 [00:00<00:00, 127.00 it/sec, feas=True, obj=1.87e+4]
INFO - 16:21:25: Optimization result:
INFO - 16:21:25: Optimizer info:
INFO - 16:21:25: Status: None
INFO - 16:21:25: Message: None
INFO - 16:21:25: Solution:
INFO - 16:21:25: Objective: 4136.820826715568
INFO - 16:21:25: Design space:
INFO - 16:21:25: +------------------+-------------+-------------------+-------------+-------+
INFO - 16:21:25: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:21:25: +------------------+-------------+-------------------+-------------+-------+
INFO - 16:21:25: | penalty_level | 0 | 4.444444444444445 | 40 | float |
INFO - 16:21:25: | l2_penalty_ratio | 0 | 0 | 1 | float |
INFO - 16:21:25: +------------------+-------------+-------------------+-------------+-------+
INFO - 16:21:25: *** End DOEScenario execution ***
(np.float64(4.444444444444445), np.float64(0.0), np.float64(4136.820826715568))
Get the history#
calibration.dataset
Visualize the results#
penalty_level = calibration.get_history("penalty_level").flatten()
l2_penalty_ratio = calibration.get_history("l2_penalty_ratio").flatten()
criterion = calibration.get_history("criterion").flatten()
learning = calibration.get_history("learning").flatten()
triang = Triangulation(penalty_level, l2_penalty_ratio)
fig = plt.figure()
ax = fig.add_subplot(1, 2, 1)
ax.tricontourf(triang, criterion, cmap="Purples")
ax.scatter(x_opt["penalty_level"][0], x_opt["l2_penalty_ratio"][0])
ax.set_xlabel("penalty level")
ax.set_ylabel("l2 penalty ratio")
ax.set_title("Test measure")
ax = fig.add_subplot(1, 2, 2)
ax.tricontourf(triang, learning, cmap="Purples")
ax.scatter(x_opt["penalty_level"][0], x_opt["l2_penalty_ratio"][0])
ax.set_xlabel("penalty level")
ax.set_ylabel("l2 penalty ratio")
ax.set_title("Learning measure")
plt.show()

Add an optimization stage#
calibration_space = DesignSpace()
calibration_space.add_variable("penalty_level", 1, "float", 0.0, 40.0, 0.0)
calibration_space.add_variable("l2_penalty_ratio", 1, "float", 0.0, 1.0, 0.5)
calibration = MLAlgoCalibration(
"PolynomialRegressor",
dataset,
["penalty_level", "l2_penalty_ratio"],
calibration_space,
MSEMeasure,
measure_evaluation_method_name=measure_evaluation_method_name,
measure_options=measure_options,
degree=10,
)
calibration.execute("NLOPT_COBYLA", max_iter=100)
x_opt2 = calibration.optimal_parameters
f_opt2 = calibration.optimal_criterion
fig = plt.figure()
ax = fig.add_subplot(1, 2, 1)
ax.tricontourf(triang, criterion, cmap="Purples")
ax.scatter(x_opt["penalty_level"][0], x_opt["l2_penalty_ratio"][0])
ax.scatter(x_opt2["penalty_level"][0], x_opt2["l2_penalty_ratio"][0], color="red")
ax.set_xlabel("penalty level")
ax.set_ylabel("l2 penalty ratio")
ax.set_title("Test measure")
ax = fig.add_subplot(1, 2, 2)
ax.tricontourf(triang, learning, cmap="Purples")
ax.scatter(x_opt["penalty_level"][0], x_opt["l2_penalty_ratio"][0])
ax.scatter(x_opt2["penalty_level"][0], x_opt2["l2_penalty_ratio"][0], color="red")
ax.set_xlabel("penalty level")
ax.set_ylabel("l2 penalty ratio")
ax.set_title("Learning measure")
plt.show()
n_iterations = len(calibration.scenario.disciplines[0].cache)
print(f"MSE with DOE: {f_opt} (100 evaluations)")
print(f"MSE with OPT: {f_opt2} ({n_iterations} evaluations)")
print(f"MSE reduction:{round((f_opt2 - f_opt) / f_opt * 100)}%")

INFO - 16:21:25: *** Start MDOScenario execution ***
INFO - 16:21:25: MDOScenario
INFO - 16:21:25: Disciplines: MLAlgoAssessor
INFO - 16:21:25: MDO formulation: DisciplinaryOpt
INFO - 16:21:25: Optimization problem:
INFO - 16:21:25: minimize criterion(penalty_level, l2_penalty_ratio)
INFO - 16:21:25: with respect to l2_penalty_ratio, penalty_level
INFO - 16:21:25: over the design space:
INFO - 16:21:25: +------------------+-------------+-------+-------------+-------+
INFO - 16:21:25: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:21:25: +------------------+-------------+-------+-------------+-------+
INFO - 16:21:25: | penalty_level | 0 | 0 | 40 | float |
INFO - 16:21:25: | l2_penalty_ratio | 0 | 0.5 | 1 | float |
INFO - 16:21:25: +------------------+-------------+-------+-------------+-------+
INFO - 16:21:25: Solving optimization problem with algorithm NLOPT_COBYLA:
INFO - 16:21:25: 1%| | 1/100 [00:00<00:00, 109.06 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:25: 2%|▏ | 2/100 [00:00<00:00, 111.56 it/sec, feas=True, obj=4.06e+4]
INFO - 16:21:25: 3%|▎ | 3/100 [00:00<00:00, 113.30 it/sec, feas=True, obj=4.28e+4]
INFO - 16:21:25: 4%|▍ | 4/100 [00:00<00:00, 114.27 it/sec, feas=True, obj=5.16e+4]
INFO - 16:21:25: 5%|▌ | 5/100 [00:00<00:00, 114.58 it/sec, feas=True, obj=4.66e+4]
INFO - 16:21:25: 6%|▌ | 6/100 [00:00<00:00, 114.70 it/sec, feas=True, obj=3.63e+4]
INFO - 16:21:25: 7%|▋ | 7/100 [00:00<00:00, 114.64 it/sec, feas=True, obj=3.03e+4]
INFO - 16:21:25: 8%|▊ | 8/100 [00:00<00:00, 114.75 it/sec, feas=True, obj=2.03e+4]
INFO - 16:21:25: 9%|▉ | 9/100 [00:00<00:00, 114.67 it/sec, feas=True, obj=2.75e+3]
INFO - 16:21:25: 10%|█ | 10/100 [00:00<00:00, 115.82 it/sec, feas=True, obj=493]
INFO - 16:21:25: 11%|█ | 11/100 [00:00<00:00, 118.18 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:25: 12%|█▏ | 12/100 [00:00<00:00, 120.40 it/sec, feas=True, obj=1.63e+5]
INFO - 16:21:25: 13%|█▎ | 13/100 [00:00<00:00, 119.90 it/sec, feas=True, obj=5.23e+3]
INFO - 16:21:25: 14%|█▍ | 14/100 [00:00<00:00, 120.48 it/sec, feas=True, obj=493]
INFO - 16:21:25: 15%|█▌ | 15/100 [00:00<00:00, 120.93 it/sec, feas=True, obj=493]
INFO - 16:21:25: 16%|█▌ | 16/100 [00:00<00:00, 121.31 it/sec, feas=True, obj=493]
INFO - 16:21:25: Optimization result:
INFO - 16:21:25: Optimizer info:
INFO - 16:21:25: Status: None
INFO - 16:21:25: Message: Successive iterates of the objective function are closer than ftol_rel or ftol_abs. GEMSEO stopped the driver.
INFO - 16:21:25: Solution:
INFO - 16:21:25: Objective: 493.1818200496802
INFO - 16:21:25: Design space:
INFO - 16:21:25: +------------------+-------------+-----------------------+-------------+-------+
INFO - 16:21:25: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:21:25: +------------------+-------------+-----------------------+-------------+-------+
INFO - 16:21:25: | penalty_level | 0 | 2.289834988289385e-15 | 40 | float |
INFO - 16:21:25: | l2_penalty_ratio | 0 | 0.5765298371174132 | 1 | float |
INFO - 16:21:25: +------------------+-------------+-----------------------+-------------+-------+
INFO - 16:21:25: *** End MDOScenario execution ***
MSE with DOE: 4136.820826715568 (100 evaluations)
MSE with OPT: 493.1818200496802 (1 evaluations)
MSE reduction:-88%
Total running time of the script: (0 minutes 1.517 seconds)