Source code for hyperts.framework.meta_learning.meta_learner

# -*- coding:utf-8 -*-

from lightgbm import LGBMRegressor
from hypernets.utils import logging
from hypernets.core.meta_learner import MetaLearner as BaseMetaLearner

logger = logging.get_logger(__name__)


[docs]class MetaLearner(BaseMetaLearner): def __init__(self, history, dataset_id, trial_store, **kwargs): super(MetaLearner, self).__init__(history, dataset_id, trial_store)
[docs] def fit(self, space_signature): features = self.extract_features_and_labels(space_signature) x = [] y = [] for feature, label in features: if label != 0: x.append(feature) y.append(label) store_history = self.store_history.get(space_signature) if self.trial_store is not None and store_history is None: trials = self.trial_store.get_all(self.dataset_id, space_signature) store_x = [] store_y = [] for t in trials: store_x.append(t.vectors) store_y.append(t.reward) store_history = (store_x, store_y) self.store_history[space_signature] = store_history if store_history is None: store_history = ([], []) store_x, store_y = store_history x = x + store_x y = y + store_y if len(x) >= 2: regressor = LGBMRegressor() regressor.fit(x, y) self.regressors[space_signature] = regressor
[docs] def extract_features_and_labels(self, signature): features = [(t.space_sample.vectors, t.reward) for t in self.history.trials if t.space_sample.signature == signature] return features