Machine learning algorithm selection example#

In this example we use the MLAlgoSelection class to perform a grid search over different algorithms and hyperparameter values.

from __future__ import annotations

import matplotlib.pyplot as plt
from numpy import linspace
from numpy import sort
from numpy.random import default_rng

from gemseo.algos.design_space import DesignSpace
from gemseo.datasets.io_dataset import IODataset
from gemseo.mlearning.core.selection import MLAlgoSelection
from gemseo.mlearning.regression.quality.mse_measure import MSEMeasure

rng = default_rng(54321)

Build dataset#

The data are generated from the function \(f(x)=x^2\). The input data \(\{x_i\}_{i=1,\cdots,20}\) are chosen at random over the interval \([0,1]\). The output value \(y_i = f(x_i) + \varepsilon_i\) corresponds to the evaluation of \(f\) at \(x_i\) corrupted by a Gaussian noise \(\varepsilon_i\) with zero mean and standard deviation \(\sigma=0.05\).

n = 20
x = sort(rng.random(n))
y = x**2 + rng.normal(0, 0.05, n)

dataset = IODataset()
dataset.add_variable("x", x[:, None], dataset.INPUT_GROUP)
dataset.add_variable("y", y[:, None], dataset.OUTPUT_GROUP)

Build selector#

We consider three regression models, with different possible hyperparameters. A mean squared error quality measure is used with a k-folds cross validation scheme (5 folds).

