import pandas as pd
from skopt import Optimizer
from .tuner import Tuner
[docs]class SKOptTuner(Tuner):
"""Bayesian Optimizer"""
[docs] def __init__(self, space, random_state=0):
""" Init SkOptTuner
Arguments:
space (dict): search space for hyperparameters
random_state (int): random state
Returns:
SKoptTuner: self
"""
self.opt = Optimizer(space, "ET", acq_optimizer="sampling", random_state=random_state)
[docs] def add(self, parameters, score):
""" Add score to sample
Arguments:
parameters (dict): hyperparameters
score (float): associated score
Returns:
None
"""
# skip adding nan scores
if pd.isnull(score):
return
self.opt.tell(list(parameters), score)
[docs] def propose(self):
""" Returns hyperparameters based off search space and samples
Returns:
dict: proposed hyperparameters
"""
return self.opt.ask()