Expert priors for hyperparameters

import logging
import time

import neps


def evaluate_pipeline(some_float, some_integer, some_cat):
    start = time.time()
    if some_cat != "a":
        y = some_float + some_integer
    else:
        y = -some_float - some_integer
    end = time.time()
    return {
        "objective_to_minimize": y,
        "info_dict": {
            "test_score": y,
            "train_time": end - start,
        },
    }


# neps uses the default values and a confidence in this default value to construct a prior
# that speeds up the search
class HPOSpace(neps.PipelineSpace):
    some_float = neps.Float(
        lower=1,
        upper=1000,
        log=True,
        prior=900,
        prior_confidence="medium",
    )
    some_integer = neps.Integer(
        lower=0,
        upper=50,
        prior=35,
        prior_confidence="low",
    )
    some_cat = neps.Categorical(
        choices=("a", "b", "c"),
        prior=0,
        prior_confidence="high",
    )


logging.basicConfig(level=logging.INFO)
neps.run(
    evaluate_pipeline=evaluate_pipeline,
    pipeline_space=HPOSpace(),
    root_directory="results/user_priors_example",
    evaluations_to_spend=15,
)