selector = MLAlgoSelection(
    dataset, MSEMeasure, measure_evaluation_method_name="KFOLDS", n_folds=5
)
selector.add_candidate(
    "LinearRegressor",
    penalty_level=[0, 0.1, 1, 10, 20],
    l2_penalty_ratio=[0, 0.5, 1],
    fit_intercept=[True],
)
selector.add_candidate(
    "PolynomialRegressor",
    degree=[2, 3, 4, 10],
    penalty_level=[0, 0.1, 1, 10],
    l2_penalty_ratio=[1],
    fit_intercept=[True, False],
)
rbf_space = DesignSpace()
rbf_space.add_variable("epsilon", 1, "float", 0.01, 0.1, 0.05)
selector.add_candidate(
    "RBFRegressor",
    calib_space=rbf_space,
    calib_algo={"algo_name": "PYDOE_FULLFACT", "n_samples": 16},
    smooth=[0, 0.01, 0.1, 1, 10, 100],
)
INFO - 16:21:26: *** Start DOEScenario execution ***
INFO - 16:21:26: DOEScenario
INFO - 16:21:26:    Disciplines: MLAlgoAssessor
INFO - 16:21:26:    MDO formulation: DisciplinaryOpt
INFO - 16:21:26: Optimization problem:
INFO - 16:21:26:    minimize criterion(epsilon)
INFO - 16:21:26:    with respect to epsilon
INFO - 16:21:26:    over the design space:
INFO - 16:21:26:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:       | Name    | Lower bound | Value | Upper bound | Type  |
INFO - 16:21:26:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:       | epsilon |     0.01    |  0.05 |     0.1     | float |
INFO - 16:21:26:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:26: Solving optimization problem with algorithm PYDOE_FULLFACT:
INFO - 16:21:26:      6%|▋         | 1/16 [00:00<00:00, 67.69 it/sec, feas=True, obj=0.00433]
INFO - 16:21:26:     12%|█▎        | 2/16 [00:00<00:00, 72.43 it/sec, feas=True, obj=0.00767]
INFO - 16:21:26:     19%|█▉        | 3/16 [00:00<00:00, 73.50 it/sec, feas=True, obj=0.0154]
INFO - 16:21:26:     25%|██▌       | 4/16 [00:00<00:00, 74.61 it/sec, feas=True, obj=0.032]
INFO - 16:21:26:     31%|███▏      | 5/16 [00:00<00:00, 75.33 it/sec, feas=True, obj=0.0645]
INFO - 16:21:26:     38%|███▊      | 6/16 [00:00<00:00, 75.77 it/sec, feas=True, obj=0.123]
INFO - 16:21:26:     44%|████▍     | 7/16 [00:00<00:00, 76.15 it/sec, feas=True, obj=0.223]
INFO - 16:21:26:     50%|█████     | 8/16 [00:00<00:00, 76.44 it/sec, feas=True, obj=0.382]
INFO - 16:21:26:     56%|█████▋    | 9/16 [00:00<00:00, 76.61 it/sec, feas=True, obj=0.62]
INFO - 16:21:26:     62%|██████▎   | 10/16 [00:00<00:00, 76.78 it/sec, feas=True, obj=0.962]
INFO - 16:21:26:     69%|██████▉   | 11/16 [00:00<00:00, 76.96 it/sec, feas=True, obj=1.43]
INFO - 16:21:26:     75%|███████▌  | 12/16 [00:00<00:00, 77.15 it/sec, feas=True, obj=2.05]
INFO - 16:21:26:     81%|████████▏ | 13/16 [00:00<00:00, 77.29 it/sec, feas=True, obj=2.85]
INFO - 16:21:26:     88%|████████▊ | 14/16 [00:00<00:00, 77.40 it/sec, feas=True, obj=3.84]
INFO - 16:21:26:     94%|█████████▍| 15/16 [00:00<00:00, 77.47 it/sec, feas=True, obj=5.05]
INFO - 16:21:26:    100%|██████████| 16/16 [00:00<00:00, 77.54 it/sec, feas=True, obj=6.51]
INFO - 16:21:26: Optimization result:
INFO - 16:21:26:    Optimizer info:
INFO - 16:21:26:       Status: None
INFO - 16:21:26:       Message: None
INFO - 16:21:26:    Solution:
INFO - 16:21:26:       Objective: 0.004329869274089288
INFO - 16:21:26:       Design space:
INFO - 16:21:26:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:          | Name    | Lower bound | Value | Upper bound | Type  |
INFO - 16:21:26:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:          | epsilon |     0.01    |  0.01 |     0.1     | float |
INFO - 16:21:26:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:26: *** End DOEScenario execution ***
INFO - 16:21:26: *** Start DOEScenario execution ***
INFO - 16:21:26: DOEScenario
INFO - 16:21:26:    Disciplines: MLAlgoAssessor
INFO - 16:21:26:    MDO formulation: DisciplinaryOpt
INFO - 16:21:26: Optimization problem:
INFO - 16:21:26:    minimize criterion(epsilon)
INFO - 16:21:26:    with respect to epsilon
INFO - 16:21:26:    over the design space:
INFO - 16:21:26:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:       | Name    | Lower bound | Value | Upper bound | Type  |
INFO - 16:21:26:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:       | epsilon |     0.01    |  0.01 |     0.1     | float |
INFO - 16:21:26:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:26: Solving optimization problem with algorithm PYDOE_FULLFACT:
INFO - 16:21:26:      6%|▋         | 1/16 [00:00<00:00, 68.56 it/sec, feas=True, obj=0.00392]
INFO - 16:21:26:     12%|█▎        | 2/16 [00:00<00:00, 73.17 it/sec, feas=True, obj=0.00489]
INFO - 16:21:26:     19%|█▉        | 3/16 [00:00<00:00, 75.15 it/sec, feas=True, obj=0.0056]
INFO - 16:21:26:     25%|██▌       | 4/16 [00:00<00:00, 76.17 it/sec, feas=True, obj=0.00582]
INFO - 16:21:26:     31%|███▏      | 5/16 [00:00<00:00, 76.74 it/sec, feas=True, obj=0.00558]
INFO - 16:21:26:     38%|███▊      | 6/16 [00:00<00:00, 76.96 it/sec, feas=True, obj=0.00512]
INFO - 16:21:26:     44%|████▍     | 7/16 [00:00<00:00, 77.22 it/sec, feas=True, obj=0.00454]
INFO - 16:21:26:     50%|█████     | 8/16 [00:00<00:00, 77.49 it/sec, feas=True, obj=0.00395]
INFO - 16:21:26:     56%|█████▋    | 9/16 [00:00<00:00, 77.68 it/sec, feas=True, obj=0.00343]
INFO - 16:21:26:     62%|██████▎   | 10/16 [00:00<00:00, 77.84 it/sec, feas=True, obj=0.00304]
INFO - 16:21:26:     69%|██████▉   | 11/16 [00:00<00:00, 77.78 it/sec, feas=True, obj=0.00277]
INFO - 16:21:26:     75%|███████▌  | 12/16 [00:00<00:00, 77.85 it/sec, feas=True, obj=0.00258]
INFO - 16:21:26:     81%|████████▏ | 13/16 [00:00<00:00, 77.95 it/sec, feas=True, obj=0.00246]
INFO - 16:21:26:     88%|████████▊ | 14/16 [00:00<00:00, 77.99 it/sec, feas=True, obj=0.00237]
INFO - 16:21:26:     94%|█████████▍| 15/16 [00:00<00:00, 78.08 it/sec, feas=True, obj=0.00231]
INFO - 16:21:26:    100%|██████████| 16/16 [00:00<00:00, 78.08 it/sec, feas=True, obj=0.00226]
INFO - 16:21:26: Optimization result:
INFO - 16:21:26:    Optimizer info:
INFO - 16:21:26:       Status: None
INFO - 16:21:26:       Message: None
INFO - 16:21:26:    Solution:
INFO - 16:21:26:       Objective: 0.0022624675787187524
INFO - 16:21:26:       Design space:
INFO - 16:21:26:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:          | Name    | Lower bound | Value | Upper bound | Type  |
INFO - 16:21:26:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:          | epsilon |     0.01    |  0.1  |     0.1     | float |
INFO - 16:21:26:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:26: *** End DOEScenario execution ***
INFO - 16:21:26: *** Start DOEScenario execution ***
INFO - 16:21:26: DOEScenario
INFO - 16:21:26:    Disciplines: MLAlgoAssessor
INFO - 16:21:26:    MDO formulation: DisciplinaryOpt
INFO - 16:21:26: Optimization problem:
INFO - 16:21:26:    minimize criterion(epsilon)
INFO - 16:21:26:    with respect to epsilon
INFO - 16:21:26:    over the design space:
INFO - 16:21:26:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:       | Name    | Lower bound | Value | Upper bound | Type  |
INFO - 16:21:26:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:       | epsilon |     0.01    |  0.1  |     0.1     | float |
INFO - 16:21:26:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:26: Solving optimization problem with algorithm PYDOE_FULLFACT:
INFO - 16:21:26:      6%|▋         | 1/16 [00:00<00:00, 69.51 it/sec, feas=True, obj=0.00305]
INFO - 16:21:26:     12%|█▎        | 2/16 [00:00<00:00, 73.52 it/sec, feas=True, obj=0.00307]
INFO - 16:21:26:     19%|█▉        | 3/16 [00:00<00:00, 74.55 it/sec, feas=True, obj=0.00297]
INFO - 16:21:26:     25%|██▌       | 4/16 [00:00<00:00, 75.53 it/sec, feas=True, obj=0.0028]
INFO - 16:21:26:     31%|███▏      | 5/16 [00:00<00:00, 76.14 it/sec, feas=True, obj=0.00263]
INFO - 16:21:26:     38%|███▊      | 6/16 [00:00<00:00, 76.45 it/sec, feas=True, obj=0.00251]
INFO - 16:21:26:     44%|████▍     | 7/16 [00:00<00:00, 76.78 it/sec, feas=True, obj=0.00242]
INFO - 16:21:26:     50%|█████     | 8/16 [00:00<00:00, 77.07 it/sec, feas=True, obj=0.00237]
INFO - 16:21:26:     56%|█████▋    | 9/16 [00:00<00:00, 77.26 it/sec, feas=True, obj=0.00233]
INFO - 16:21:26:     62%|██████▎   | 10/16 [00:00<00:00, 77.44 it/sec, feas=True, obj=0.0023]
INFO - 16:21:26:     69%|██████▉   | 11/16 [00:00<00:00, 77.58 it/sec, feas=True, obj=0.00228]
INFO - 16:21:26:     75%|███████▌  | 12/16 [00:00<00:00, 77.65 it/sec, feas=True, obj=0.00226]
INFO - 16:21:26:     81%|████████▏ | 13/16 [00:00<00:00, 77.74 it/sec, feas=True, obj=0.00224]
INFO - 16:21:26:     88%|████████▊ | 14/16 [00:00<00:00, 77.36 it/sec, feas=True, obj=0.00223]
INFO - 16:21:26:     94%|█████████▍| 15/16 [00:00<00:00, 77.38 it/sec, feas=True, obj=0.00222]
INFO - 16:21:26:    100%|██████████| 16/16 [00:00<00:00, 77.41 it/sec, feas=True, obj=0.00221]
INFO - 16:21:26: Optimization result:
INFO - 16:21:26:    Optimizer info:
INFO - 16:21:26:       Status: None
INFO - 16:21:26:       Message: None
INFO - 16:21:26:    Solution:
INFO - 16:21:26:       Objective: 0.002207251533907032
INFO - 16:21:26:       Design space:
INFO - 16:21:26:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:          | Name    | Lower bound | Value | Upper bound | Type  |
INFO - 16:21:26:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:          | epsilon |     0.01    |  0.1  |     0.1     | float |
INFO - 16:21:26:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:26: *** End DOEScenario execution ***
INFO - 16:21:26: *** Start DOEScenario execution ***
INFO - 16:21:26: DOEScenario
INFO - 16:21:26:    Disciplines: MLAlgoAssessor
INFO - 16:21:26:    MDO formulation: DisciplinaryOpt
INFO - 16:21:26: Optimization problem:
INFO - 16:21:26:    minimize criterion(epsilon)
INFO - 16:21:26:    with respect to epsilon
INFO - 16:21:26:    over the design space:
INFO - 16:21:26:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:       | Name    | Lower bound | Value | Upper bound | Type  |
INFO - 16:21:26:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:26:       | epsilon |     0.01    |  0.1  |     0.1     | float |
INFO - 16:21:26:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:26: Solving optimization problem with algorithm PYDOE_FULLFACT:
INFO - 16:21:27:      6%|▋         | 1/16 [00:00<00:00, 68.02 it/sec, feas=True, obj=0.00254]
INFO - 16:21:27:     12%|█▎        | 2/16 [00:00<00:00, 72.81 it/sec, feas=True, obj=0.0025]
INFO - 16:21:27:     19%|█▉        | 3/16 [00:00<00:00, 74.81 it/sec, feas=True, obj=0.00248]
INFO - 16:21:27:     25%|██▌       | 4/16 [00:00<00:00, 75.76 it/sec, feas=True, obj=0.00248]
INFO - 16:21:27:     31%|███▏      | 5/16 [00:00<00:00, 76.39 it/sec, feas=True, obj=0.00248]
INFO - 16:21:27:     38%|███▊      | 6/16 [00:00<00:00, 76.85 it/sec, feas=True, obj=0.0025]
INFO - 16:21:27:     44%|████▍     | 7/16 [00:00<00:00, 77.20 it/sec, feas=True, obj=0.00253]
INFO - 16:21:27:     50%|█████     | 8/16 [00:00<00:00, 77.18 it/sec, feas=True, obj=0.00256]
INFO - 16:21:27:     56%|█████▋    | 9/16 [00:00<00:00, 77.33 it/sec, feas=True, obj=0.00259]
INFO - 16:21:27:     62%|██████▎   | 10/16 [00:00<00:00, 77.46 it/sec, feas=True, obj=0.00263]
INFO - 16:21:27:     69%|██████▉   | 11/16 [00:00<00:00, 77.58 it/sec, feas=True, obj=0.00267]
INFO - 16:21:27:     75%|███████▌  | 12/16 [00:00<00:00, 77.67 it/sec, feas=True, obj=0.00272]
INFO - 16:21:27:     81%|████████▏ | 13/16 [00:00<00:00, 77.80 it/sec, feas=True, obj=0.00276]
INFO - 16:21:27:     88%|████████▊ | 14/16 [00:00<00:00, 77.82 it/sec, feas=True, obj=0.00281]
INFO - 16:21:27:     94%|█████████▍| 15/16 [00:00<00:00, 77.91 it/sec, feas=True, obj=0.00286]
INFO - 16:21:27:    100%|██████████| 16/16 [00:00<00:00, 77.88 it/sec, feas=True, obj=0.00291]
INFO - 16:21:27: Optimization result:
INFO - 16:21:27:    Optimizer info:
INFO - 16:21:27:       Status: None
INFO - 16:21:27:       Message: None
INFO - 16:21:27:    Solution:
INFO - 16:21:27:       Objective: 0.002476990894836162
INFO - 16:21:27:       Design space:
INFO - 16:21:27:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:27:          | Name    | Lower bound | Value | Upper bound | Type  |
INFO - 16:21:27:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:27:          | epsilon |     0.01    | 0.028 |     0.1     | float |
INFO - 16:21:27:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:27: *** End DOEScenario execution ***
INFO - 16:21:27: *** Start DOEScenario execution ***
INFO - 16:21:27: DOEScenario
INFO - 16:21:27:    Disciplines: MLAlgoAssessor
INFO - 16:21:27:    MDO formulation: DisciplinaryOpt
INFO - 16:21:27: Optimization problem:
INFO - 16:21:27:    minimize criterion(epsilon)
INFO - 16:21:27:    with respect to epsilon
INFO - 16:21:27:    over the design space:
INFO - 16:21:27:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:27:       | Name    | Lower bound | Value | Upper bound | Type  |
INFO - 16:21:27:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:27:       | epsilon |     0.01    | 0.028 |     0.1     | float |
INFO - 16:21:27:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:27: Solving optimization problem with algorithm PYDOE_FULLFACT:
INFO - 16:21:27:      6%|▋         | 1/16 [00:00<00:00, 69.25 it/sec, feas=True, obj=0.00292]
INFO - 16:21:27:     12%|█▎        | 2/16 [00:00<00:00, 73.56 it/sec, feas=True, obj=0.00326]
INFO - 16:21:27:     19%|█▉        | 3/16 [00:00<00:00, 74.75 it/sec, feas=True, obj=0.00361]
INFO - 16:21:27:     25%|██▌       | 4/16 [00:00<00:00, 75.78 it/sec, feas=True, obj=0.00398]
INFO - 16:21:27:     31%|███▏      | 5/16 [00:00<00:00, 76.51 it/sec, feas=True, obj=0.00435]
INFO - 16:21:27:     38%|███▊      | 6/16 [00:00<00:00, 76.82 it/sec, feas=True, obj=0.00474]
INFO - 16:21:27:     44%|████▍     | 7/16 [00:00<00:00, 77.15 it/sec, feas=True, obj=0.00513]
INFO - 16:21:27:     50%|█████     | 8/16 [00:00<00:00, 77.36 it/sec, feas=True, obj=0.00553]
INFO - 16:21:27:     56%|█████▋    | 9/16 [00:00<00:00, 77.48 it/sec, feas=True, obj=0.00594]
INFO - 16:21:27:     62%|██████▎   | 10/16 [00:00<00:00, 77.67 it/sec, feas=True, obj=0.00636]
INFO - 16:21:27:     69%|██████▉   | 11/16 [00:00<00:00, 77.85 it/sec, feas=True, obj=0.00679]
INFO - 16:21:27:     75%|███████▌  | 12/16 [00:00<00:00, 77.94 it/sec, feas=True, obj=0.00723]
INFO - 16:21:27:     81%|████████▏ | 13/16 [00:00<00:00, 78.02 it/sec, feas=True, obj=0.00767]
INFO - 16:21:27:     88%|████████▊ | 14/16 [00:00<00:00, 78.13 it/sec, feas=True, obj=0.00813]
INFO - 16:21:27:     94%|█████████▍| 15/16 [00:00<00:00, 78.15 it/sec, feas=True, obj=0.00859]
INFO - 16:21:27:    100%|██████████| 16/16 [00:00<00:00, 78.18 it/sec, feas=True, obj=0.00906]
INFO - 16:21:27: Optimization result:
INFO - 16:21:27:    Optimizer info:
INFO - 16:21:27:       Status: None
INFO - 16:21:27:       Message: None
INFO - 16:21:27:    Solution:
INFO - 16:21:27:       Objective: 0.002919064447634629
INFO - 16:21:27:       Design space:
INFO - 16:21:27:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:27:          | Name    | Lower bound | Value | Upper bound | Type  |
INFO - 16:21:27:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:27:          | epsilon |     0.01    |  0.01 |     0.1     | float |
INFO - 16:21:27:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:27: *** End DOEScenario execution ***
INFO - 16:21:27: *** Start DOEScenario execution ***
INFO - 16:21:27: DOEScenario
INFO - 16:21:27:    Disciplines: MLAlgoAssessor
INFO - 16:21:27:    MDO formulation: DisciplinaryOpt
INFO - 16:21:27: Optimization problem:
INFO - 16:21:27:    minimize criterion(epsilon)
INFO - 16:21:27:    with respect to epsilon
INFO - 16:21:27:    over the design space:
INFO - 16:21:27:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:27:       | Name    | Lower bound | Value | Upper bound | Type  |
INFO - 16:21:27:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:27:       | epsilon |     0.01    |  0.01 |     0.1     | float |
INFO - 16:21:27:       +---------+-------------+-------+-------------+-------+
INFO - 16:21:27: Solving optimization problem with algorithm PYDOE_FULLFACT:
INFO - 16:21:27:      6%|▋         | 1/16 [00:00<00:00, 69.47 it/sec, feas=True, obj=0.00846]
INFO - 16:21:27:     12%|█▎        | 2/16 [00:00<00:00, 73.53 it/sec, feas=True, obj=0.0119]
INFO - 16:21:27:     19%|█▉        | 3/16 [00:00<00:00, 75.27 it/sec, feas=True, obj=0.0148]
INFO - 16:21:27:     25%|██▌       | 4/16 [00:00<00:00, 76.24 it/sec, feas=True, obj=0.0172]
INFO - 16:21:27:     31%|███▏      | 5/16 [00:00<00:00, 76.86 it/sec, feas=True, obj=0.019]
INFO - 16:21:27:     38%|███▊      | 6/16 [00:00<00:00, 77.37 it/sec, feas=True, obj=0.0213]
INFO - 16:21:27:     44%|████▍     | 7/16 [00:00<00:00, 77.36 it/sec, feas=True, obj=0.0921]
INFO - 16:21:27:     50%|█████     | 8/16 [00:00<00:00, 77.54 it/sec, feas=True, obj=11.9]
INFO - 16:21:27:     56%|█████▋    | 9/16 [00:00<00:00, 77.75 it/sec, feas=True, obj=0.0761]
INFO - 16:21:27:     62%|██████▎   | 10/16 [00:00<00:00, 77.19 it/sec, feas=True, obj=0.0533]
INFO - 16:21:27:     69%|██████▉   | 11/16 [00:00<00:00, 77.29 it/sec, feas=True, obj=0.0483]
INFO - 16:21:27:     75%|███████▌  | 12/16 [00:00<00:00, 77.36 it/sec, feas=True, obj=0.0466]
INFO - 16:21:27:     81%|████████▏ | 13/16 [00:00<00:00, 77.46 it/sec, feas=True, obj=0.0461]
INFO - 16:21:27:     88%|████████▊ | 14/16 [00:00<00:00, 77.52 it/sec, feas=True, obj=0.0461]
INFO - 16:21:27:     94%|█████████▍| 15/16 [00:00<00:00, 77.61 it/sec, feas=True, obj=0.0464]
INFO - 16:21:27:    100%|██████████| 16/16 [00:00<00:00, 77.55 it/sec, feas=True, obj=0.0468]
INFO - 16:21:27: Optimization result:
INFO - 16:21:27:    Optimizer info:
INFO - 16:21:27:       Status: None
INFO - 16:21:27:       Message: None
INFO - 16:21:27:    Solution:
INFO - 16:21:27:       Objective: 0.00846290490101175
INFO - 16:21:27:       Design space:
INFO - 16:21:27:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:27:          | Name    | Lower bound | Value | Upper bound | Type  |
INFO - 16:21:27:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:27:          | epsilon |     0.01    |  0.01 |     0.1     | float |
INFO - 16:21:27:          +---------+-------------+-------+-------------+-------+
INFO - 16:21:27: *** End DOEScenario execution ***

Select best candidate#

best_algo = selector.select()
best_algo
PolynomialRegressor(degree=4, fit_intercept=True, input_names=(), l2_penalty_ratio=1.0, output_names=(), parameters={}, penalty_level=0.0, random_state=0, transformer={})
  • based on the scikit-learn library
  • built from 20 learning samples


Plot results#

Plot the best models from each candidate algorithm

finex = linspace(0, 1, 1000)
for candidate in selector.candidates:
    algo = candidate[0]
    print(algo)
    predy = algo.predict(finex[:, None])[:, 0]
    plt.plot(finex, predy, label=algo.SHORT_ALGO_NAME)
plt.scatter(x, y, label="Training points")
plt.legend()
plt.show()
plot selection
LinearRegressor(fit_intercept=True, input_names=(), l2_penalty_ratio=0.0, output_names=(), parameters={}, penalty_level=0.0, random_state=0, transformer={})
   based on the scikit-learn library
   built from 20 learning samples
PolynomialRegressor(degree=4, fit_intercept=True, input_names=(), l2_penalty_ratio=1.0, output_names=(), parameters={}, penalty_level=0.0, random_state=0, transformer={})
   based on the scikit-learn library
   built from 20 learning samples
RBFRegressor(der_function=None, epsilon=0.1, function=multiquadric, input_names=(), norm=euclidean, output_names=(), parameters={}, smooth=0.1, transformer={})
   based on the SciPy library
   built from 20 learning samples

Total running time of the script: (0 minutes 2.022 seconds)

Gallery generated by Sphinx-Gallery