From 3d0a3d26a23bea636f3d078f0ca3f5791e11cf1a Mon Sep 17 00:00:00 2001 From: Kevin Chen <74878789+int-chaos@users.noreply.github.com> Date: Mon, 23 Aug 2021 16:26:46 -0400 Subject: [PATCH] Forecast (#162) * added 'forecast' task with estimators ['fbprophet', 'arima', 'sarimax'] * update setup.py * add TimeSeriesSplit to 'regression' and 'classification' task * add 'time' split_type for 'classification' and 'regression' task Signed-off-by: Kevin Chen * feature importance * variable name * Update test/test_split.py Co-authored-by: Chi Wang * Update test/test_forecast.py Co-authored-by: Chi Wang * prophet installation fail in windows * upload flaml_forecast.ipynb Signed-off-by: Kevin Chen --- .github/workflows/python-package.yml | 2 +- flaml/automl.py | 160 +++- flaml/data.py | 10 +- flaml/ml.py | 38 +- flaml/model.py | 221 ++++- flaml/searcher/blendsearch.py | 3 +- flaml/version.py | 2 +- notebook/flaml_automl.ipynb | 1245 +++++++++++++------------- notebook/flaml_forecast.ipynb | 1089 ++++++++++++++++++++++ notebook/flaml_lightgbm.ipynb | 666 +++++++------- setup.py | 5 + test/test_forecast.py | 119 +++ test/test_split.py | 22 +- test/tune/example.py | 52 ++ 14 files changed, 2613 insertions(+), 1021 deletions(-) create mode 100644 notebook/flaml_forecast.ipynb create mode 100644 test/test_forecast.py create mode 100644 test/tune/example.py diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index bf7e25d60..3367931d5 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -41,7 +41,7 @@ jobs: - name: If linux or mac, install ray if: (matrix.os == 'macOS-latest' || matrix.os == 'ubuntu-latest') && matrix.python-version != '3.9' run: | - pip install -e .[ray] + pip install -e .[ray,forecast] pip install 'tensorboardX<=2.2' - name: Lint with flake8 run: | diff --git a/flaml/automl.py b/flaml/automl.py index 8cd8f6738..8d91c1b61 100644 --- a/flaml/automl.py +++ b/flaml/automl.py @@ -10,7 +10,7 @@ from functools import partial import numpy as np from scipy.sparse import issparse from sklearn.model_selection import train_test_split, RepeatedStratifiedKFold, \ - RepeatedKFold, GroupKFold + RepeatedKFold, GroupKFold, TimeSeriesSplit from sklearn.utils import shuffle import pandas as pd @@ -25,6 +25,7 @@ from . import tune from .training_log import training_log_reader, training_log_writer import logging + logger = logging.getLogger(__name__) logger_formatter = logging.Formatter( '[%(name)s: %(asctime)s] {%(lineno)d} %(levelname)s - %(message)s', @@ -360,11 +361,15 @@ class AutoML: return self._trained_estimator.classes_.tolist() return None - def predict(self, X_test): + def predict(self, X_test, freq=None): '''Predict label from features. Args: - X_test: A numpy array of featurized instances, shape n * m. + X_test: A numpy array of featurized instances, shape n * m, + or a pandas dataframe with one column with timestamp values + for 'forecasting' task. + freq: str or pandas offset, default=None | The frequency of the + time-series. Returns: A numpy array of shape n * 1 - - each element is a predicted class @@ -375,8 +380,14 @@ class AutoML: "No estimator is trained. Please run fit with enough budget.") return None X_test = self._preprocess(X_test) - y_pred = self._trained_estimator.predict(X_test) - if y_pred.ndim > 1: + if self._state.task == 'forecast': + X_test_df = pd.DataFrame(X_test) + X_test_col = list(X_test.columns)[0] + X_test_df = X_test_df.rename(columns={X_test_col: 'ds'}) + y_pred = self._trained_estimator.predict(X_test_df, freq=freq) + else: + y_pred = self._trained_estimator.predict(X_test) + if y_pred.ndim > 1 and isinstance(y_pred, np.ndarray): y_pred = y_pred.flatten() if self._label_transformer: return self._label_transformer.inverse_transform(pd.Series( @@ -408,6 +419,25 @@ class AutoML: def _validate_data(self, X_train_all, y_train_all, dataframe, label, X_val=None, y_val=None): + if self._state.task == 'forecast': + if dataframe is not None and label is not None: + dataframe = dataframe.copy() + dataframe = dataframe.rename(columns={label[0]: 'ds', label[1]: 'y'}) + elif dataframe is not None: + if ('ds' not in dataframe) or ('y' not in dataframe): + raise ValueError( + 'For forecasting task, Dataframe must have columns "ds" and "y" ' + 'with the dates and values respectively.' + ) + elif (X_train_all is not None) and (y_train_all is not None): + dataframe = pd.DataFrame(X_train_all) + time_col = list(dataframe.columns)[0] + dataframe = dataframe.rename(columns={time_col: 'ds'}) + dataframe['y'] = pd.Series(y_train_all) + X_train_all = None + y_train_all = None + label = 'y' + if X_train_all is not None and y_train_all is not None: if not (isinstance(X_train_all, np.ndarray) or issparse(X_train_all) or isinstance(X_train_all, pd.DataFrame)): @@ -440,7 +470,7 @@ class AutoML: else: raise ValueError( "either X_train+y_train or dataframe+label are required") - if issparse(X_train_all): + if issparse(X_train_all) or self._state.task == 'forecast': self._transformer = self._label_transformer = False self._X_train_all, self._y_train_all = X, y else: @@ -482,7 +512,8 @@ class AutoML: def _prepare_data(self, eval_method, split_ratio, - n_splits): + n_splits, + period=None): X_val, y_val = self._state.X_val, self._state.y_val if issparse(X_val): X_val = X_val.tocsr() @@ -490,8 +521,9 @@ class AutoML: self._X_train_all, self._y_train_all if issparse(X_train_all): X_train_all = X_train_all.tocsr() - if self._state.task != 'regression' and self._state.fit_kwargs.get( - 'sample_weight') is None: + if (self._state.task == 'binary:logistic' or self._state.task == 'multi:softmax') \ + and self._state.fit_kwargs.get('sample_weight') is None \ + and self._split_type != 'time': # logger.info(f"label {pd.unique(y_train_all)}") label_set, counts = np.unique(y_train_all, return_counts=True) # augment rare classes @@ -518,19 +550,21 @@ class AutoML: count += rare_count logger.info( f"class {label} augmented from {rare_count} to {count}") - if 'sample_weight' in self._state.fit_kwargs: - X_train_all, y_train_all, self._state.fit_kwargs[ - 'sample_weight'] = shuffle( + SHUFFLE_SPLIT_TYPES = ['uniform', 'stratified'] + if self._split_type in SHUFFLE_SPLIT_TYPES: + if 'sample_weight' in self._state.fit_kwargs: + X_train_all, y_train_all, self._state.fit_kwargs[ + 'sample_weight'] = shuffle( X_train_all, y_train_all, self._state.fit_kwargs['sample_weight'], random_state=RANDOM_SEED) - elif hasattr(self._state, 'groups') and self._state.groups is not None: - X_train_all, y_train_all, self._state.groups = shuffle( - X_train_all, y_train_all, self._state.groups, - random_state=RANDOM_SEED) - else: - X_train_all, y_train_all = shuffle( - X_train_all, y_train_all, random_state=RANDOM_SEED) + elif hasattr(self._state, 'groups') and self._state.groups is not None: + X_train_all, y_train_all, self._state.groups = shuffle( + X_train_all, y_train_all, self._state.groups, + random_state=RANDOM_SEED) + else: + X_train_all, y_train_all = shuffle( + X_train_all, y_train_all, random_state=RANDOM_SEED) if self._df: X_train_all.reset_index(drop=True, inplace=True) if isinstance(y_train_all, pd.Series): @@ -539,7 +573,31 @@ class AutoML: X_train, y_train = X_train_all, y_train_all if X_val is None: # if eval_method = holdout, make holdout data - if self._state.task != 'regression' and eval_method == 'holdout': + if eval_method == 'holdout' and self._split_type == 'time': + if 'period' in self._state.fit_kwargs: + num_samples = X_train_all.shape[0] + split_idx = num_samples - self._state.fit_kwargs.get('period') + X_train = X_train_all[:split_idx] + y_train = y_train_all[:split_idx] + X_val = X_train_all[split_idx:] + y_val = y_train_all[split_idx:] + else: + if 'sample_weight' in self._state.fit_kwargs: + X_train, X_val, y_train, y_val, self._state.fit_kwargs[ + 'sample_weight'], self._state.weight_val = \ + train_test_split( + X_train_all, + y_train_all, + self._state.fit_kwargs['sample_weight'], + test_size=split_ratio, + shuffle=False) + else: + X_train, X_val, y_train, y_val = train_test_split( + X_train_all, + y_train_all, + test_size=split_ratio, + shuffle=False) + elif self._state.task != 'regression' and eval_method == 'holdout': # for classification, make sure the labels are complete in both # training and validation data label_set, first = np.unique(y_train_all, return_index=True) @@ -624,6 +682,13 @@ class AutoML: f"requires input data with at least {n_splits*2} examples.") self._state.kf = RepeatedStratifiedKFold( n_splits=n_splits, n_repeats=1, random_state=RANDOM_SEED) + elif self._split_type == "time": + logger.info("Using TimeSeriesSplit") + if self._state.task == 'forecast': + self._state.kf = TimeSeriesSplit( + n_splits=n_splits, test_size=self._state.fit_kwargs.get('period')) + else: + self._state.kf = TimeSeriesSplit(n_splits=n_splits) else: logger.info("Using RepeatedKFold") self._state.kf = RepeatedKFold( @@ -762,10 +827,15 @@ class AutoML: if self._state.task == 'classification': self._state.task = get_classification_objective( len(np.unique(self._y_train_all))) - assert split_type in ["stratified", "uniform"] + assert split_type in ["stratified", "uniform", "time"] self._split_type = split_type - else: - self._split_type = "uniform" + elif self._state.task == 'regression': + if split_type in ["uniform", "time"]: + self._split_type = split_type + else: + self._split_type = "uniform" + elif self._state.task == 'forecast': + self._split_type = "time" if record_id >= 0: eval_method = 'cv' elif eval_method == 'auto': @@ -1011,15 +1081,22 @@ class AutoML: Args: X_train: A numpy array or a pandas dataframe of training data in shape (n, m) + For 'forecast' task, X_train should be timestamp y_train: A numpy array or a pandas series of labels in shape (n,) + For 'forecast' task, y_train should be value dataframe: A dataframe of training data including label column - label: A str of the label column name + For 'forecast' task, dataframe must be specified and should + have two columns: timestamp and value + label: A str of the label column name for 'classification' or + 'regression' task or a tuple of strings for timestamp and + value columns for 'forecasting' task Note: If X_train and y_train are provided, dataframe and label are ignored; If not, dataframe and label must be provided. metric: A string of the metric name or a function, e.g., 'accuracy', 'roc_auc', 'roc_auc_ovr', 'roc_auc_ovo', - 'f1', 'micro_f1', 'macro_f1', 'log_loss', 'mae', 'mse', 'r2' + 'f1', 'micro_f1', 'macro_f1', 'log_loss', 'mape', 'mae', 'mse', 'r2' + for 'forecast' task, use 'mape' if passing a customized metric function, the function needs to have the follwing signature: @@ -1034,7 +1111,7 @@ class AutoML: which returns a float number as the minimization objective, and a tuple of floats or a dictionary as the metrics to log task: A string of the task type, e.g., - 'classification', 'regression' + 'classification', 'regression', 'forecast' n_jobs: An integer of the number of threads for training log_file_name: A string of the log file name estimator_list: A list of strings for estimator names, or 'auto' @@ -1085,7 +1162,8 @@ class AutoML: hyperparamter configurations for the corresponding estimators. seed: int or None, default=None | The random seed for np.random. **fit_kwargs: Other key word arguments to pass to fit() function of - the searched learners, such as sample_weight. + the searched learners, such as sample_weight. Include period as + a key word argument for 'forecast' task. ''' self._start_time_flag = time.time() self._state.task = task @@ -1093,6 +1171,7 @@ class AutoML: self._state.fit_kwargs = fit_kwargs self._state.weight_val = sample_weight_val self._state.groups = groups + self._validate_data(X_train, y_train, dataframe, label, X_val, y_val) self._search_states = {} # key: estimator name; value: SearchState self._random = np.random.RandomState(RANDOM_SEED) @@ -1106,10 +1185,19 @@ class AutoML: if self._state.task == 'classification': self._state.task = get_classification_objective( len(np.unique(self._y_train_all))) - assert split_type in ["stratified", "uniform"] + assert split_type in ["stratified", "uniform", "time"] self._split_type = split_type - else: - self._split_type = "uniform" + elif self._state.task == 'regression': + if split_type in ["uniform", "time"]: + self._split_type = split_type + else: + self._split_type = "uniform" + elif self._state.task == 'forecast': + if split_type is not None and split_type != 'time': + raise ValueError("split_type must be 'time' when task is 'forecast'. ") + self._split_type = "time" + if self._state.task == 'forecast' and self._state.fit_kwargs.get('period') is None: + raise TypeError("missing 1 required argument for 'forecast' task: 'period'. ") if eval_method == 'auto' or self._state.X_val is not None: eval_method = self._decide_eval_method(time_budget) self._state.eval_method = eval_method @@ -1122,7 +1210,11 @@ class AutoML: self._retrain_full = retrain_full and ( eval_method == 'holdout' and self._state.X_val is None) - self._prepare_data(eval_method, split_ratio, n_splits) + if self._state.task != 'forecast': + self._prepare_data(eval_method, split_ratio, n_splits) + else: + self._prepare_data(eval_method, split_ratio, n_splits, + period=self._state.fit_kwargs.get('period')) self._sample = sample and eval_method != 'cv' and ( MIN_SAMPLE_TRAIN * SAMPLE_MULTIPLY_FACTOR < self._state.data_size) if 'auto' == metric: @@ -1130,6 +1222,8 @@ class AutoML: metric = 'roc_auc' elif 'multi' in self._state.task: metric = 'log_loss' + elif self._state.task == 'forecast': + metric = 'mape' else: metric = 'r2' self._state.metric = metric @@ -1146,6 +1240,8 @@ class AutoML: estimator_list = ['lgbm', 'rf', 'catboost', 'xgboost', 'extra_tree'] if 'regression' != self._state.task: estimator_list += ['lrl1'] + if self._state.task == 'forecast': + estimator_list = ['fbprophet', 'arima', 'sarimax'] for estimator_name in estimator_list: if estimator_name not in self._state.learner_classes: self.add_learner( @@ -1237,7 +1333,7 @@ class AutoML: elif 'bs' == self._hpo_method: from flaml import BlendSearch as SearchAlgo elif 'cfocat' == self._hpo_method: - from flaml import CFOCat as SearchAlgo + from flaml.searcher.cfo_cat import CFOCat as SearchAlgo else: raise NotImplementedError( f"hpo_method={self._hpo_method} is not recognized. " diff --git a/flaml/data.py b/flaml/data.py index c552ffeeb..33b527044 100644 --- a/flaml/data.py +++ b/flaml/data.py @@ -120,7 +120,7 @@ def get_output_from_log(filename, time_budget): time_budget: A float of the time budget in seconds Returns: - training_time_list: A list of the finished time of each logged iter + search_time_list: A list of the finished time of each logged iter best_error_list: A list of the best validation error after each logged iter error_list: A list of the validation error of each logged iter @@ -132,9 +132,8 @@ def get_output_from_log(filename, time_budget): best_config = None best_learner = None best_val_loss = float('+inf') - training_duration = 0.0 - training_time_list = [] + search_time_list = [] config_list = [] best_error_list = [] error_list = [] @@ -143,7 +142,6 @@ def get_output_from_log(filename, time_budget): with training_log_reader(filename) as reader: for record in reader.records(): time_used = record.total_search_time - training_duration = time_used val_loss = record.validation_loss config = record.config learner = record.learner.split('_')[0] @@ -156,7 +154,7 @@ def get_output_from_log(filename, time_budget): best_config = config best_learner = learner best_config_list.append(best_config) - training_time_list.append(training_duration) + search_time_list.append(time_used) best_error_list.append(best_val_loss) logged_metric_list.append(train_loss) error_list.append(val_loss) @@ -166,7 +164,7 @@ def get_output_from_log(filename, time_budget): "Best Learner": best_learner, "Best Hyper-parameters": best_config}) - return (training_time_list, best_error_list, error_list, config_list, + return (search_time_list, best_error_list, error_list, config_list, logged_metric_list) diff --git a/flaml/ml.py b/flaml/ml.py index 78f2ce4c7..c26b8513d 100644 --- a/flaml/ml.py +++ b/flaml/ml.py @@ -9,12 +9,12 @@ import numpy as np import pandas as pd from sklearn.metrics import mean_squared_error, r2_score, roc_auc_score, \ accuracy_score, mean_absolute_error, log_loss, average_precision_score, \ - f1_score -from sklearn.model_selection import RepeatedStratifiedKFold, GroupKFold + f1_score, mean_absolute_percentage_error +from sklearn.model_selection import RepeatedStratifiedKFold, GroupKFold, TimeSeriesSplit from .model import ( XGBoostEstimator, XGBoostSklearnEstimator, RandomForestEstimator, LGBMEstimator, LRL1Classifier, LRL2Classifier, CatBoostEstimator, - ExtraTreeEstimator, KNeighborsEstimator) + ExtraTreeEstimator, KNeighborsEstimator, FBProphet, ARIMA, SARIMAX) import logging logger = logging.getLogger(__name__) @@ -42,6 +42,12 @@ def get_estimator_class(task, estimator_name): estimator_class = ExtraTreeEstimator elif 'kneighbor' == estimator_name: estimator_class = KNeighborsEstimator + elif 'prophet' in estimator_name: + estimator_class = FBProphet + elif estimator_name == 'arima': + estimator_class = ARIMA + elif estimator_name == 'sarimax': + estimator_class = SARIMAX else: raise ValueError( estimator_name + ' is not a built-in learner. ' @@ -57,7 +63,7 @@ def sklearn_metric_loss_score( Args: metric_name: A string of the metric name, one of 'r2', 'rmse', 'mae', 'mse', 'accuracy', 'roc_auc', 'roc_auc_ovr', - 'roc_auc_ovo', 'log_loss', 'f1', 'ap', 'micro_f1', 'macro_f1' + 'roc_auc_ovo', 'log_loss', 'mape', 'f1', 'ap', 'micro_f1', 'macro_f1' y_predict: A 1d or 2d numpy array of the predictions which can be used to calculate the metric. E.g., 2d for log_loss and 1d for others. @@ -95,6 +101,9 @@ def sklearn_metric_loss_score( elif 'log_loss' in metric_name: score = log_loss( y_true, y_predict, labels=labels, sample_weight=sample_weight) + elif 'mape' in metric_name: + score = mean_absolute_percentage_error( + y_true, y_predict) elif 'micro_f1' in metric_name: score = 1 - f1_score( y_true, y_predict, sample_weight=sample_weight, average='micro') @@ -111,18 +120,20 @@ def sklearn_metric_loss_score( metric_name + ' is not a built-in metric, ' 'currently built-in metrics are: ' 'r2, rmse, mae, mse, accuracy, roc_auc, roc_auc_ovr, roc_auc_ovo,' - 'log_loss, f1, micro_f1, macro_f1, ap. ' + 'log_loss, mape, f1, micro_f1, macro_f1, ap. ' 'please pass a customized metric function to AutoML.fit(metric=func)') return score -def get_y_pred(estimator, X, eval_metric, obj): +def get_y_pred(estimator, X, eval_metric, obj, freq=None): if eval_metric in ['roc_auc', 'ap'] and 'binary' in obj: y_pred_classes = estimator.predict_proba(X) y_pred = y_pred_classes[ :, 1] if y_pred_classes.ndim > 1 else y_pred_classes elif eval_metric in ['log_loss', 'roc_auc', 'roc_auc_ovr', 'roc_auc_ovo']: y_pred = estimator.predict_proba(X) + elif eval_metric == 'mape': + y_pred = estimator.predict(X, freq=freq) else: y_pred = estimator.predict(X) return y_pred @@ -201,15 +212,21 @@ def evaluate_model_CV( valid_fold_num = total_fold_num = 0 n = kf.get_n_splits() X_train_split, y_train_split = X_train_all, y_train_all - if task == 'regression': - labels = None - else: + if task == 'binary:logistics' or task == 'multi:softmax': labels = np.unique(y_train_all) + else: + labels = None if isinstance(kf, RepeatedStratifiedKFold): kf = kf.split(X_train_split, y_train_split) elif isinstance(kf, GroupKFold): kf = kf.split(X_train_split, y_train_split, kf.groups) + elif isinstance(kf, TimeSeriesSplit) and task == 'forecast': + y_train_all = pd.DataFrame(y_train_all, columns=['y']) + train = X_train_all.join(y_train_all) + kf = kf.split(train) + elif isinstance(kf, TimeSeriesSplit): + kf = kf.split(X_train_split, y_train_split) else: kf = kf.split(X_train_split) rng = np.random.RandomState(2020) @@ -221,7 +238,8 @@ def evaluate_model_CV( else: weight = weight_val = None for train_index, val_index in kf: - train_index = rng.permutation(train_index) + if not isinstance(kf, TimeSeriesSplit): + train_index = rng.permutation(train_index) if isinstance(X_train_all, pd.DataFrame): X_train, X_val = X_train_split.iloc[ train_index], X_train_split.iloc[val_index] diff --git a/flaml/model.py b/flaml/model.py index 341714085..b9ae3f52c 100644 --- a/flaml/model.py +++ b/flaml/model.py @@ -15,6 +15,7 @@ import pandas as pd from . import tune import logging + logger = logging.getLogger(__name__) @@ -635,7 +636,6 @@ class LRL2Classifier(SKLearnEstimator): class CatBoostEstimator(BaseEstimator): - _time_per_iter = None _train_size = 0 @@ -834,3 +834,222 @@ class KNeighborsEstimator(BaseEstimator): X = X.drop(cat_columns, axis=1) X = X.to_numpy() return X + + +class FBProphet(BaseEstimator): + @classmethod + def search_space(cls, **params): + space = { + 'changepoint_prior_scale': { + 'domain': tune.loguniform(lower=0.001, upper=1000), + 'init_value': 0.01, + 'low_cost_init_value': 0.001, + }, + 'seasonality_prior_scale': { + 'domain': tune.loguniform(lower=0.01, upper=100), + 'init_value': 1, + }, + 'holidays_prior_scale': { + 'domain': tune.loguniform(lower=0.01, upper=100), + 'init_value': 1, + }, + 'seasonality_mode': { + 'domain': tune.choice(['additive', 'multiplicative']), + 'init_value': 'multiplicative', + } + } + return space + + def fit(self, X_train, y_train, budget=None, **kwargs): + y_train = pd.DataFrame(y_train, columns=['y']) + train_df = X_train.join(y_train) + + if ('ds' not in train_df) or ('y' not in train_df): + raise ValueError( + 'Dataframe for training forecast model must have columns "ds" and "y" with the dates and ' + 'values respectively.' + ) + + if 'n_jobs' in self.params: + self.params.pop('n_jobs') + + from prophet import Prophet + + current_time = time.time() + model = Prophet(**self.params).fit(train_df) + train_time = time.time() - current_time + self._model = model + return train_time + + def predict(self, X_test, freq=None): + if self._model is not None: + if isinstance(X_test, int) and freq is not None: + future = self._model.make_future_dataframe(periods=X_test, freq=freq) + forecast = self._model.predict(future) + elif isinstance(X_test, pd.DataFrame): + forecast = self._model.predict(X_test) + else: + raise ValueError( + "either X_test(pd.Dataframe with dates for predictions, column ds) or" + "X_test(int number of periods)+freq are required.") + return forecast['yhat'] + else: + return np.ones(X_test.shape[0]) + + +class ARIMA(BaseEstimator): + @classmethod + def search_space(cls, **params): + space = { + 'p': { + 'domain': tune.quniform(lower=0, upper=10, q=1), + 'init_value': 2, + 'low_cost_init_value': 0, + }, + 'd': { + 'domain': tune.quniform(lower=0, upper=10, q=1), + 'init_value': 2, + 'low_cost_init_value': 0, + }, + 'q': { + 'domain': tune.quniform(lower=0, upper=10, q=1), + 'init_value': 2, + 'low_cost_init_value': 0, + } + } + return space + + def fit(self, X_train, y_train, budget=None, **kwargs): + y_train = pd.DataFrame(y_train, columns=['y']) + train_df = X_train.join(y_train) + + if ('ds' not in train_df) or ('y' not in train_df): + raise ValueError( + 'Dataframe for training forecast model must have columns "ds" and "y" with the dates and ' + 'values respectively.' + ) + + train_df.index = pd.to_datetime(train_df['ds']) + train_df = train_df.drop('ds', axis=1) + + if 'n_jobs' in self.params: + self.params.pop('n_jobs') + + from statsmodels.tsa.arima.model import ARIMA as ARIMA_estimator + import warnings + warnings.filterwarnings("ignore") + + current_time = time.time() + model = ARIMA_estimator(train_df, + order=(self.params['p'], self.params['d'], self.params['q']), + enforce_stationarity=False, + enforce_invertibility=False) + + model = model.fit() + train_time = time.time() - current_time + self._model = model + return train_time + + def predict(self, X_test, freq=None): + if self._model is not None: + if isinstance(X_test, int) and freq is not None: + forecast = self._model.forecast(steps=X_test).to_frame().reset_index() + elif isinstance(X_test, pd.DataFrame): + start_date = X_test.iloc[0, 0] + end_date = X_test.iloc[-1, 0] + forecast = self._model.predict(start=start_date, end=end_date) + else: + raise ValueError( + "either X_test(pd.Dataframe with dates for predictions, column ds) or" + "X_test(int number of periods)+freq are required.") + return forecast + else: + return np.ones(X_test.shape[0]) + + +class SARIMAX(BaseEstimator): + @classmethod + def search_space(cls, **params): + space = { + 'p': { + 'domain': tune.quniform(lower=0, upper=10, q=1), + 'init_value': 2, + 'low_cost_init_value': 0, + }, + 'd': { + 'domain': tune.quniform(lower=0, upper=10, q=1), + 'init_value': 2, + 'low_cost_init_value': 0, + }, + 'q': { + 'domain': tune.quniform(lower=0, upper=10, q=1), + 'init_value': 2, + 'low_cost_init_value': 0, + }, + 'P': { + 'domain': tune.quniform(lower=0, upper=10, q=1), + 'init_value': 1, + 'low_cost_init_value': 0, + }, + 'D': { + 'domain': tune.quniform(lower=0, upper=10, q=1), + 'init_value': 1, + 'low_cost_init_value': 0, + }, + 'Q': { + 'domain': tune.quniform(lower=0, upper=10, q=1), + 'init_value': 1, + 'low_cost_init_value': 0, + }, + 's': { + 'domain': tune.choice([1, 4, 6, 12]), + 'init_value': 12, + } + } + return space + + def fit(self, X_train, y_train, budget=None, **kwargs): + y_train = pd.DataFrame(y_train, columns=['y']) + train_df = X_train.join(y_train) + + if ('ds' not in train_df) or ('y' not in train_df): + raise ValueError( + 'Dataframe for training forecast model must have columns "ds" and "y" with the dates and ' + 'values respectively.' + ) + + train_df.index = pd.to_datetime(train_df['ds']) + train_df = train_df.drop('ds', axis=1) + + if 'n_jobs' in self.params: + self.params.pop('n_jobs') + + from statsmodels.tsa.statespace.sarimax import SARIMAX as SARIMAX_estimator + + current_time = time.time() + model = SARIMAX_estimator(train_df, + order=(self.params['p'], self.params['d'], self.params['q']), + seasonality_order=(self.params['P'], self.params['D'], self.params['Q'], self.params['s']), + enforce_stationarity=False, + enforce_invertibility=False) + + model = model.fit() + train_time = time.time() - current_time + self._model = model + return train_time + + def predict(self, X_test, freq=None): + if self._model is not None: + if isinstance(X_test, int) and freq is not None: + forecast = self._model.forecast(steps=X_test).to_frame().reset_index() + elif isinstance(X_test, pd.DataFrame): + start_date = X_test.iloc[0, 0] + end_date = X_test.iloc[-1, 0] + forecast = self._model.predict(start=start_date, end=end_date) + else: + raise ValueError( + "either X_test(pd.Dataframe with dates for predictions, column ds)" + "or X_test(int number of periods)+freq are required.") + return forecast + else: + return np.ones(X_test.shape[0]) diff --git a/flaml/searcher/blendsearch.py b/flaml/searcher/blendsearch.py index 43f6b3362..147694bbf 100644 --- a/flaml/searcher/blendsearch.py +++ b/flaml/searcher/blendsearch.py @@ -165,7 +165,8 @@ class BlendSearch(Searcher): min_resource, max_resource, reduction_factor, self.cost_attr, seed) self._is_ls_ever_converged = False self._subspace = {} # the subspace for each trial id - self._init_search() + if space: + self._init_search() def set_search_properties(self, metric: Optional[str] = None, diff --git a/flaml/version.py b/flaml/version.py index e1e093c04..ce25754b4 100644 --- a/flaml/version.py +++ b/flaml/version.py @@ -1 +1 @@ -__version__ = "0.5.12" +__version__ = "0.5.13" diff --git a/notebook/flaml_automl.ipynb b/notebook/flaml_automl.ipynb index 47dc9344b..80c427778 100644 --- a/notebook/flaml_automl.ipynb +++ b/notebook/flaml_automl.ipynb @@ -2,11 +2,6 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, "source": [ "Copyright (c) 2020-2021 Microsoft Corporation. All rights reserved. \n", "\n", @@ -31,44 +26,47 @@ "```bash\n", "pip install flaml[notebook]\n", "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!pip install flaml[notebook];" - ] - }, - { - "cell_type": "markdown", + ], "metadata": { "slideshow": { "slide_type": "slide" } - }, + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "!pip install flaml[notebook];" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", "source": [ "## 2. Classification Example\n", "### Load data and preprocess\n", "\n", "Download [Airlines dataset](https://www.openml.org/d/1169) from OpenML. The task is to predict whether a given flight will be delayed, given the information of the scheduled departure." - ] + ], + "metadata": { + "slideshow": { + "slide_type": "slide" + } + } }, { "cell_type": "code", - "execution_count": 22, - "metadata": { - "slideshow": { - "slide_type": "subslide" - }, - "tags": [] - }, + "execution_count": 1, + "source": [ + "from flaml.data import load_openml_dataset\n", + "X_train, X_test, y_train, y_test = load_openml_dataset(dataset_id=1169, data_dir='./')" + ], "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "load dataset from ./openml_ds1169.pkl\n", "Dataset name: airlines\n", @@ -77,59 +75,290 @@ ] } ], - "source": [ - "from flaml.data import load_openml_dataset\n", - "X_train, X_test, y_train, y_test = load_openml_dataset(dataset_id=1169, data_dir='./')" - ] + "metadata": { + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] + } }, { "cell_type": "markdown", + "source": [ + "### Run FLAML\n", + "In the FLAML automl run configuration, users can specify the task type, time budget, error metric, learner list, whether to subsample, resampling strategy type, and so on. All these arguments have default values which will be used if users do not provide them. For example, the default ML learners of FLAML are `['lgbm', 'xgboost', 'catboost', 'rf', 'extra_tree', 'lrl1']`. " + ], "metadata": { "slideshow": { "slide_type": "slide" } - }, - "source": [ - "### Run FLAML\n", - "In the FLAML automl run configuration, users can specify the task type, time budget, error metric, learner list, whether to subsample, resampling strategy type, and so on. All these arguments have default values which will be used if users do not provide them. For example, the default ML learners of FLAML are `['lgbm', 'xgboost', 'catboost', 'rf', 'extra_tree', 'lrl1']`. " - ] + } }, { "cell_type": "code", "execution_count": 2, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], "source": [ "''' import AutoML class from flaml package '''\n", "from flaml import AutoML\n", "automl = AutoML()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, + ], + "outputs": [], "metadata": { "slideshow": { "slide_type": "slide" } - }, - "outputs": [], + } + }, + { + "cell_type": "code", + "execution_count": 3, "source": [ "settings = {\n", " \"time_budget\": 300, # total running time in seconds\n", " \"metric\": 'accuracy', # primary metrics can be chosen from: ['accuracy','roc_auc','roc_auc_ovr','roc_auc_ovo','f1','log_loss','mae','mse','r2']\n", " \"task\": 'classification', # task type \n", " \"log_file_name\": 'airlines_experiment.log', # flaml log file\n", + " \"seed\": 7654321, # random seed\n", "}" - ] + ], + "outputs": [], + "metadata": { + "slideshow": { + "slide_type": "slide" + } + } }, { "cell_type": "code", "execution_count": 4, + "source": [ + "'''The main flaml automl API'''\n", + "automl.fit(X_train=X_train, y_train=y_train, **settings)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[flaml.automl: 08-13 17:55:42] {1121} INFO - Evaluation method: holdout\n", + "[flaml.automl: 08-13 17:55:42] {618} INFO - Using StratifiedKFold\n", + "[flaml.automl: 08-13 17:55:42] {1142} INFO - Minimizing error metric: 1-accuracy\n", + "[flaml.automl: 08-13 17:55:42] {1162} INFO - List of ML learners in AutoML Run: ['lgbm', 'rf', 'catboost', 'xgboost', 'extra_tree', 'lrl1']\n", + "[flaml.automl: 08-13 17:55:42] {1252} INFO - iteration 0, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:43] {1405} INFO - at 1.9s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", + "[flaml.automl: 08-13 17:55:43] {1252} INFO - iteration 1, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:43] {1405} INFO - at 1.9s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", + "[flaml.automl: 08-13 17:55:43] {1252} INFO - iteration 2, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:43] {1405} INFO - at 2.0s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", + "[flaml.automl: 08-13 17:55:43] {1252} INFO - iteration 3, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:43] {1405} INFO - at 2.1s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", + "[flaml.automl: 08-13 17:55:43] {1252} INFO - iteration 4, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:43] {1405} INFO - at 2.2s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", + "[flaml.automl: 08-13 17:55:43] {1252} INFO - iteration 5, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:43] {1405} INFO - at 2.2s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", + "[flaml.automl: 08-13 17:55:43] {1252} INFO - iteration 6, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:44] {1405} INFO - at 2.3s,\tbest lgbm's error=0.3742,\tbest lgbm's error=0.3742\n", + "[flaml.automl: 08-13 17:55:44] {1252} INFO - iteration 7, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:44] {1405} INFO - at 2.4s,\tbest lgbm's error=0.3613,\tbest lgbm's error=0.3613\n", + "[flaml.automl: 08-13 17:55:44] {1252} INFO - iteration 8, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:44] {1405} INFO - at 2.5s,\tbest lgbm's error=0.3613,\tbest lgbm's error=0.3613\n", + "[flaml.automl: 08-13 17:55:44] {1252} INFO - iteration 9, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:44] {1405} INFO - at 2.7s,\tbest lgbm's error=0.3613,\tbest lgbm's error=0.3613\n", + "[flaml.automl: 08-13 17:55:44] {1252} INFO - iteration 10, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:44] {1405} INFO - at 2.8s,\tbest lgbm's error=0.3613,\tbest lgbm's error=0.3613\n", + "[flaml.automl: 08-13 17:55:44] {1252} INFO - iteration 11, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:44] {1405} INFO - at 2.9s,\tbest lgbm's error=0.3613,\tbest lgbm's error=0.3613\n", + "[flaml.automl: 08-13 17:55:44] {1252} INFO - iteration 12, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:44] {1405} INFO - at 3.1s,\tbest lgbm's error=0.3573,\tbest lgbm's error=0.3573\n", + "[flaml.automl: 08-13 17:55:44] {1252} INFO - iteration 13, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:44] {1405} INFO - at 3.2s,\tbest lgbm's error=0.3573,\tbest lgbm's error=0.3573\n", + "[flaml.automl: 08-13 17:55:44] {1252} INFO - iteration 14, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:45] {1405} INFO - at 3.5s,\tbest lgbm's error=0.3570,\tbest lgbm's error=0.3570\n", + "[flaml.automl: 08-13 17:55:45] {1252} INFO - iteration 15, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:45] {1405} INFO - at 3.8s,\tbest lgbm's error=0.3570,\tbest lgbm's error=0.3570\n", + "[flaml.automl: 08-13 17:55:45] {1252} INFO - iteration 16, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:45] {1405} INFO - at 4.1s,\tbest lgbm's error=0.3510,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:45] {1252} INFO - iteration 17, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:46] {1405} INFO - at 4.3s,\tbest lgbm's error=0.3510,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:46] {1252} INFO - iteration 18, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:46] {1405} INFO - at 5.0s,\tbest lgbm's error=0.3510,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:46] {1252} INFO - iteration 19, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:46] {1405} INFO - at 5.2s,\tbest lgbm's error=0.3510,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:46] {1252} INFO - iteration 20, current learner xgboost\n", + "[flaml.automl: 08-13 17:55:47] {1405} INFO - at 5.4s,\tbest xgboost's error=0.3787,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:47] {1252} INFO - iteration 21, current learner xgboost\n", + "[flaml.automl: 08-13 17:55:47] {1405} INFO - at 5.5s,\tbest xgboost's error=0.3769,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:47] {1252} INFO - iteration 22, current learner xgboost\n", + "[flaml.automl: 08-13 17:55:47] {1405} INFO - at 5.7s,\tbest xgboost's error=0.3769,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:47] {1252} INFO - iteration 23, current learner xgboost\n", + "[flaml.automl: 08-13 17:55:47] {1405} INFO - at 5.8s,\tbest xgboost's error=0.3769,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:47] {1252} INFO - iteration 24, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:48] {1405} INFO - at 6.6s,\tbest lgbm's error=0.3510,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:48] {1252} INFO - iteration 25, current learner extra_tree\n", + "[flaml.automl: 08-13 17:55:48] {1405} INFO - at 6.8s,\tbest extra_tree's error=0.3773,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:48] {1252} INFO - iteration 26, current learner extra_tree\n", + "[flaml.automl: 08-13 17:55:48] {1405} INFO - at 7.0s,\tbest extra_tree's error=0.3760,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:48] {1252} INFO - iteration 27, current learner rf\n", + "[flaml.automl: 08-13 17:55:48] {1405} INFO - at 7.2s,\tbest rf's error=0.3787,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:48] {1252} INFO - iteration 28, current learner rf\n", + "[flaml.automl: 08-13 17:55:49] {1405} INFO - at 7.4s,\tbest rf's error=0.3709,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:49] {1252} INFO - iteration 29, current learner xgboost\n", + "[flaml.automl: 08-13 17:55:49] {1405} INFO - at 7.5s,\tbest xgboost's error=0.3765,\tbest lgbm's error=0.3510\n", + "[flaml.automl: 08-13 17:55:49] {1252} INFO - iteration 30, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:51] {1405} INFO - at 9.5s,\tbest lgbm's error=0.3465,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:55:51] {1252} INFO - iteration 31, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:53] {1405} INFO - at 11.4s,\tbest lgbm's error=0.3465,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:55:53] {1252} INFO - iteration 32, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:55] {1405} INFO - at 13.8s,\tbest lgbm's error=0.3465,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:55:55] {1252} INFO - iteration 33, current learner rf\n", + "[flaml.automl: 08-13 17:55:55] {1405} INFO - at 14.1s,\tbest rf's error=0.3709,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:55:55] {1252} INFO - iteration 34, current learner lgbm\n", + "[flaml.automl: 08-13 17:55:57] {1405} INFO - at 15.4s,\tbest lgbm's error=0.3465,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:55:57] {1252} INFO - iteration 35, current learner rf\n", + "[flaml.automl: 08-13 17:55:57] {1405} INFO - at 15.7s,\tbest rf's error=0.3709,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:55:57] {1252} INFO - iteration 36, current learner extra_tree\n", + "[flaml.automl: 08-13 17:55:57] {1405} INFO - at 15.8s,\tbest extra_tree's error=0.3760,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:55:57] {1252} INFO - iteration 37, current learner rf\n", + "[flaml.automl: 08-13 17:55:57] {1405} INFO - at 16.0s,\tbest rf's error=0.3654,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:55:57] {1252} INFO - iteration 38, current learner rf\n", + "[flaml.automl: 08-13 17:55:57] {1405} INFO - at 16.3s,\tbest rf's error=0.3634,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:55:57] {1252} INFO - iteration 39, current learner lgbm\n", + "[flaml.automl: 08-13 17:56:02] {1405} INFO - at 20.5s,\tbest lgbm's error=0.3465,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:56:02] {1252} INFO - iteration 40, current learner rf\n", + "[flaml.automl: 08-13 17:56:02] {1405} INFO - at 20.8s,\tbest rf's error=0.3634,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:56:02] {1252} INFO - iteration 41, current learner extra_tree\n", + "[flaml.automl: 08-13 17:56:02] {1405} INFO - at 21.0s,\tbest extra_tree's error=0.3760,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:56:02] {1252} INFO - iteration 42, current learner lgbm\n", + "[flaml.automl: 08-13 17:56:03] {1405} INFO - at 21.9s,\tbest lgbm's error=0.3465,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:56:03] {1252} INFO - iteration 43, current learner rf\n", + "[flaml.automl: 08-13 17:56:04] {1405} INFO - at 22.3s,\tbest rf's error=0.3634,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:56:04] {1252} INFO - iteration 44, current learner catboost\n", + "[flaml.automl: 08-13 17:56:05] {1405} INFO - at 23.6s,\tbest catboost's error=0.3602,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:56:05] {1252} INFO - iteration 45, current learner extra_tree\n", + "[flaml.automl: 08-13 17:56:05] {1405} INFO - at 23.7s,\tbest extra_tree's error=0.3709,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:56:05] {1252} INFO - iteration 46, current learner catboost\n", + "[flaml.automl: 08-13 17:56:06] {1405} INFO - at 24.5s,\tbest catboost's error=0.3602,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:56:06] {1252} INFO - iteration 47, current learner catboost\n", + "[flaml.automl: 08-13 17:56:06] {1405} INFO - at 24.9s,\tbest catboost's error=0.3602,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:56:06] {1252} INFO - iteration 48, current learner catboost\n", + "[flaml.automl: 08-13 17:56:07] {1405} INFO - at 25.6s,\tbest catboost's error=0.3602,\tbest lgbm's error=0.3465\n", + "[flaml.automl: 08-13 17:56:07] {1252} INFO - iteration 49, current learner lgbm\n", + "[flaml.automl: 08-13 17:56:13] {1405} INFO - at 31.4s,\tbest lgbm's error=0.3335,\tbest lgbm's error=0.3335\n", + "[flaml.automl: 08-13 17:56:13] {1252} INFO - iteration 50, current learner catboost\n", + "[flaml.automl: 08-13 17:56:13] {1405} INFO - at 31.8s,\tbest catboost's error=0.3602,\tbest lgbm's error=0.3335\n", + "[flaml.automl: 08-13 17:56:13] {1252} INFO - iteration 51, current learner extra_tree\n", + "[flaml.automl: 08-13 17:56:13] {1405} INFO - at 32.1s,\tbest extra_tree's error=0.3709,\tbest lgbm's error=0.3335\n", + "[flaml.automl: 08-13 17:56:13] {1252} INFO - iteration 52, current learner catboost\n", + "[flaml.automl: 08-13 17:56:14] {1405} INFO - at 32.6s,\tbest catboost's error=0.3602,\tbest lgbm's error=0.3335\n", + "[flaml.automl: 08-13 17:56:14] {1252} INFO - iteration 53, current learner catboost\n", + "[flaml.automl: 08-13 17:56:18] {1405} INFO - at 36.3s,\tbest catboost's error=0.3493,\tbest lgbm's error=0.3335\n", + "[flaml.automl: 08-13 17:56:18] {1252} INFO - iteration 54, current learner lgbm\n", + "[flaml.automl: 08-13 17:56:22] {1405} INFO - at 40.9s,\tbest lgbm's error=0.3335,\tbest lgbm's error=0.3335\n", + "[flaml.automl: 08-13 17:56:22] {1252} INFO - iteration 55, current learner lgbm\n", + "[flaml.automl: 08-13 17:56:31] {1405} INFO - at 50.0s,\tbest lgbm's error=0.3335,\tbest lgbm's error=0.3335\n", + "[flaml.automl: 08-13 17:56:31] {1252} INFO - iteration 56, current learner extra_tree\n", + "[flaml.automl: 08-13 17:56:31] {1405} INFO - at 50.2s,\tbest extra_tree's error=0.3664,\tbest lgbm's error=0.3335\n", + "[flaml.automl: 08-13 17:56:31] {1252} INFO - iteration 57, current learner rf\n", + "[flaml.automl: 08-13 17:56:32] {1405} INFO - at 50.4s,\tbest rf's error=0.3634,\tbest lgbm's error=0.3335\n", + "[flaml.automl: 08-13 17:56:32] {1252} INFO - iteration 58, current learner rf\n", + "[flaml.automl: 08-13 17:56:32] {1405} INFO - at 50.7s,\tbest rf's error=0.3634,\tbest lgbm's error=0.3335\n", + "[flaml.automl: 08-13 17:56:32] {1252} INFO - iteration 59, current learner xgboost\n", + "[flaml.automl: 08-13 17:56:32] {1405} INFO - at 50.8s,\tbest xgboost's error=0.3765,\tbest lgbm's error=0.3335\n", + "[flaml.automl: 08-13 17:56:32] {1252} INFO - iteration 60, current learner lgbm\n", + "[flaml.automl: 08-13 17:56:34] {1405} INFO - at 52.6s,\tbest lgbm's error=0.3335,\tbest lgbm's error=0.3335\n", + "[flaml.automl: 08-13 17:56:34] {1252} INFO - iteration 61, current learner extra_tree\n", + "[flaml.automl: 08-13 17:56:34] {1405} INFO - at 52.9s,\tbest extra_tree's error=0.3643,\tbest lgbm's error=0.3335\n", + "[flaml.automl: 08-13 17:56:34] {1252} INFO - iteration 62, current learner lgbm\n", + "[flaml.automl: 08-13 17:57:04] {1405} INFO - at 82.4s,\tbest lgbm's error=0.3277,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:57:04] {1252} INFO - iteration 63, current learner extra_tree\n", + "[flaml.automl: 08-13 17:57:04] {1405} INFO - at 82.6s,\tbest extra_tree's error=0.3643,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:57:04] {1252} INFO - iteration 64, current learner extra_tree\n", + "[flaml.automl: 08-13 17:57:04] {1405} INFO - at 82.9s,\tbest extra_tree's error=0.3643,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:57:04] {1252} INFO - iteration 65, current learner lgbm\n", + "[flaml.automl: 08-13 17:57:35] {1405} INFO - at 113.3s,\tbest lgbm's error=0.3277,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:57:35] {1252} INFO - iteration 66, current learner catboost\n", + "[flaml.automl: 08-13 17:57:36] {1405} INFO - at 114.6s,\tbest catboost's error=0.3493,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:57:36] {1252} INFO - iteration 67, current learner extra_tree\n", + "[flaml.automl: 08-13 17:57:36] {1405} INFO - at 114.9s,\tbest extra_tree's error=0.3643,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:57:36] {1252} INFO - iteration 68, current learner catboost\n", + "[flaml.automl: 08-13 17:57:38] {1405} INFO - at 117.1s,\tbest catboost's error=0.3493,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:57:38] {1252} INFO - iteration 69, current learner lgbm\n", + "[flaml.automl: 08-13 17:58:18] {1405} INFO - at 156.9s,\tbest lgbm's error=0.3277,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:18] {1252} INFO - iteration 70, current learner catboost\n", + "[flaml.automl: 08-13 17:58:20] {1405} INFO - at 159.2s,\tbest catboost's error=0.3493,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:20] {1252} INFO - iteration 71, current learner xgboost\n", + "[flaml.automl: 08-13 17:58:21] {1405} INFO - at 159.6s,\tbest xgboost's error=0.3667,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:21] {1252} INFO - iteration 72, current learner xgboost\n", + "[flaml.automl: 08-13 17:58:21] {1405} INFO - at 159.8s,\tbest xgboost's error=0.3667,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:21] {1252} INFO - iteration 73, current learner extra_tree\n", + "[flaml.automl: 08-13 17:58:21] {1405} INFO - at 160.1s,\tbest extra_tree's error=0.3643,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:21] {1252} INFO - iteration 74, current learner xgboost\n", + "[flaml.automl: 08-13 17:58:22] {1405} INFO - at 160.4s,\tbest xgboost's error=0.3667,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:22] {1252} INFO - iteration 75, current learner extra_tree\n", + "[flaml.automl: 08-13 17:58:22] {1405} INFO - at 160.8s,\tbest extra_tree's error=0.3636,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:22] {1252} INFO - iteration 76, current learner rf\n", + "[flaml.automl: 08-13 17:58:23] {1405} INFO - at 161.5s,\tbest rf's error=0.3634,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:23] {1252} INFO - iteration 77, current learner rf\n", + "[flaml.automl: 08-13 17:58:23] {1405} INFO - at 162.0s,\tbest rf's error=0.3634,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:23] {1252} INFO - iteration 78, current learner xgboost\n", + "[flaml.automl: 08-13 17:58:24] {1405} INFO - at 162.5s,\tbest xgboost's error=0.3625,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:24] {1252} INFO - iteration 79, current learner catboost\n", + "[flaml.automl: 08-13 17:58:26] {1405} INFO - at 164.4s,\tbest catboost's error=0.3493,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:26] {1252} INFO - iteration 80, current learner rf\n", + "[flaml.automl: 08-13 17:58:26] {1405} INFO - at 165.2s,\tbest rf's error=0.3634,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:26] {1252} INFO - iteration 81, current learner xgboost\n", + "[flaml.automl: 08-13 17:58:27] {1405} INFO - at 165.5s,\tbest xgboost's error=0.3625,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:27] {1252} INFO - iteration 82, current learner catboost\n", + "[flaml.automl: 08-13 17:58:28] {1405} INFO - at 166.6s,\tbest catboost's error=0.3493,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:28] {1252} INFO - iteration 83, current learner xgboost\n", + "[flaml.automl: 08-13 17:58:28] {1405} INFO - at 166.9s,\tbest xgboost's error=0.3625,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:28] {1252} INFO - iteration 84, current learner xgboost\n", + "[flaml.automl: 08-13 17:58:28] {1405} INFO - at 167.3s,\tbest xgboost's error=0.3611,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:28] {1252} INFO - iteration 85, current learner xgboost\n", + "[flaml.automl: 08-13 17:58:29] {1405} INFO - at 167.6s,\tbest xgboost's error=0.3611,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:29] {1252} INFO - iteration 86, current learner xgboost\n", + "[flaml.automl: 08-13 17:58:29] {1405} INFO - at 167.9s,\tbest xgboost's error=0.3611,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:29] {1252} INFO - iteration 87, current learner xgboost\n", + "[flaml.automl: 08-13 17:58:30] {1405} INFO - at 168.4s,\tbest xgboost's error=0.3611,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:30] {1252} INFO - iteration 88, current learner rf\n", + "[flaml.automl: 08-13 17:58:30] {1405} INFO - at 168.9s,\tbest rf's error=0.3634,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:30] {1252} INFO - iteration 89, current learner rf\n", + "[flaml.automl: 08-13 17:58:31] {1405} INFO - at 169.7s,\tbest rf's error=0.3634,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:31] {1252} INFO - iteration 90, current learner extra_tree\n", + "[flaml.automl: 08-13 17:58:31] {1405} INFO - at 170.0s,\tbest extra_tree's error=0.3636,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:31] {1252} INFO - iteration 91, current learner catboost\n", + "[flaml.automl: 08-13 17:58:33] {1405} INFO - at 171.9s,\tbest catboost's error=0.3493,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:33] {1252} INFO - iteration 92, current learner extra_tree\n", + "[flaml.automl: 08-13 17:58:33] {1405} INFO - at 172.3s,\tbest extra_tree's error=0.3636,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:33] {1252} INFO - iteration 93, current learner catboost\n", + "[flaml.automl: 08-13 17:58:35] {1405} INFO - at 174.2s,\tbest catboost's error=0.3493,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:58:35] {1252} INFO - iteration 94, current learner catboost\n", + "[flaml.automl: 08-13 17:59:07] {1405} INFO - at 205.6s,\tbest catboost's error=0.3372,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:59:07] {1252} INFO - iteration 95, current learner lgbm\n", + "[flaml.automl: 08-13 17:59:15] {1405} INFO - at 213.3s,\tbest lgbm's error=0.3277,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:59:15] {1252} INFO - iteration 96, current learner extra_tree\n", + "[flaml.automl: 08-13 17:59:15] {1405} INFO - at 213.9s,\tbest extra_tree's error=0.3636,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 17:59:15] {1252} INFO - iteration 97, current learner catboost\n", + "[flaml.automl: 08-13 18:00:34] {1405} INFO - at 293.1s,\tbest catboost's error=0.3372,\tbest lgbm's error=0.3277\n", + "[flaml.automl: 08-13 18:00:34] {1252} INFO - iteration 98, current learner xgboost\n", + "[flaml.automl: 08-13 18:00:34] {1422} INFO - no enough budget for learner xgboost\n", + "[flaml.automl: 08-13 18:00:34] {1252} INFO - iteration 99, current learner lrl1\n", + "No low-cost partial config given to the search algorithm. For cost-frugal search, consider providing low-cost values for cost-related hps via 'low_cost_partial_config'.\n", + "[flaml.automl: 08-13 18:00:34] {1422} INFO - no enough budget for learner lrl1\n", + "[flaml.automl: 08-13 18:00:34] {1252} INFO - iteration 100, current learner rf\n", + "[flaml.automl: 08-13 18:00:34] {1422} INFO - no enough budget for learner rf\n", + "[flaml.automl: 08-13 18:00:34] {1252} INFO - iteration 101, current learner extra_tree\n", + "[flaml.automl: 08-13 18:00:34] {1422} INFO - no enough budget for learner extra_tree\n", + "[flaml.automl: 08-13 18:00:34] {1461} INFO - selected model: LGBMClassifier(colsample_bytree=0.8371742593966071,\n", + " learning_rate=0.10600185051767465, max_bin=128,\n", + " min_child_samples=44, n_estimators=2687, num_leaves=21,\n", + " objective='binary', reg_alpha=0.0027205185280732864,\n", + " reg_lambda=2.0031491728266557, verbose=-1)\n", + "[flaml.automl: 08-13 18:00:34] {1184} INFO - fit succeeded\n", + "[flaml.automl: 08-13 18:00:34] {1185} INFO - Time taken to find the best model: 82.42118620872498\n" + ] + } + ], "metadata": { "slideshow": { "slide_type": "slide" @@ -137,445 +366,209 @@ "tags": [ "outputPrepend" ] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "or=0.3575,\tbest xgboost's error=0.3575\n", - "[flaml.automl: 07-06 10:20:09] {1012} INFO - iteration 27, current learner extra_tree\n", - "[flaml.automl: 07-06 10:20:09] {1160} INFO - at 2.4s,\tbest extra_tree's error=0.4013,\tbest xgboost's error=0.3575\n", - "[flaml.automl: 07-06 10:20:09] {1012} INFO - iteration 28, current learner extra_tree\n", - "[flaml.automl: 07-06 10:20:09] {1160} INFO - at 2.4s,\tbest extra_tree's error=0.4013,\tbest xgboost's error=0.3575\n", - "[flaml.automl: 07-06 10:20:09] {1012} INFO - iteration 29, current learner extra_tree\n", - "[flaml.automl: 07-06 10:20:09] {1160} INFO - at 2.5s,\tbest extra_tree's error=0.4013,\tbest xgboost's error=0.3575\n", - "[flaml.automl: 07-06 10:20:09] {1012} INFO - iteration 30, current learner xgboost\n", - "[flaml.automl: 07-06 10:20:09] {1160} INFO - at 2.7s,\tbest xgboost's error=0.3575,\tbest xgboost's error=0.3575\n", - "[flaml.automl: 07-06 10:20:09] {1012} INFO - iteration 31, current learner xgboost\n", - "[flaml.automl: 07-06 10:20:09] {1160} INFO - at 3.0s,\tbest xgboost's error=0.3567,\tbest xgboost's error=0.3567\n", - "[flaml.automl: 07-06 10:20:09] {1012} INFO - iteration 32, current learner xgboost\n", - "[flaml.automl: 07-06 10:20:10] {1160} INFO - at 3.3s,\tbest xgboost's error=0.3567,\tbest xgboost's error=0.3567\n", - "[flaml.automl: 07-06 10:20:10] {1012} INFO - iteration 33, current learner extra_tree\n", - "[flaml.automl: 07-06 10:20:10] {1160} INFO - at 3.4s,\tbest extra_tree's error=0.3918,\tbest xgboost's error=0.3567\n", - "[flaml.automl: 07-06 10:20:10] {1012} INFO - iteration 34, current learner xgboost\n", - "[flaml.automl: 07-06 10:20:10] {1160} INFO - at 3.9s,\tbest xgboost's error=0.3505,\tbest xgboost's error=0.3505\n", - "[flaml.automl: 07-06 10:20:10] {1012} INFO - iteration 35, current learner catboost\n", - "[flaml.automl: 07-06 10:20:11] {1160} INFO - at 4.6s,\tbest catboost's error=0.3624,\tbest xgboost's error=0.3505\n", - "[flaml.automl: 07-06 10:20:11] {1012} INFO - iteration 36, current learner catboost\n", - "[flaml.automl: 07-06 10:20:12] {1160} INFO - at 5.6s,\tbest catboost's error=0.3624,\tbest xgboost's error=0.3505\n", - "[flaml.automl: 07-06 10:20:12] {1012} INFO - iteration 37, current learner extra_tree\n", - "[flaml.automl: 07-06 10:20:12] {1160} INFO - at 5.7s,\tbest extra_tree's error=0.3918,\tbest xgboost's error=0.3505\n", - "[flaml.automl: 07-06 10:20:12] {1012} INFO - iteration 38, current learner xgboost\n", - "[flaml.automl: 07-06 10:20:12] {1160} INFO - at 6.0s,\tbest xgboost's error=0.3505,\tbest xgboost's error=0.3505\n", - "[flaml.automl: 07-06 10:20:12] {1012} INFO - iteration 39, current learner xgboost\n", - "[flaml.automl: 07-06 10:20:14] {1160} INFO - at 8.0s,\tbest xgboost's error=0.3504,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:14] {1012} INFO - iteration 40, current learner catboost\n", - "[flaml.automl: 07-06 10:20:15] {1160} INFO - at 8.2s,\tbest catboost's error=0.3614,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:15] {1012} INFO - iteration 41, current learner xgboost\n", - "[flaml.automl: 07-06 10:20:15] {1160} INFO - at 9.0s,\tbest xgboost's error=0.3504,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:15] {1012} INFO - iteration 42, current learner extra_tree\n", - "[flaml.automl: 07-06 10:20:15] {1160} INFO - at 9.0s,\tbest extra_tree's error=0.3918,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:15] {1012} INFO - iteration 43, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:16] {1160} INFO - at 9.2s,\tbest lgbm's error=0.3681,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:16] {1012} INFO - iteration 44, current learner xgboost\n", - "[flaml.automl: 07-06 10:20:22] {1160} INFO - at 15.9s,\tbest xgboost's error=0.3504,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:22] {1012} INFO - iteration 45, current learner extra_tree\n", - "[flaml.automl: 07-06 10:20:22] {1160} INFO - at 16.1s,\tbest extra_tree's error=0.3883,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:22] {1012} INFO - iteration 46, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:23] {1160} INFO - at 16.2s,\tbest lgbm's error=0.3681,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:23] {1012} INFO - iteration 47, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:23] {1160} INFO - at 16.4s,\tbest lgbm's error=0.3607,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:23] {1012} INFO - iteration 48, current learner rf\n", - "[flaml.automl: 07-06 10:20:23] {1160} INFO - at 16.5s,\tbest rf's error=0.4019,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:23] {1012} INFO - iteration 49, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:23] {1160} INFO - at 16.7s,\tbest lgbm's error=0.3607,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:23] {1012} INFO - iteration 50, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:23] {1160} INFO - at 16.8s,\tbest lgbm's error=0.3607,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:23] {1012} INFO - iteration 51, current learner extra_tree\n", - "[flaml.automl: 07-06 10:20:23] {1160} INFO - at 16.9s,\tbest extra_tree's error=0.3883,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:23] {1012} INFO - iteration 52, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:23] {1160} INFO - at 17.1s,\tbest lgbm's error=0.3591,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:23] {1012} INFO - iteration 53, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:24] {1160} INFO - at 17.3s,\tbest lgbm's error=0.3591,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:24] {1012} INFO - iteration 54, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:24] {1160} INFO - at 17.6s,\tbest lgbm's error=0.3591,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:24] {1012} INFO - iteration 55, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:24] {1160} INFO - at 17.7s,\tbest lgbm's error=0.3591,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:24] {1012} INFO - iteration 56, current learner extra_tree\n", - "[flaml.automl: 07-06 10:20:24] {1160} INFO - at 18.0s,\tbest extra_tree's error=0.3877,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:24] {1012} INFO - iteration 57, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:25] {1160} INFO - at 18.3s,\tbest lgbm's error=0.3532,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:25] {1012} INFO - iteration 58, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:25] {1160} INFO - at 18.4s,\tbest lgbm's error=0.3532,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:25] {1012} INFO - iteration 59, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:25] {1160} INFO - at 18.9s,\tbest lgbm's error=0.3532,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:25] {1012} INFO - iteration 60, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:25] {1160} INFO - at 19.1s,\tbest lgbm's error=0.3532,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:25] {1012} INFO - iteration 61, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:26] {1160} INFO - at 19.9s,\tbest lgbm's error=0.3532,\tbest xgboost's error=0.3504\n", - "[flaml.automl: 07-06 10:20:26] {1012} INFO - iteration 62, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:28] {1160} INFO - at 21.5s,\tbest lgbm's error=0.3476,\tbest lgbm's error=0.3476\n", - "[flaml.automl: 07-06 10:20:28] {1012} INFO - iteration 63, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:29] {1160} INFO - at 22.9s,\tbest lgbm's error=0.3476,\tbest lgbm's error=0.3476\n", - "[flaml.automl: 07-06 10:20:29] {1012} INFO - iteration 64, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:31] {1160} INFO - at 24.8s,\tbest lgbm's error=0.3470,\tbest lgbm's error=0.3470\n", - "[flaml.automl: 07-06 10:20:31] {1012} INFO - iteration 65, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:33] {1160} INFO - at 26.2s,\tbest lgbm's error=0.3470,\tbest lgbm's error=0.3470\n", - "[flaml.automl: 07-06 10:20:33] {1012} INFO - iteration 66, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:35] {1160} INFO - at 28.7s,\tbest lgbm's error=0.3470,\tbest lgbm's error=0.3470\n", - "[flaml.automl: 07-06 10:20:35] {1012} INFO - iteration 67, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:36] {1160} INFO - at 29.8s,\tbest lgbm's error=0.3470,\tbest lgbm's error=0.3470\n", - "[flaml.automl: 07-06 10:20:36] {1012} INFO - iteration 68, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:42] {1160} INFO - at 35.3s,\tbest lgbm's error=0.3321,\tbest lgbm's error=0.3321\n", - "[flaml.automl: 07-06 10:20:42] {1012} INFO - iteration 69, current learner lrl1\n", - "No low-cost partial config given to the search algorithm. For cost-frugal search, consider providing low-cost values for cost-related hps via 'low_cost_partial_config'.\n", - "/Users/qingyun/miniconda3/envs/py38/lib/python3.8/site-packages/sklearn/linear_model/_sag.py:328: ConvergenceWarning: The max_iter was reached which means the coef_ did not converge\n", - " warnings.warn(\"The max_iter was reached which means \"\n", - "[flaml.automl: 07-06 10:20:42] {1160} INFO - at 35.5s,\tbest lrl1's error=0.4338,\tbest lgbm's error=0.3321\n", - "[flaml.automl: 07-06 10:20:42] {1012} INFO - iteration 70, current learner lrl1\n", - "/Users/qingyun/miniconda3/envs/py38/lib/python3.8/site-packages/sklearn/linear_model/_sag.py:328: ConvergenceWarning: The max_iter was reached which means the coef_ did not converge\n", - " warnings.warn(\"The max_iter was reached which means \"\n", - "[flaml.automl: 07-06 10:20:42] {1160} INFO - at 35.6s,\tbest lrl1's error=0.4338,\tbest lgbm's error=0.3321\n", - "[flaml.automl: 07-06 10:20:42] {1012} INFO - iteration 71, current learner lrl1\n", - "/Users/qingyun/miniconda3/envs/py38/lib/python3.8/site-packages/sklearn/linear_model/_sag.py:328: ConvergenceWarning: The max_iter was reached which means the coef_ did not converge\n", - " warnings.warn(\"The max_iter was reached which means \"\n", - "[flaml.automl: 07-06 10:20:42] {1160} INFO - at 35.8s,\tbest lrl1's error=0.4338,\tbest lgbm's error=0.3321\n", - "[flaml.automl: 07-06 10:20:42] {1012} INFO - iteration 72, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:46] {1160} INFO - at 40.1s,\tbest lgbm's error=0.3321,\tbest lgbm's error=0.3321\n", - "[flaml.automl: 07-06 10:20:46] {1012} INFO - iteration 73, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:55] {1160} INFO - at 48.6s,\tbest lgbm's error=0.3281,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:20:55] {1012} INFO - iteration 74, current learner extra_tree\n", - "[flaml.automl: 07-06 10:20:55] {1160} INFO - at 48.8s,\tbest extra_tree's error=0.3875,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:20:55] {1012} INFO - iteration 75, current learner lgbm\n", - "[flaml.automl: 07-06 10:20:58] {1160} INFO - at 51.1s,\tbest lgbm's error=0.3281,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:20:58] {1012} INFO - iteration 76, current learner catboost\n", - "[flaml.automl: 07-06 10:20:58] {1160} INFO - at 52.0s,\tbest catboost's error=0.3614,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:20:58] {1012} INFO - iteration 77, current learner lgbm\n", - "[flaml.automl: 07-06 10:21:34] {1160} INFO - at 88.0s,\tbest lgbm's error=0.3281,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:21:34] {1012} INFO - iteration 78, current learner lgbm\n", - "[flaml.automl: 07-06 10:21:43] {1160} INFO - at 96.5s,\tbest lgbm's error=0.3281,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:21:43] {1012} INFO - iteration 79, current learner catboost\n", - "[flaml.automl: 07-06 10:21:44] {1160} INFO - at 97.3s,\tbest catboost's error=0.3550,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:21:44] {1012} INFO - iteration 80, current learner catboost\n", - "[flaml.automl: 07-06 10:21:48] {1160} INFO - at 101.7s,\tbest catboost's error=0.3550,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:21:48] {1012} INFO - iteration 81, current learner lgbm\n", - "[flaml.automl: 07-06 10:21:54] {1160} INFO - at 107.7s,\tbest lgbm's error=0.3281,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:21:54] {1012} INFO - iteration 82, current learner extra_tree\n", - "[flaml.automl: 07-06 10:21:54] {1160} INFO - at 108.0s,\tbest extra_tree's error=0.3875,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:21:54] {1012} INFO - iteration 83, current learner rf\n", - "[flaml.automl: 07-06 10:21:54] {1160} INFO - at 108.0s,\tbest rf's error=0.4019,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:21:54] {1012} INFO - iteration 84, current learner catboost\n", - "[flaml.automl: 07-06 10:21:58] {1160} INFO - at 111.4s,\tbest catboost's error=0.3488,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:21:58] {1012} INFO - iteration 85, current learner catboost\n", - "[flaml.automl: 07-06 10:22:39] {1160} INFO - at 152.8s,\tbest catboost's error=0.3488,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:22:39] {1012} INFO - iteration 86, current learner catboost\n", - "[flaml.automl: 07-06 10:22:44] {1160} INFO - at 157.5s,\tbest catboost's error=0.3472,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:22:44] {1012} INFO - iteration 87, current learner rf\n", - "[flaml.automl: 07-06 10:22:44] {1160} INFO - at 157.7s,\tbest rf's error=0.4019,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:22:44] {1012} INFO - iteration 88, current learner rf\n", - "[flaml.automl: 07-06 10:22:45] {1160} INFO - at 158.1s,\tbest rf's error=0.3922,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:22:45] {1012} INFO - iteration 89, current learner rf\n", - "[flaml.automl: 07-06 10:22:45] {1160} INFO - at 158.5s,\tbest rf's error=0.3922,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:22:45] {1012} INFO - iteration 90, current learner rf\n", - "[flaml.automl: 07-06 10:22:45] {1160} INFO - at 158.9s,\tbest rf's error=0.3922,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:22:45] {1012} INFO - iteration 91, current learner rf\n", - "[flaml.automl: 07-06 10:22:46] {1160} INFO - at 159.6s,\tbest rf's error=0.3851,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:22:46] {1012} INFO - iteration 92, current learner rf\n", - "[flaml.automl: 07-06 10:22:46] {1160} INFO - at 159.9s,\tbest rf's error=0.3851,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:22:46] {1012} INFO - iteration 93, current learner extra_tree\n", - "[flaml.automl: 07-06 10:22:46] {1160} INFO - at 160.0s,\tbest extra_tree's error=0.3875,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:22:46] {1012} INFO - iteration 94, current learner rf\n", - "[flaml.automl: 07-06 10:22:47] {1160} INFO - at 160.5s,\tbest rf's error=0.3851,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:22:47] {1012} INFO - iteration 95, current learner rf\n", - "[flaml.automl: 07-06 10:22:48] {1160} INFO - at 161.2s,\tbest rf's error=0.3844,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:22:48] {1012} INFO - iteration 96, current learner lgbm\n", - "[flaml.automl: 07-06 10:23:04] {1160} INFO - at 178.0s,\tbest lgbm's error=0.3281,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:23:04] {1012} INFO - iteration 97, current learner extra_tree\n", - "[flaml.automl: 07-06 10:23:05] {1160} INFO - at 178.4s,\tbest extra_tree's error=0.3860,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:23:05] {1012} INFO - iteration 98, current learner rf\n", - "[flaml.automl: 07-06 10:23:05] {1160} INFO - at 178.8s,\tbest rf's error=0.3844,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:23:05] {1012} INFO - iteration 99, current learner extra_tree\n", - "[flaml.automl: 07-06 10:23:06] {1160} INFO - at 179.6s,\tbest extra_tree's error=0.3824,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:23:06] {1012} INFO - iteration 100, current learner extra_tree\n", - "[flaml.automl: 07-06 10:23:06] {1160} INFO - at 180.0s,\tbest extra_tree's error=0.3824,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:23:06] {1012} INFO - iteration 101, current learner lgbm\n", - "[flaml.automl: 07-06 10:23:11] {1160} INFO - at 184.2s,\tbest lgbm's error=0.3281,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:23:11] {1012} INFO - iteration 102, current learner extra_tree\n", - "[flaml.automl: 07-06 10:23:12] {1160} INFO - at 185.7s,\tbest extra_tree's error=0.3824,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:23:12] {1012} INFO - iteration 103, current learner extra_tree\n", - "[flaml.automl: 07-06 10:23:13] {1160} INFO - at 186.2s,\tbest extra_tree's error=0.3824,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:23:13] {1012} INFO - iteration 104, current learner lgbm\n", - "[flaml.automl: 07-06 10:23:55] {1160} INFO - at 228.7s,\tbest lgbm's error=0.3281,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:23:55] {1012} INFO - iteration 105, current learner extra_tree\n", - "[flaml.automl: 07-06 10:23:55] {1160} INFO - at 229.1s,\tbest extra_tree's error=0.3824,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:23:55] {1012} INFO - iteration 106, current learner lgbm\n", - "[flaml.automl: 07-06 10:23:58] {1160} INFO - at 231.2s,\tbest lgbm's error=0.3281,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:23:58] {1012} INFO - iteration 107, current learner catboost\n", - "[flaml.automl: 07-06 10:24:00] {1160} INFO - at 233.9s,\tbest catboost's error=0.3472,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:24:00] {1012} INFO - iteration 108, current learner extra_tree\n", - "[flaml.automl: 07-06 10:24:01] {1160} INFO - at 234.1s,\tbest extra_tree's error=0.3824,\tbest lgbm's error=0.3281\n", - "[flaml.automl: 07-06 10:24:01] {1012} INFO - iteration 109, current learner lgbm\n", - "[flaml.automl: 07-06 10:24:09] {1160} INFO - at 242.2s,\tbest lgbm's error=0.3261,\tbest lgbm's error=0.3261\n", - "[flaml.automl: 07-06 10:24:09] {1012} INFO - iteration 110, current learner extra_tree\n", - "[flaml.automl: 07-06 10:24:09] {1160} INFO - at 243.0s,\tbest extra_tree's error=0.3824,\tbest lgbm's error=0.3261\n", - "[flaml.automl: 07-06 10:24:09] {1012} INFO - iteration 111, current learner extra_tree\n", - "[flaml.automl: 07-06 10:24:12] {1160} INFO - at 245.6s,\tbest extra_tree's error=0.3813,\tbest lgbm's error=0.3261\n", - "[flaml.automl: 07-06 10:24:12] {1012} INFO - iteration 112, current learner lgbm\n", - "[flaml.automl: 07-06 10:24:21] {1160} INFO - at 254.3s,\tbest lgbm's error=0.3261,\tbest lgbm's error=0.3261\n", - "[flaml.automl: 07-06 10:24:21] {1012} INFO - iteration 113, current learner extra_tree\n", - "[flaml.automl: 07-06 10:24:25] {1160} INFO - at 258.7s,\tbest extra_tree's error=0.3813,\tbest lgbm's error=0.3261\n", - "[flaml.automl: 07-06 10:24:25] {1012} INFO - iteration 114, current learner rf\n", - "[flaml.automl: 07-06 10:24:26] {1160} INFO - at 259.7s,\tbest rf's error=0.3821,\tbest lgbm's error=0.3261\n", - "[flaml.automl: 07-06 10:24:26] {1012} INFO - iteration 115, current learner lrl1\n", - "/Users/qingyun/miniconda3/envs/py38/lib/python3.8/site-packages/sklearn/linear_model/_sag.py:328: ConvergenceWarning: The max_iter was reached which means the coef_ did not converge\n", - " warnings.warn(\"The max_iter was reached which means \"\n", - "[flaml.automl: 07-06 10:24:26] {1160} INFO - at 259.9s,\tbest lrl1's error=0.4338,\tbest lgbm's error=0.3261\n", - "[flaml.automl: 07-06 10:24:26] {1012} INFO - iteration 116, current learner lgbm\n", - "[flaml.automl: 07-06 10:24:36] {1160} INFO - at 269.8s,\tbest lgbm's error=0.3261,\tbest lgbm's error=0.3261\n", - "[flaml.automl: 07-06 10:24:36] {1012} INFO - iteration 117, current learner lgbm\n", - "[flaml.automl: 07-06 10:24:42] {1160} INFO - at 276.0s,\tbest lgbm's error=0.3261,\tbest lgbm's error=0.3261\n", - "[flaml.automl: 07-06 10:24:42] {1012} INFO - iteration 118, current learner catboost\n", - "[flaml.automl: 07-06 10:24:46] {1160} INFO - at 279.5s,\tbest catboost's error=0.3472,\tbest lgbm's error=0.3261\n", - "[flaml.automl: 07-06 10:24:46] {1012} INFO - iteration 119, current learner rf\n", - "[flaml.automl: 07-06 10:24:47] {1160} INFO - at 280.3s,\tbest rf's error=0.3815,\tbest lgbm's error=0.3261\n", - "[flaml.automl: 07-06 10:24:47] {1012} INFO - iteration 120, current learner lgbm\n", - "[flaml.automl: 07-06 10:24:51] {1160} INFO - at 284.2s,\tbest lgbm's error=0.3261,\tbest lgbm's error=0.3261\n", - "[flaml.automl: 07-06 10:24:58] {1183} INFO - retrain lgbm for 7.5s\n", - "[flaml.automl: 07-06 10:24:58] {1012} INFO - iteration 121, current learner rf\n", - "[flaml.automl: 07-06 10:24:59] {1160} INFO - at 292.4s,\tbest rf's error=0.3815,\tbest lgbm's error=0.3261\n", - "[flaml.automl: 07-06 10:25:06] {1183} INFO - retrain rf for 7.5s\n", - "[flaml.automl: 07-06 10:25:06] {1206} INFO - selected model: LGBMClassifier(colsample_bytree=0.7264845266978395,\n", - " learning_rate=0.19101023272120005, max_bin=256,\n", - " min_child_samples=38, n_estimators=96, num_leaves=1176,\n", - " objective='binary', reg_alpha=0.23464496750365973,\n", - " reg_lambda=381.05540209167094, subsample=0.8560685526719122)\n", - "[flaml.automl: 07-06 10:25:06] {963} INFO - fit succeeded\n" - ] - } - ], - "source": [ - "'''The main flaml automl API'''\n", - "automl.fit(X_train=X_train, y_train=y_train, **settings)" - ] + } }, { "cell_type": "markdown", + "source": [ + "### Best model and metric" + ], "metadata": { "slideshow": { "slide_type": "slide" } - }, - "source": [ - "### Best model and metric" - ] + } }, { "cell_type": "code", "execution_count": 5, - "metadata": { - "slideshow": { - "slide_type": "slide" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Best ML leaner: lgbm\n", - "Best hyperparmeter config: {'n_estimators': 96.0, 'num_leaves': 1176.0, 'min_child_samples': 38.0, 'learning_rate': 0.19101023272120005, 'subsample': 0.8560685526719122, 'log_max_bin': 9.0, 'colsample_bytree': 0.7264845266978395, 'reg_alpha': 0.23464496750365973, 'reg_lambda': 381.05540209167094, 'FLAML_sample_size': 364083}\n", - "Best accuracy on validation data: 0.6739\n", - "Training duration of best run: 8.084 s\n" - ] - } - ], "source": [ "''' retrieve best config and best learner'''\n", "print('Best ML leaner:', automl.best_estimator)\n", "print('Best hyperparmeter config:', automl.best_config)\n", "print('Best accuracy on validation data: {0:.4g}'.format(1-automl.best_loss))\n", "print('Training duration of best run: {0:.4g} s'.format(automl.best_config_train_time))" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, + ], "outputs": [ { - "data": { - "text/plain": [ - "LGBMClassifier(colsample_bytree=0.6204654035998071,\n", - " learning_rate=0.17783122919583272, max_bin=16,\n", - " min_child_samples=17, n_estimators=197, num_leaves=340,\n", - " objective='binary', reg_alpha=0.07967521254431058,\n", - " reg_lambda=6.332908973055842, subsample=0.8413048297641477)" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" + "output_type": "stream", + "name": "stdout", + "text": [ + "Best ML leaner: lgbm\n", + "Best hyperparmeter config: {'n_estimators': 2687, 'num_leaves': 21, 'min_child_samples': 44, 'learning_rate': 0.10600185051767465, 'subsample': 1.0, 'log_max_bin': 8, 'colsample_bytree': 0.8371742593966071, 'reg_alpha': 0.0027205185280732864, 'reg_lambda': 2.0031491728266557, 'FLAML_sample_size': 364083}\n", + "Best accuracy on validation data: 0.6723\n", + "Training duration of best run: 29.51 s\n" + ] } ], - "source": [ - "automl.model.estimator" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [], - "source": [ - "''' pickle and save the automl object '''\n", - "import pickle\n", - "with open('automl.pkl', 'wb') as f:\n", - " pickle.dump(automl, f, pickle.HIGHEST_PROTOCOL)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] - }, + } + }, + { + "cell_type": "code", + "execution_count": 6, + "source": [ + "automl.model.estimator" + ], "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Predicted labels [1 0 1 ... 1 0 0]\n", - "True labels [0 0 0 ... 0 1 0]\n" - ] + "output_type": "execute_result", + "data": { + "text/plain": [ + "LGBMClassifier(colsample_bytree=0.8371742593966071,\n", + " learning_rate=0.10600185051767465, max_bin=128,\n", + " min_child_samples=44, n_estimators=2687, num_leaves=21,\n", + " objective='binary', reg_alpha=0.0027205185280732864,\n", + " reg_lambda=2.0031491728266557, verbose=-1)" + ] + }, + "metadata": {}, + "execution_count": 6 } ], + "metadata": { + "slideshow": { + "slide_type": "slide" + } + } + }, + { + "cell_type": "code", + "execution_count": 7, + "source": [ + "''' pickle and save the automl object '''\n", + "import pickle\n", + "with open('automl.pkl', 'wb') as f:\n", + " pickle.dump(automl, f, pickle.HIGHEST_PROTOCOL)" + ], + "outputs": [], + "metadata": { + "slideshow": { + "slide_type": "slide" + } + } + }, + { + "cell_type": "code", + "execution_count": 8, "source": [ "''' compute predictions of testing dataset ''' \n", "y_pred = automl.predict(X_test)\n", "print('Predicted labels', y_pred)\n", "print('True labels', y_test)\n", "y_pred_proba = automl.predict_proba(X_test)[:,1]" - ] - }, - { - "cell_type": "code", - "execution_count": 9, + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Predicted labels ['1' '0' '1' ... '1' '0' '0']\n", + "True labels 118331 0\n", + "328182 0\n", + "335454 0\n", + "520591 1\n", + "344651 0\n", + " ..\n", + "367080 0\n", + "203510 1\n", + "254894 0\n", + "296512 1\n", + "362444 0\n", + "Name: Delay, Length: 134846, dtype: category\n", + "Categories (2, object): ['0' < '1']\n" + ] + } + ], "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "accuracy = 0.6715957462586951\n", - "roc_auc = 0.7253027586499301\n", - "log_loss = 0.6034784793498795\n", - "f1 = 0.5884386617100371\n" - ] - } - ], + } + }, + { + "cell_type": "code", + "execution_count": 9, "source": [ "''' compute different metric values on testing dataset'''\n", "from flaml.ml import sklearn_metric_loss_score\n", "print('accuracy', '=', 1 - sklearn_metric_loss_score('accuracy', y_pred, y_test))\n", "print('roc_auc', '=', 1 - sklearn_metric_loss_score('roc_auc', y_pred_proba, y_test))\n", "print('log_loss', '=', sklearn_metric_loss_score('log_loss', y_pred_proba, y_test))" - ] - }, - { - "cell_type": "markdown", + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "accuracy = 0.6721815997508269\n", + "roc_auc = 0.7257907244977934\n", + "log_loss = 0.6031168823610242\n" + ] + } + ], "metadata": { "slideshow": { "slide_type": "slide" - } - }, + }, + "tags": [] + } + }, + { + "cell_type": "markdown", "source": [ "See Section 4 for an accuracy comparison with default LightGBM and XGBoost.\n", "\n", "### Log history" - ] + ], + "metadata": { + "slideshow": { + "slide_type": "slide" + } + } }, { "cell_type": "code", "execution_count": 10, + "source": [ + "from flaml.data import get_output_from_log\n", + "time_history, best_valid_loss_history, valid_loss_history, config_history, train_loss_history = \\\n", + " get_output_from_log(filename=settings['log_file_name'], time_budget=300)\n", + "for config in config_history:\n", + " print(config)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{'Current Learner': 'lgbm', 'Current Sample': 10000, 'Current Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 20, 'learning_rate': 0.09999999999999995, 'subsample': 1.0, 'log_max_bin': 8, 'colsample_bytree': 1.0, 'reg_alpha': 0.0009765625, 'reg_lambda': 1.0, 'FLAML_sample_size': 10000}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 20, 'learning_rate': 0.09999999999999995, 'subsample': 1.0, 'log_max_bin': 8, 'colsample_bytree': 1.0, 'reg_alpha': 0.0009765625, 'reg_lambda': 1.0, 'FLAML_sample_size': 10000}}\n", + "{'Current Learner': 'lgbm', 'Current Sample': 10000, 'Current Hyper-parameters': {'n_estimators': 12, 'num_leaves': 4, 'min_child_samples': 30, 'learning_rate': 0.18850082505120694, 'subsample': 1.0, 'log_max_bin': 10, 'colsample_bytree': 1.0, 'reg_alpha': 0.0009765625, 'reg_lambda': 0.43802345595978204, 'FLAML_sample_size': 10000}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 12, 'num_leaves': 4, 'min_child_samples': 30, 'learning_rate': 0.18850082505120694, 'subsample': 1.0, 'log_max_bin': 10, 'colsample_bytree': 1.0, 'reg_alpha': 0.0009765625, 'reg_lambda': 0.43802345595978204, 'FLAML_sample_size': 10000}}\n", + "{'Current Learner': 'lgbm', 'Current Sample': 10000, 'Current Hyper-parameters': {'n_estimators': 23, 'num_leaves': 4, 'min_child_samples': 39, 'learning_rate': 0.4839966785164543, 'subsample': 1.0, 'log_max_bin': 9, 'colsample_bytree': 0.8499027725496043, 'reg_alpha': 0.0015851927568202393, 'reg_lambda': 1.9570976003429281, 'FLAML_sample_size': 10000}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 23, 'num_leaves': 4, 'min_child_samples': 39, 'learning_rate': 0.4839966785164543, 'subsample': 1.0, 'log_max_bin': 9, 'colsample_bytree': 0.8499027725496043, 'reg_alpha': 0.0015851927568202393, 'reg_lambda': 1.9570976003429281, 'FLAML_sample_size': 10000}}\n", + "{'Current Learner': 'lgbm', 'Current Sample': 40000, 'Current Hyper-parameters': {'n_estimators': 23, 'num_leaves': 4, 'min_child_samples': 39, 'learning_rate': 0.4839966785164543, 'subsample': 1.0, 'log_max_bin': 9, 'colsample_bytree': 0.8499027725496043, 'reg_alpha': 0.0015851927568202393, 'reg_lambda': 1.9570976003429281, 'FLAML_sample_size': 40000}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 23, 'num_leaves': 4, 'min_child_samples': 39, 'learning_rate': 0.4839966785164543, 'subsample': 1.0, 'log_max_bin': 9, 'colsample_bytree': 0.8499027725496043, 'reg_alpha': 0.0015851927568202393, 'reg_lambda': 1.9570976003429281, 'FLAML_sample_size': 40000}}\n", + "{'Current Learner': 'lgbm', 'Current Sample': 40000, 'Current Hyper-parameters': {'n_estimators': 74, 'num_leaves': 4, 'min_child_samples': 41, 'learning_rate': 0.17743258768982648, 'subsample': 1.0, 'log_max_bin': 7, 'colsample_bytree': 0.804982542436943, 'reg_alpha': 0.0009765625, 'reg_lambda': 3.547311998768578, 'FLAML_sample_size': 40000}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 74, 'num_leaves': 4, 'min_child_samples': 41, 'learning_rate': 0.17743258768982648, 'subsample': 1.0, 'log_max_bin': 7, 'colsample_bytree': 0.804982542436943, 'reg_alpha': 0.0009765625, 'reg_lambda': 3.547311998768578, 'FLAML_sample_size': 40000}}\n", + "{'Current Learner': 'lgbm', 'Current Sample': 40000, 'Current Hyper-parameters': {'n_estimators': 135, 'num_leaves': 7, 'min_child_samples': 21, 'learning_rate': 0.29597808772418305, 'subsample': 1.0, 'log_max_bin': 6, 'colsample_bytree': 0.7208090706891741, 'reg_alpha': 0.0017607866203119683, 'reg_lambda': 1.8488863473486183, 'FLAML_sample_size': 40000}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 135, 'num_leaves': 7, 'min_child_samples': 21, 'learning_rate': 0.29597808772418305, 'subsample': 1.0, 'log_max_bin': 6, 'colsample_bytree': 0.7208090706891741, 'reg_alpha': 0.0017607866203119683, 'reg_lambda': 1.8488863473486183, 'FLAML_sample_size': 40000}}\n", + "{'Current Learner': 'lgbm', 'Current Sample': 364083, 'Current Hyper-parameters': {'n_estimators': 135, 'num_leaves': 7, 'min_child_samples': 21, 'learning_rate': 0.29597808772418305, 'subsample': 1.0, 'log_max_bin': 6, 'colsample_bytree': 0.7208090706891741, 'reg_alpha': 0.0017607866203119683, 'reg_lambda': 1.8488863473486183, 'FLAML_sample_size': 364083}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 135, 'num_leaves': 7, 'min_child_samples': 21, 'learning_rate': 0.29597808772418305, 'subsample': 1.0, 'log_max_bin': 6, 'colsample_bytree': 0.7208090706891741, 'reg_alpha': 0.0017607866203119683, 'reg_lambda': 1.8488863473486183, 'FLAML_sample_size': 364083}}\n", + "{'Current Learner': 'lgbm', 'Current Sample': 364083, 'Current Hyper-parameters': {'n_estimators': 529, 'num_leaves': 20, 'min_child_samples': 35, 'learning_rate': 0.22270723105961662, 'subsample': 1.0, 'log_max_bin': 7, 'colsample_bytree': 0.7169048987045028, 'reg_alpha': 0.01040607895773376, 'reg_lambda': 4.44145781234249, 'FLAML_sample_size': 364083}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 529, 'num_leaves': 20, 'min_child_samples': 35, 'learning_rate': 0.22270723105961662, 'subsample': 1.0, 'log_max_bin': 7, 'colsample_bytree': 0.7169048987045028, 'reg_alpha': 0.01040607895773376, 'reg_lambda': 4.44145781234249, 'FLAML_sample_size': 364083}}\n", + "{'Current Learner': 'lgbm', 'Current Sample': 364083, 'Current Hyper-parameters': {'n_estimators': 2687, 'num_leaves': 21, 'min_child_samples': 44, 'learning_rate': 0.10600185051767465, 'subsample': 1.0, 'log_max_bin': 8, 'colsample_bytree': 0.8371742593966071, 'reg_alpha': 0.0027205185280732864, 'reg_lambda': 2.0031491728266557, 'FLAML_sample_size': 364083}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 2687, 'num_leaves': 21, 'min_child_samples': 44, 'learning_rate': 0.10600185051767465, 'subsample': 1.0, 'log_max_bin': 8, 'colsample_bytree': 0.8371742593966071, 'reg_alpha': 0.0027205185280732864, 'reg_lambda': 2.0031491728266557, 'FLAML_sample_size': 364083}}\n" + ] + } + ], "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'Current Learner': 'lgbm', 'Current Sample': 10000, 'Current Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 20, 'learning_rate': 0.1, 'subsample': 1.0, 'log_max_bin': 8, 'colsample_bytree': 1.0, 'reg_alpha': 0.0009765625, 'reg_lambda': 1.0, 'FLAML_sample_size': 10000}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 20, 'learning_rate': 0.1, 'subsample': 1.0, 'log_max_bin': 8, 'colsample_bytree': 1.0, 'reg_alpha': 0.0009765625, 'reg_lambda': 1.0, 'FLAML_sample_size': 10000}}\n", - "{'Current Learner': 'xgboost', 'Current Sample': 10000, 'Current Hyper-parameters': {'n_estimators': 4.0, 'max_leaves': 4.0, 'min_child_weight': 3.8156120279609143, 'learning_rate': 0.03859136192132085, 'subsample': 1.0, 'colsample_bylevel': 0.8148474110627004, 'colsample_bytree': 0.9777234800442423, 'reg_alpha': 0.0009765625, 'reg_lambda': 5.525802807180917, 'FLAML_sample_size': 10000}, 'Best Learner': 'xgboost', 'Best Hyper-parameters': {'n_estimators': 4.0, 'max_leaves': 4.0, 'min_child_weight': 3.8156120279609143, 'learning_rate': 0.03859136192132085, 'subsample': 1.0, 'colsample_bylevel': 0.8148474110627004, 'colsample_bytree': 0.9777234800442423, 'reg_alpha': 0.0009765625, 'reg_lambda': 5.525802807180917, 'FLAML_sample_size': 10000}}\n", - "{'Current Learner': 'xgboost', 'Current Sample': 10000, 'Current Hyper-parameters': {'n_estimators': 4.0, 'max_leaves': 4.0, 'min_child_weight': 0.9999999999999981, 'learning_rate': 0.09999999999999995, 'subsample': 0.9266743941610592, 'colsample_bylevel': 1.0, 'colsample_bytree': 1.0, 'reg_alpha': 0.0013933617380144255, 'reg_lambda': 0.9999999999999992, 'FLAML_sample_size': 10000}, 'Best Learner': 'xgboost', 'Best Hyper-parameters': {'n_estimators': 4.0, 'max_leaves': 4.0, 'min_child_weight': 0.9999999999999981, 'learning_rate': 0.09999999999999995, 'subsample': 0.9266743941610592, 'colsample_bylevel': 1.0, 'colsample_bytree': 1.0, 'reg_alpha': 0.0013933617380144255, 'reg_lambda': 0.9999999999999992, 'FLAML_sample_size': 10000}}\n", - "{'Current Learner': 'xgboost', 'Current Sample': 10000, 'Current Hyper-parameters': {'n_estimators': 4.0, 'max_leaves': 4.0, 'min_child_weight': 7.108570598095146, 'learning_rate': 0.3879619372390862, 'subsample': 0.8513627344387318, 'colsample_bylevel': 1.0, 'colsample_bytree': 0.946138073111236, 'reg_alpha': 0.0018311776973217071, 'reg_lambda': 1.5417906668008217, 'FLAML_sample_size': 10000}, 'Best Learner': 'xgboost', 'Best Hyper-parameters': {'n_estimators': 4.0, 'max_leaves': 4.0, 'min_child_weight': 7.108570598095146, 'learning_rate': 0.3879619372390862, 'subsample': 0.8513627344387318, 'colsample_bylevel': 1.0, 'colsample_bytree': 0.946138073111236, 'reg_alpha': 0.0018311776973217071, 'reg_lambda': 1.5417906668008217, 'FLAML_sample_size': 10000}}\n", - "{'Current Learner': 'xgboost', 'Current Sample': 10000, 'Current Hyper-parameters': {'n_estimators': 4.0, 'max_leaves': 8.0, 'min_child_weight': 0.9999999999999981, 'learning_rate': 0.09999999999999995, 'subsample': 0.9266743941610592, 'colsample_bylevel': 0.9168331919232143, 'colsample_bytree': 1.0, 'reg_alpha': 0.0013933617380144255, 'reg_lambda': 0.9999999999999984, 'FLAML_sample_size': 10000}, 'Best Learner': 'xgboost', 'Best Hyper-parameters': {'n_estimators': 4.0, 'max_leaves': 8.0, 'min_child_weight': 0.9999999999999981, 'learning_rate': 0.09999999999999995, 'subsample': 0.9266743941610592, 'colsample_bylevel': 0.9168331919232143, 'colsample_bytree': 1.0, 'reg_alpha': 0.0013933617380144255, 'reg_lambda': 0.9999999999999984, 'FLAML_sample_size': 10000}}\n", - "{'Current Learner': 'xgboost', 'Current Sample': 10000, 'Current Hyper-parameters': {'n_estimators': 12.0, 'max_leaves': 8.0, 'min_child_weight': 3.1718521304832716, 'learning_rate': 0.18850082505120708, 'subsample': 0.9647550813352507, 'colsample_bylevel': 1.0, 'colsample_bytree': 1.0, 'reg_alpha': 0.0010352743615901622, 'reg_lambda': 0.4380234559597813, 'FLAML_sample_size': 10000}, 'Best Learner': 'xgboost', 'Best Hyper-parameters': {'n_estimators': 12.0, 'max_leaves': 8.0, 'min_child_weight': 3.1718521304832716, 'learning_rate': 0.18850082505120708, 'subsample': 0.9647550813352507, 'colsample_bylevel': 1.0, 'colsample_bytree': 1.0, 'reg_alpha': 0.0010352743615901622, 'reg_lambda': 0.4380234559597813, 'FLAML_sample_size': 10000}}\n", - "{'Current Learner': 'xgboost', 'Current Sample': 10000, 'Current Hyper-parameters': {'n_estimators': 23.0, 'max_leaves': 6.0, 'min_child_weight': 6.460451502502143, 'learning_rate': 0.4839966785164543, 'subsample': 1.0, 'colsample_bylevel': 0.8811171114303163, 'colsample_bytree': 0.8499027725496043, 'reg_alpha': 0.0016804960453779686, 'reg_lambda': 1.9570976003429221, 'FLAML_sample_size': 10000}, 'Best Learner': 'xgboost', 'Best Hyper-parameters': {'n_estimators': 23.0, 'max_leaves': 6.0, 'min_child_weight': 6.460451502502143, 'learning_rate': 0.4839966785164543, 'subsample': 1.0, 'colsample_bylevel': 0.8811171114303163, 'colsample_bytree': 0.8499027725496043, 'reg_alpha': 0.0016804960453779686, 'reg_lambda': 1.9570976003429221, 'FLAML_sample_size': 10000}}\n", - "{'Current Learner': 'xgboost', 'Current Sample': 40000, 'Current Hyper-parameters': {'n_estimators': 23.0, 'max_leaves': 6.0, 'min_child_weight': 6.460451502502143, 'learning_rate': 0.4839966785164543, 'subsample': 1.0, 'colsample_bylevel': 0.8811171114303163, 'colsample_bytree': 0.8499027725496043, 'reg_alpha': 0.0016804960453779686, 'reg_lambda': 1.9570976003429221, 'FLAML_sample_size': 40000}, 'Best Learner': 'xgboost', 'Best Hyper-parameters': {'n_estimators': 23.0, 'max_leaves': 6.0, 'min_child_weight': 6.460451502502143, 'learning_rate': 0.4839966785164543, 'subsample': 1.0, 'colsample_bylevel': 0.8811171114303163, 'colsample_bytree': 0.8499027725496043, 'reg_alpha': 0.0016804960453779686, 'reg_lambda': 1.9570976003429221, 'FLAML_sample_size': 40000}}\n", - "{'Current Learner': 'xgboost', 'Current Sample': 40000, 'Current Hyper-parameters': {'n_estimators': 74.0, 'max_leaves': 4.0, 'min_child_weight': 7.678451859748732, 'learning_rate': 0.17743258768982648, 'subsample': 1.0, 'colsample_bylevel': 0.6993908476086765, 'colsample_bytree': 0.804982542436943, 'reg_alpha': 0.0009765625, 'reg_lambda': 3.547311998768567, 'FLAML_sample_size': 40000}, 'Best Learner': 'xgboost', 'Best Hyper-parameters': {'n_estimators': 74.0, 'max_leaves': 4.0, 'min_child_weight': 7.678451859748732, 'learning_rate': 0.17743258768982648, 'subsample': 1.0, 'colsample_bylevel': 0.6993908476086765, 'colsample_bytree': 0.804982542436943, 'reg_alpha': 0.0009765625, 'reg_lambda': 3.547311998768567, 'FLAML_sample_size': 40000}}\n", - "{'Current Learner': 'xgboost', 'Current Sample': 40000, 'Current Hyper-parameters': {'n_estimators': 135.0, 'max_leaves': 7.0, 'min_child_weight': 1.1024151666996367, 'learning_rate': 0.29597808772418305, 'subsample': 1.0, 'colsample_bylevel': 0.508550359279992, 'colsample_bytree': 0.7208090706891741, 'reg_alpha': 0.0017607866203119683, 'reg_lambda': 1.8488863473486097, 'FLAML_sample_size': 40000}, 'Best Learner': 'xgboost', 'Best Hyper-parameters': {'n_estimators': 135.0, 'max_leaves': 7.0, 'min_child_weight': 1.1024151666996367, 'learning_rate': 0.29597808772418305, 'subsample': 1.0, 'colsample_bylevel': 0.508550359279992, 'colsample_bytree': 0.7208090706891741, 'reg_alpha': 0.0017607866203119683, 'reg_lambda': 1.8488863473486097, 'FLAML_sample_size': 40000}}\n", - "{'Current Learner': 'xgboost', 'Current Sample': 40000, 'Current Hyper-parameters': {'n_estimators': 292.0, 'max_leaves': 16.0, 'min_child_weight': 0.8072004842817196, 'learning_rate': 0.09228694613650908, 'subsample': 0.8895588746662894, 'colsample_bylevel': 0.35630670144162413, 'colsample_bytree': 0.6863451794740817, 'reg_alpha': 0.0027488949929569983, 'reg_lambda': 0.7489028833779001, 'FLAML_sample_size': 40000}, 'Best Learner': 'xgboost', 'Best Hyper-parameters': {'n_estimators': 292.0, 'max_leaves': 16.0, 'min_child_weight': 0.8072004842817196, 'learning_rate': 0.09228694613650908, 'subsample': 0.8895588746662894, 'colsample_bylevel': 0.35630670144162413, 'colsample_bytree': 0.6863451794740817, 'reg_alpha': 0.0027488949929569983, 'reg_lambda': 0.7489028833779001, 'FLAML_sample_size': 40000}}\n", - "{'Current Learner': 'lgbm', 'Current Sample': 364083, 'Current Hyper-parameters': {'n_estimators': 29.0, 'num_leaves': 30.0, 'min_child_samples': 27.0, 'learning_rate': 0.3345600006903613, 'subsample': 1.0, 'log_max_bin': 6.0, 'colsample_bytree': 0.6138481769580465, 'reg_alpha': 0.02608844295136239, 'reg_lambda': 4.068656226566239, 'FLAML_sample_size': 364083}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 29.0, 'num_leaves': 30.0, 'min_child_samples': 27.0, 'learning_rate': 0.3345600006903613, 'subsample': 1.0, 'log_max_bin': 6.0, 'colsample_bytree': 0.6138481769580465, 'reg_alpha': 0.02608844295136239, 'reg_lambda': 4.068656226566239, 'FLAML_sample_size': 364083}}\n", - "{'Current Learner': 'lgbm', 'Current Sample': 364083, 'Current Hyper-parameters': {'n_estimators': 32.0, 'num_leaves': 66.0, 'min_child_samples': 30.0, 'learning_rate': 0.12647892799791985, 'subsample': 0.9860465287537004, 'log_max_bin': 6.0, 'colsample_bytree': 0.6645176750515542, 'reg_alpha': 0.0018225057315840252, 'reg_lambda': 30.9118880488899, 'FLAML_sample_size': 364083}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 32.0, 'num_leaves': 66.0, 'min_child_samples': 30.0, 'learning_rate': 0.12647892799791985, 'subsample': 0.9860465287537004, 'log_max_bin': 6.0, 'colsample_bytree': 0.6645176750515542, 'reg_alpha': 0.0018225057315840252, 'reg_lambda': 30.9118880488899, 'FLAML_sample_size': 364083}}\n", - "{'Current Learner': 'lgbm', 'Current Sample': 364083, 'Current Hyper-parameters': {'n_estimators': 125.0, 'num_leaves': 186.0, 'min_child_samples': 50.0, 'learning_rate': 0.0951684364825494, 'subsample': 1.0, 'log_max_bin': 7.0, 'colsample_bytree': 0.6606135030668829, 'reg_alpha': 0.01077083294762061, 'reg_lambda': 74.25759126075202, 'FLAML_sample_size': 364083}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 125.0, 'num_leaves': 186.0, 'min_child_samples': 50.0, 'learning_rate': 0.0951684364825494, 'subsample': 1.0, 'log_max_bin': 7.0, 'colsample_bytree': 0.6606135030668829, 'reg_alpha': 0.01077083294762061, 'reg_lambda': 74.25759126075202, 'FLAML_sample_size': 364083}}\n", - "{'Current Learner': 'lgbm', 'Current Sample': 364083, 'Current Hyper-parameters': {'n_estimators': 164.0, 'num_leaves': 304.0, 'min_child_samples': 75.0, 'learning_rate': 0.21886405778268478, 'subsample': 0.9048064340763577, 'log_max_bin': 9.0, 'colsample_bytree': 0.632220807242231, 'reg_alpha': 0.03154355161993957, 'reg_lambda': 190.9985711118577, 'FLAML_sample_size': 364083}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 164.0, 'num_leaves': 304.0, 'min_child_samples': 75.0, 'learning_rate': 0.21886405778268478, 'subsample': 0.9048064340763577, 'log_max_bin': 9.0, 'colsample_bytree': 0.632220807242231, 'reg_alpha': 0.03154355161993957, 'reg_lambda': 190.9985711118577, 'FLAML_sample_size': 364083}}\n" - ] - } - ], - "source": [ - "from flaml.data import get_output_from_log\n", - "time_history, best_valid_loss_history, valid_loss_history, config_history, train_loss_history = \\\n", - " get_output_from_log(filename=settings['log_file_name'], time_budget=60)\n", - "\n", - "for config in config_history:\n", - " print(config)" - ] + } }, { "cell_type": "code", "execution_count": 11, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "data": { - "image/png": "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", - "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", @@ -586,39 +579,54 @@ "plt.scatter(time_history, 1 - np.array(valid_loss_history))\n", "plt.step(time_history, 1 - np.array(best_valid_loss_history), where='post')\n", "plt.show()" - ] - }, - { - "cell_type": "markdown", + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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" + }, + "metadata": { + "needs_background": "light" + } + } + ], "metadata": { "slideshow": { "slide_type": "slide" } - }, + } + }, + { + "cell_type": "markdown", "source": [ "## 3. Customized Learner" - ] - }, - { - "cell_type": "markdown", + ], "metadata": { "slideshow": { "slide_type": "slide" } - }, + } + }, + { + "cell_type": "markdown", "source": [ "Some experienced automl users may have a preferred model to tune or may already have a reasonably by-hand-tuned model before launching the automl experiment. They need to select optimal configurations for the customized model mixed with standard built-in learners. \n", "\n", "FLAML can easily incorporate customized/new learners (preferably with sklearn API) provided by users in a real-time manner, as demonstrated below." - ] - }, - { - "cell_type": "markdown", + ], "metadata": { "slideshow": { "slide_type": "slide" } - }, + } + }, + { + "cell_type": "markdown", "source": [ "### Example of Regularized Greedy Forest\n", "\n", @@ -629,17 +637,16 @@ "* choose initial value corresponding to low cost for cost-related hyperparameters (e.g., initial value for max_leaf and n_iter should be small)\n", "\n", "In this example, the above information for RGF is wrapped in a python class called *MyRegularizedGreedyForest* that exposes the hyperparameters." - ] - }, - { - "cell_type": "code", - "execution_count": 12, + ], "metadata": { "slideshow": { "slide_type": "slide" } - }, - "outputs": [], + } + }, + { + "cell_type": "code", + "execution_count": 12, "source": [ "''' SKLearnEstimator is the super class for a sklearn learner '''\n", "from flaml.model import SKLearnEstimator\n", @@ -721,163 +728,44 @@ " '''[optional method] relative cost compared to lightgbm\n", " '''\n", " return 1.0\n" - ] - }, - { - "cell_type": "markdown", + ], + "outputs": [], "metadata": { "slideshow": { "slide_type": "slide" } - }, + } + }, + { + "cell_type": "markdown", "source": [ "### Add Customized Learner and Run FLAML AutoML\n", "\n", "After adding RGF into the list of learners, we run automl by tuning hyperpameters of RGF as well as the default learners. " - ] + ], + "metadata": { + "slideshow": { + "slide_type": "slide" + } + } }, { "cell_type": "code", "execution_count": 13, + "source": [ + "automl = AutoML()\n", + "automl.add_learner(learner_name='RGF', learner_class=MyRegularizedGreedyForest)" + ], + "outputs": [], "metadata": { "slideshow": { "slide_type": "slide" } - }, - "outputs": [], - "source": [ - "automl = AutoML()\n", - "automl.add_learner(learner_name='RGF', learner_class=MyRegularizedGreedyForest)" - ] + } }, { "cell_type": "code", "execution_count": 14, - "metadata": { - "slideshow": { - "slide_type": "slide" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[flaml.automl: 07-06 10:25:22] {908} INFO - Evaluation method: holdout\n", - "[flaml.automl: 07-06 10:25:22] {607} INFO - Using StratifiedKFold\n", - "[flaml.automl: 07-06 10:25:22] {929} INFO - Minimizing error metric: 1-accuracy\n", - "[flaml.automl: 07-06 10:25:22] {948} INFO - List of ML learners in AutoML Run: ['RGF', 'lgbm', 'rf', 'xgboost']\n", - "[flaml.automl: 07-06 10:25:22] {1012} INFO - iteration 0, current learner RGF\n", - "/Users/qingyun/miniconda3/envs/py38/lib/python3.8/site-packages/rgf/utils.py:224: UserWarning: Cannot find FastRGF executable files. FastRGF estimators will be unavailable for usage.\n", - " warnings.warn(\"Cannot find FastRGF executable files. \"\n", - "[flaml.automl: 07-06 10:25:23] {1160} INFO - at 1.3s,\tbest RGF's error=0.3840,\tbest RGF's error=0.3840\n", - "[flaml.automl: 07-06 10:25:23] {1012} INFO - iteration 1, current learner RGF\n", - "[flaml.automl: 07-06 10:25:24] {1160} INFO - at 1.9s,\tbest RGF's error=0.3840,\tbest RGF's error=0.3840\n", - "[flaml.automl: 07-06 10:25:24] {1012} INFO - iteration 2, current learner RGF\n", - "[flaml.automl: 07-06 10:25:24] {1160} INFO - at 2.5s,\tbest RGF's error=0.3840,\tbest RGF's error=0.3840\n", - "[flaml.automl: 07-06 10:25:24] {1012} INFO - iteration 3, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:24] {1160} INFO - at 2.5s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", - "[flaml.automl: 07-06 10:25:24] {1012} INFO - iteration 4, current learner RGF\n", - "[flaml.automl: 07-06 10:25:25] {1160} INFO - at 3.1s,\tbest RGF's error=0.3840,\tbest lgbm's error=0.3777\n", - "[flaml.automl: 07-06 10:25:25] {1012} INFO - iteration 5, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:25] {1160} INFO - at 3.2s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", - "[flaml.automl: 07-06 10:25:25] {1012} INFO - iteration 6, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:25] {1160} INFO - at 3.2s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", - "[flaml.automl: 07-06 10:25:25] {1012} INFO - iteration 7, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:25] {1160} INFO - at 3.3s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", - "[flaml.automl: 07-06 10:25:25] {1012} INFO - iteration 8, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:25] {1160} INFO - at 3.3s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", - "[flaml.automl: 07-06 10:25:25] {1012} INFO - iteration 9, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:25] {1160} INFO - at 3.5s,\tbest lgbm's error=0.3765,\tbest lgbm's error=0.3765\n", - "[flaml.automl: 07-06 10:25:25] {1012} INFO - iteration 10, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:26] {1160} INFO - at 3.6s,\tbest lgbm's error=0.3765,\tbest lgbm's error=0.3765\n", - "[flaml.automl: 07-06 10:25:26] {1012} INFO - iteration 11, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:26] {1160} INFO - at 3.8s,\tbest lgbm's error=0.3752,\tbest lgbm's error=0.3752\n", - "[flaml.automl: 07-06 10:25:26] {1012} INFO - iteration 12, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:26] {1160} INFO - at 4.0s,\tbest lgbm's error=0.3587,\tbest lgbm's error=0.3587\n", - "[flaml.automl: 07-06 10:25:26] {1012} INFO - iteration 13, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:26] {1160} INFO - at 4.2s,\tbest lgbm's error=0.3587,\tbest lgbm's error=0.3587\n", - "[flaml.automl: 07-06 10:25:26] {1012} INFO - iteration 14, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:26] {1160} INFO - at 4.5s,\tbest lgbm's error=0.3519,\tbest lgbm's error=0.3519\n", - "[flaml.automl: 07-06 10:25:26] {1012} INFO - iteration 15, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:27] {1160} INFO - at 4.7s,\tbest lgbm's error=0.3519,\tbest lgbm's error=0.3519\n", - "[flaml.automl: 07-06 10:25:27] {1012} INFO - iteration 16, current learner RGF\n", - "[flaml.automl: 07-06 10:25:27] {1160} INFO - at 5.3s,\tbest RGF's error=0.3840,\tbest lgbm's error=0.3519\n", - "[flaml.automl: 07-06 10:25:27] {1012} INFO - iteration 17, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:27] {1160} INFO - at 5.5s,\tbest lgbm's error=0.3519,\tbest lgbm's error=0.3519\n", - "[flaml.automl: 07-06 10:25:27] {1012} INFO - iteration 18, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:28] {1160} INFO - at 5.9s,\tbest lgbm's error=0.3519,\tbest lgbm's error=0.3519\n", - "[flaml.automl: 07-06 10:25:28] {1012} INFO - iteration 19, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:28] {1160} INFO - at 6.2s,\tbest lgbm's error=0.3519,\tbest lgbm's error=0.3519\n", - "[flaml.automl: 07-06 10:25:28] {1012} INFO - iteration 20, current learner RGF\n", - "[flaml.automl: 07-06 10:25:29] {1160} INFO - at 6.8s,\tbest RGF's error=0.3762,\tbest lgbm's error=0.3519\n", - "[flaml.automl: 07-06 10:25:29] {1012} INFO - iteration 21, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:31] {1160} INFO - at 8.6s,\tbest lgbm's error=0.3500,\tbest lgbm's error=0.3500\n", - "[flaml.automl: 07-06 10:25:31] {1012} INFO - iteration 22, current learner xgboost\n", - "[flaml.automl: 07-06 10:25:31] {1160} INFO - at 8.7s,\tbest xgboost's error=0.3787,\tbest lgbm's error=0.3500\n", - "[flaml.automl: 07-06 10:25:31] {1012} INFO - iteration 23, current learner xgboost\n", - "[flaml.automl: 07-06 10:25:31] {1160} INFO - at 8.7s,\tbest xgboost's error=0.3766,\tbest lgbm's error=0.3500\n", - "[flaml.automl: 07-06 10:25:31] {1012} INFO - iteration 24, current learner xgboost\n", - "[flaml.automl: 07-06 10:25:31] {1160} INFO - at 8.8s,\tbest xgboost's error=0.3765,\tbest lgbm's error=0.3500\n", - "[flaml.automl: 07-06 10:25:31] {1012} INFO - iteration 25, current learner rf\n", - "[flaml.automl: 07-06 10:25:31] {1160} INFO - at 8.9s,\tbest rf's error=0.4032,\tbest lgbm's error=0.3500\n", - "[flaml.automl: 07-06 10:25:31] {1012} INFO - iteration 26, current learner rf\n", - "[flaml.automl: 07-06 10:25:31] {1160} INFO - at 9.0s,\tbest rf's error=0.4032,\tbest lgbm's error=0.3500\n", - "[flaml.automl: 07-06 10:25:31] {1012} INFO - iteration 27, current learner rf\n", - "[flaml.automl: 07-06 10:25:31] {1160} INFO - at 9.0s,\tbest rf's error=0.4028,\tbest lgbm's error=0.3500\n", - "[flaml.automl: 07-06 10:25:31] {1012} INFO - iteration 28, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:32] {1160} INFO - at 10.5s,\tbest lgbm's error=0.3500,\tbest lgbm's error=0.3500\n", - "[flaml.automl: 07-06 10:25:32] {1012} INFO - iteration 29, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:35] {1160} INFO - at 13.0s,\tbest lgbm's error=0.3440,\tbest lgbm's error=0.3440\n", - "[flaml.automl: 07-06 10:25:35] {1012} INFO - iteration 30, current learner RGF\n", - "[flaml.automl: 07-06 10:25:36] {1160} INFO - at 13.6s,\tbest RGF's error=0.3762,\tbest lgbm's error=0.3440\n", - "[flaml.automl: 07-06 10:25:36] {1012} INFO - iteration 31, current learner RGF\n", - "[flaml.automl: 07-06 10:25:36] {1160} INFO - at 14.2s,\tbest RGF's error=0.3762,\tbest lgbm's error=0.3440\n", - "[flaml.automl: 07-06 10:25:36] {1012} INFO - iteration 32, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:38] {1160} INFO - at 15.8s,\tbest lgbm's error=0.3440,\tbest lgbm's error=0.3440\n", - "[flaml.automl: 07-06 10:25:38] {1012} INFO - iteration 33, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:42] {1160} INFO - at 19.9s,\tbest lgbm's error=0.3374,\tbest lgbm's error=0.3374\n", - "[flaml.automl: 07-06 10:25:42] {1012} INFO - iteration 34, current learner RGF\n", - "[flaml.automl: 07-06 10:25:43] {1160} INFO - at 20.8s,\tbest RGF's error=0.3759,\tbest lgbm's error=0.3374\n", - "[flaml.automl: 07-06 10:25:43] {1012} INFO - iteration 35, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:45] {1160} INFO - at 22.7s,\tbest lgbm's error=0.3374,\tbest lgbm's error=0.3374\n", - "[flaml.automl: 07-06 10:25:45] {1012} INFO - iteration 36, current learner xgboost\n", - "[flaml.automl: 07-06 10:25:45] {1160} INFO - at 22.8s,\tbest xgboost's error=0.3757,\tbest lgbm's error=0.3374\n", - "[flaml.automl: 07-06 10:25:45] {1012} INFO - iteration 37, current learner xgboost\n", - "[flaml.automl: 07-06 10:25:45] {1160} INFO - at 22.8s,\tbest xgboost's error=0.3693,\tbest lgbm's error=0.3374\n", - "[flaml.automl: 07-06 10:25:45] {1012} INFO - iteration 38, current learner xgboost\n", - "[flaml.automl: 07-06 10:25:45] {1160} INFO - at 22.9s,\tbest xgboost's error=0.3693,\tbest lgbm's error=0.3374\n", - "[flaml.automl: 07-06 10:25:45] {1012} INFO - iteration 39, current learner xgboost\n", - "[flaml.automl: 07-06 10:25:45] {1160} INFO - at 23.0s,\tbest xgboost's error=0.3617,\tbest lgbm's error=0.3374\n", - "[flaml.automl: 07-06 10:25:45] {1012} INFO - iteration 40, current learner xgboost\n", - "[flaml.automl: 07-06 10:25:45] {1160} INFO - at 23.0s,\tbest xgboost's error=0.3589,\tbest lgbm's error=0.3374\n", - "[flaml.automl: 07-06 10:25:45] {1012} INFO - iteration 41, current learner xgboost\n", - "[flaml.automl: 07-06 10:25:45] {1160} INFO - at 23.1s,\tbest xgboost's error=0.3589,\tbest lgbm's error=0.3374\n", - "[flaml.automl: 07-06 10:25:45] {1012} INFO - iteration 42, current learner lgbm\n", - "[flaml.automl: 07-06 10:25:59] {1160} INFO - at 37.3s,\tbest lgbm's error=0.3344,\tbest lgbm's error=0.3344\n", - "[flaml.automl: 07-06 10:25:59] {1012} INFO - iteration 43, current learner xgboost\n", - "[flaml.automl: 07-06 10:25:59] {1160} INFO - at 37.4s,\tbest xgboost's error=0.3589,\tbest lgbm's error=0.3344\n", - "[flaml.automl: 07-06 10:26:05] {1183} INFO - retrain xgboost for 6.1s\n", - "[flaml.automl: 07-06 10:26:05] {1012} INFO - iteration 44, current learner xgboost\n", - "[flaml.automl: 07-06 10:26:06] {1160} INFO - at 43.6s,\tbest xgboost's error=0.3589,\tbest lgbm's error=0.3344\n", - "[flaml.automl: 07-06 10:26:06] {1012} INFO - iteration 45, current learner xgboost\n", - "[flaml.automl: 07-06 10:26:06] {1160} INFO - at 43.7s,\tbest xgboost's error=0.3589,\tbest lgbm's error=0.3344\n", - "[flaml.automl: 07-06 10:26:06] {1012} INFO - iteration 46, current learner lgbm\n", - "[flaml.automl: 07-06 10:26:15] {1160} INFO - at 53.2s,\tbest lgbm's error=0.3344,\tbest lgbm's error=0.3344\n", - "[flaml.automl: 07-06 10:26:21] {1183} INFO - retrain lgbm for 5.5s\n", - "[flaml.automl: 07-06 10:26:21] {1012} INFO - iteration 47, current learner xgboost\n", - "[flaml.automl: 07-06 10:26:21] {1160} INFO - at 58.9s,\tbest xgboost's error=0.3589,\tbest lgbm's error=0.3344\n", - "[flaml.automl: 07-06 10:26:22] {1183} INFO - retrain xgboost for 1.1s\n", - "[flaml.automl: 07-06 10:26:22] {1206} INFO - selected model: LGBMClassifier(colsample_bytree=0.6204654035998071,\n", - " learning_rate=0.17783122919583272, max_bin=16,\n", - " min_child_samples=17, n_estimators=197, num_leaves=340,\n", - " objective='binary', reg_alpha=0.07967521254431058,\n", - " reg_lambda=6.332908973055842, subsample=0.8413048297641477)\n", - "[flaml.automl: 07-06 10:26:22] {963} INFO - fit succeeded\n" - ] - } - ], "source": [ "settings = {\n", " \"time_budget\": 60, # total running time in seconds\n", @@ -890,113 +778,205 @@ "\n", "'''The main flaml automl API'''\n", "automl.fit(X_train = X_train, y_train = y_train, **settings)" - ] + ], + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[flaml.automl: 08-13 18:00:59] {1121} INFO - Evaluation method: holdout\n", + "[flaml.automl: 08-13 18:01:00] {618} INFO - Using StratifiedKFold\n", + "[flaml.automl: 08-13 18:01:00] {1142} INFO - Minimizing error metric: 1-accuracy\n", + "[flaml.automl: 08-13 18:01:00] {1162} INFO - List of ML learners in AutoML Run: ['RGF', 'lgbm', 'rf', 'xgboost']\n", + "[flaml.automl: 08-13 18:01:00] {1252} INFO - iteration 0, current learner RGF\n", + "/home/dmx/miniconda2/envs/test/lib/python3.8/site-packages/rgf/utils.py:224: UserWarning: Cannot find FastRGF executable files. FastRGF estimators will be unavailable for usage.\n", + " warnings.warn(\"Cannot find FastRGF executable files. \"\n", + "[flaml.automl: 08-13 18:01:06] {1405} INFO - at 8.1s,\tbest RGF's error=0.3787,\tbest RGF's error=0.3787\n", + "[flaml.automl: 08-13 18:01:06] {1252} INFO - iteration 1, current learner RGF\n", + "[flaml.automl: 08-13 18:01:10] {1405} INFO - at 11.4s,\tbest RGF's error=0.3787,\tbest RGF's error=0.3787\n", + "[flaml.automl: 08-13 18:01:10] {1252} INFO - iteration 2, current learner RGF\n", + "[flaml.automl: 08-13 18:01:14] {1405} INFO - at 15.8s,\tbest RGF's error=0.3787,\tbest RGF's error=0.3787\n", + "[flaml.automl: 08-13 18:01:14] {1252} INFO - iteration 3, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:15] {1405} INFO - at 16.2s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", + "[flaml.automl: 08-13 18:01:15] {1252} INFO - iteration 4, current learner RGF\n", + "[flaml.automl: 08-13 18:01:18] {1405} INFO - at 19.8s,\tbest RGF's error=0.3787,\tbest lgbm's error=0.3777\n", + "[flaml.automl: 08-13 18:01:18] {1252} INFO - iteration 5, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:18] {1405} INFO - at 20.1s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", + "[flaml.automl: 08-13 18:01:18] {1252} INFO - iteration 6, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:19] {1405} INFO - at 21.2s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", + "[flaml.automl: 08-13 18:01:19] {1252} INFO - iteration 7, current learner RGF\n", + "[flaml.automl: 08-13 18:01:23] {1405} INFO - at 24.6s,\tbest RGF's error=0.3787,\tbest lgbm's error=0.3777\n", + "[flaml.automl: 08-13 18:01:23] {1252} INFO - iteration 8, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:24] {1405} INFO - at 25.2s,\tbest lgbm's error=0.3777,\tbest lgbm's error=0.3777\n", + "[flaml.automl: 08-13 18:01:24] {1252} INFO - iteration 9, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:24] {1405} INFO - at 25.4s,\tbest lgbm's error=0.3765,\tbest lgbm's error=0.3765\n", + "[flaml.automl: 08-13 18:01:24] {1252} INFO - iteration 10, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:24] {1405} INFO - at 25.6s,\tbest lgbm's error=0.3765,\tbest lgbm's error=0.3765\n", + "[flaml.automl: 08-13 18:01:24] {1252} INFO - iteration 11, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:24] {1405} INFO - at 25.9s,\tbest lgbm's error=0.3752,\tbest lgbm's error=0.3752\n", + "[flaml.automl: 08-13 18:01:24] {1252} INFO - iteration 12, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:24] {1405} INFO - at 26.1s,\tbest lgbm's error=0.3573,\tbest lgbm's error=0.3573\n", + "[flaml.automl: 08-13 18:01:24] {1252} INFO - iteration 13, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:25] {1405} INFO - at 27.0s,\tbest lgbm's error=0.3573,\tbest lgbm's error=0.3573\n", + "[flaml.automl: 08-13 18:01:25] {1252} INFO - iteration 14, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:26] {1405} INFO - at 27.3s,\tbest lgbm's error=0.3525,\tbest lgbm's error=0.3525\n", + "[flaml.automl: 08-13 18:01:26] {1252} INFO - iteration 15, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:27] {1405} INFO - at 28.5s,\tbest lgbm's error=0.3525,\tbest lgbm's error=0.3525\n", + "[flaml.automl: 08-13 18:01:27] {1252} INFO - iteration 16, current learner RGF\n", + "[flaml.automl: 08-13 18:01:33] {1405} INFO - at 34.6s,\tbest RGF's error=0.3684,\tbest lgbm's error=0.3525\n", + "[flaml.automl: 08-13 18:01:33] {1252} INFO - iteration 17, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:33] {1405} INFO - at 35.0s,\tbest lgbm's error=0.3525,\tbest lgbm's error=0.3525\n", + "[flaml.automl: 08-13 18:01:33] {1252} INFO - iteration 18, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:39] {1405} INFO - at 41.2s,\tbest lgbm's error=0.3501,\tbest lgbm's error=0.3501\n", + "[flaml.automl: 08-13 18:01:39] {1252} INFO - iteration 19, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:43] {1405} INFO - at 45.2s,\tbest lgbm's error=0.3501,\tbest lgbm's error=0.3501\n", + "[flaml.automl: 08-13 18:01:43] {1252} INFO - iteration 20, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:47] {1405} INFO - at 48.9s,\tbest lgbm's error=0.3501,\tbest lgbm's error=0.3501\n", + "[flaml.automl: 08-13 18:01:50] {1437} INFO - retrain lgbm for 2.3s\n", + "[flaml.automl: 08-13 18:01:50] {1252} INFO - iteration 21, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:51] {1405} INFO - at 53.2s,\tbest lgbm's error=0.3501,\tbest lgbm's error=0.3501\n", + "[flaml.automl: 08-13 18:01:51] {1252} INFO - iteration 22, current learner lgbm\n", + "[flaml.automl: 08-13 18:01:55] {1405} INFO - at 56.8s,\tbest lgbm's error=0.3501,\tbest lgbm's error=0.3501\n", + "[flaml.automl: 08-13 18:01:58] {1437} INFO - retrain lgbm for 2.4s\n", + "[flaml.automl: 08-13 18:01:58] {1252} INFO - iteration 23, current learner xgboost\n", + "[flaml.automl: 08-13 18:01:58] {1405} INFO - at 59.4s,\tbest xgboost's error=0.3787,\tbest lgbm's error=0.3501\n", + "[flaml.automl: 08-13 18:01:58] {1437} INFO - retrain xgboost for 0.7s\n", + "[flaml.automl: 08-13 18:01:58] {1461} INFO - selected model: LGBMClassifier(colsample_bytree=0.7967145599266738,\n", + " learning_rate=0.589471433950518, max_bin=256,\n", + " min_child_samples=44, n_estimators=22, num_leaves=12,\n", + " objective='binary', reg_alpha=0.040774029561503077,\n", + " reg_lambda=9.878828628614547, verbose=-1)\n", + "[flaml.automl: 08-13 18:01:58] {1184} INFO - fit succeeded\n", + "[flaml.automl: 08-13 18:01:58] {1185} INFO - Time taken to find the best model: 41.16750192642212\n" + ] + } + ], + "metadata": { + "slideshow": { + "slide_type": "slide" + }, + "tags": [] + } }, { "cell_type": "markdown", - "metadata": {}, "source": [ "## 4. Comparison with alternatives\n", "\n", "### FLAML's accuracy" - ] + ], + "metadata": {} }, { "cell_type": "code", "execution_count": 15, - "metadata": {}, + "source": [ + "print('flaml accuracy', '=', 1 - sklearn_metric_loss_score('accuracy', y_pred, y_test))" + ], "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "flaml accuracy = 0.6715957462586951\n" + "flaml accuracy = 0.6721815997508269\n" ] } ], - "source": [ - "print('flaml accuracy', '=', 1 - sklearn_metric_loss_score('accuracy', y_pred, y_test))" - ] + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "### Default LightGBM" - ] + ], + "metadata": {} }, { "cell_type": "code", "execution_count": 16, - "metadata": {}, - "outputs": [], "source": [ "from lightgbm import LGBMClassifier\n", "lgbm = LGBMClassifier()" - ] + ], + "outputs": [], + "metadata": {} }, { "cell_type": "code", "execution_count": 17, - "metadata": {}, + "source": [ + "lgbm.fit(X_train, y_train)" + ], "outputs": [ { + "output_type": "execute_result", "data": { "text/plain": [ "LGBMClassifier()" ] }, - "execution_count": 17, "metadata": {}, - "output_type": "execute_result" + "execution_count": 17 } ], - "source": [ - "lgbm.fit(X_train, y_train)" - ] + "metadata": {} }, { "cell_type": "code", "execution_count": 18, - "metadata": {}, + "source": [ + "y_pred = lgbm.predict(X_test)\n", + "from flaml.ml import sklearn_metric_loss_score\n", + "print('default lgbm accuracy', '=', 1 - sklearn_metric_loss_score('accuracy', y_pred, y_test))" + ], "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "default lgbm accuracy = 0.6602346380315323\n" ] } ], - "source": [ - "y_pred = lgbm.predict(X_test)\n", - "from flaml.ml import sklearn_metric_loss_score\n", - "print('default lgbm accuracy', '=', 1 - sklearn_metric_loss_score('accuracy', y_pred, y_test))" - ] + "metadata": {} }, { "cell_type": "markdown", - "metadata": {}, "source": [ "### Default XGBoost" - ] + ], + "metadata": {} }, { "cell_type": "code", "execution_count": 19, - "metadata": {}, - "outputs": [], "source": [ "from xgboost import XGBClassifier\n", - "xgb = XGBClassifier()" - ] + "xgb = XGBClassifier()\n", + "cat_columns = X_train.select_dtypes(include=['category']).columns\n", + "X = X_train.copy()\n", + "X[cat_columns] = X[cat_columns].apply(lambda x: x.cat.codes)\n" + ], + "outputs": [], + "metadata": {} }, { "cell_type": "code", "execution_count": 20, - "metadata": {}, + "source": [ + "xgb.fit(X, y_train)" + ], "outputs": [ { + "output_type": "stream", + "name": "stderr", + "text": [ + "/home/dmx/miniconda2/envs/test/lib/python3.8/site-packages/xgboost/sklearn.py:1146: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n", + " warnings.warn(label_encoder_deprecation_msg, UserWarning)\n" + ] + }, + { + "output_type": "execute_result", "data": { "text/plain": [ "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n", @@ -1004,47 +984,46 @@ " importance_type='gain', interaction_constraints='',\n", " learning_rate=0.300000012, max_delta_step=0, max_depth=6,\n", " min_child_weight=1, missing=nan, monotone_constraints='()',\n", - " n_estimators=100, n_jobs=0, num_parallel_tree=1, random_state=0,\n", + " n_estimators=100, n_jobs=8, num_parallel_tree=1, random_state=0,\n", " reg_alpha=0, reg_lambda=1, scale_pos_weight=1, subsample=1,\n", " tree_method='exact', validate_parameters=1, verbosity=None)" ] }, - "execution_count": 20, "metadata": {}, - "output_type": "execute_result" + "execution_count": 20 } ], - "source": [ - "xgb.fit(X_train, y_train)" - ] + "metadata": {} }, { "cell_type": "code", "execution_count": 21, - "metadata": {}, + "source": [ + "X = X_test.copy()\n", + "X[cat_columns] = X[cat_columns].apply(lambda x: x.cat.codes)\n", + "y_pred = xgb.predict(X)\n", + "from flaml.ml import sklearn_metric_loss_score\n", + "print('default xgboost accuracy', '=', 1 - sklearn_metric_loss_score('accuracy', y_pred, y_test))" + ], "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "default xgboost accuracy = 0.6676060098186078\n" ] } ], - "source": [ - "y_pred = xgb.predict(X_test)\n", - "from flaml.ml import sklearn_metric_loss_score\n", - "print('default xgboost accuracy', '=', 1 - sklearn_metric_loss_score('accuracy', y_pred, y_test))" - ] + "metadata": {} } ], "metadata": { "interpreter": { - "hash": "4502d015faca2560a557f35a41b6dd402f7fdfc08e843ae17a9c41947939f10c" + "hash": "ea9f131eb1b7663628f6445553ba215a834e2f0b4d18774746f0f47938ce4671" }, "kernelspec": { - "display_name": "Python 3.8.10 64-bit ('py38': conda)", - "name": "python3" + "name": "python3", + "display_name": "Python 3.8.0 64-bit ('test': conda)" }, "language_info": { "codemirror_mode": { @@ -1056,7 +1035,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.8.0" } }, "nbformat": 4, diff --git a/notebook/flaml_forecast.ipynb b/notebook/flaml_forecast.ipynb new file mode 100644 index 000000000..1b0ff68ad --- /dev/null +++ b/notebook/flaml_forecast.ipynb @@ -0,0 +1,1089 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Time Series Forecasting with FLAML Library" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## 1. Introduction\r\n", + "\r\n", + "FLAML is a Python library (https://github.com/microsoft/FLAML) designed to automatically produce accurate machine learning models with low computational cost. It is fast and cheap. The simple and lightweight design makes it easy to use and extend, such as adding new learners. FLAML can\r\n", + "\r\n", + " - serve as an economical AutoML engine,\r\n", + " - be used as a fast hyperparameter tuning tool, or\r\n", + " - be embedded in self-tuning software that requires low latency & resource in repetitive tuning tasks.\r\n", + " - In this notebook, we demonstrate how to use FLAML library to tune hyperparameters of XGBoost with a regression example.\r\n", + "\r\n", + "FLAML requires Python>=3.6. To run this notebook example, please install flaml with the notebook option:\r\n", + "\r\n", + "> pip install flaml[notebook]" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "!pip install flaml[notebook]" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## 2. Forecast Problem\r\n", + "\r\n", + "### Load data and preprocess\r\n", + "\r\n", + "Import co2 data from statsmodel. The dataset is from “Atmospheric CO2 from Continuous Air Samples at Mauna Loa Observatory, Hawaii, U.S.A.,” which collected CO2 samples from March 1958 to December 2001. The task is to predict monthly CO2 samples." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 1, + "source": [ + "import statsmodels.api as sm\r\n", + "data = sm.datasets.co2.load_pandas()\r\n", + "data = data.data\r\n", + "# data is given in weeks, but the task is to predict monthly, so use monthly averages instead\r\n", + "data = data['co2'].resample('MS').mean()\r\n", + "data = data.fillna(data.bfill()) # makes sure there are no missing values\r\n", + "data = data.to_frame().reset_index()\r\n", + "# data = data.rename(columns={'index': 'ds', 'co2': 'y'})" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 2, + "source": [ + "# split the data into a train dataframe and X_test and y_test dataframes, where the number of samples for test is equal to\r\n", + "# the number of periods the user wants to predict\r\n", + "num_samples = data.shape[0]\r\n", + "time_horizon = 12\r\n", + "split_idx = num_samples - time_horizon\r\n", + "X_train = data[:split_idx] # X_train is a dataframe with two columns: time and value\r\n", + "X_test = data[split_idx:]['index'].to_frame() # X_test is a dataframe with dates for prediction\r\n", + "y_test = data[split_idx:]['co2'].to_frame() # y_test is a dataframe of the values corresponding to the dates for prediction" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Run FLAML\r\n", + "\r\n", + "In the FLAML automl run configuration, users can specify the task type, time budget, error metric, learner list, whether to subsample, resampling strategy type, and so on. All these arguments have default values which will be used if users do not provide them." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 3, + "source": [ + "''' import AutoML class from flaml package '''\r\n", + "from flaml import AutoML\r\n", + "automl = AutoML()" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 4, + "source": [ + "settings = {\r\n", + " \"time_budget\": 300, # total running time in seconds\r\n", + " \"metric\": 'mape', # primary metric for validation: 'mape' is generally used for forecast tasks\r\n", + " \"task\": 'forecast', # task type\r\n", + " \"log_file_name\": 'CO2_forecast.log', # flaml log file\r\n", + " \"eval_method\": \"holdout\", # validation method can be chosen from ['auto', 'holdout', 'cv']\r\n", + " \"split_type\": 'time' # for foretask task, 'split_type' has to be 'time'\r\n", + "}" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 5, + "source": [ + "'''The main flaml automl API'''\r\n", + "automl.fit(dataframe=X_train, # training data\r\n", + " label=('index', 'co2'), # For 'forecast' task, label should be a tuple of strings for timestamp and value columns\r\n", + " **settings, \r\n", + " period=time_horizon, # key word argument 'period' must be included for forecast task\r\n", + " freq='M')" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[flaml.automl: 08-20 19:19:25] {1208} INFO - Evaluation method: holdout\n", + "[flaml.automl: 08-20 19:19:25] {686} INFO - Using TimeSeriesSplit\n", + "[flaml.automl: 08-20 19:19:25] {1235} INFO - Minimizing error metric: mape\n", + "[flaml.automl: 08-20 19:19:25] {1257} INFO - List of ML learners in AutoML Run: ['fbprophet', 'arima', 'sarimax']\n", + "[flaml.automl: 08-20 19:19:25] {1347} INFO - iteration 0, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:19:30] {1500} INFO - at 4.7s,\tbest fbprophet's error=0.0007,\tbest fbprophet's error=0.0007\n", + "INFO:flaml.automl: at 4.7s,\tbest fbprophet's error=0.0007,\tbest fbprophet's error=0.0007\n", + "[flaml.automl: 08-20 19:19:30] {1347} INFO - iteration 1, current learner fbprophet\n", + "INFO:flaml.automl:iteration 1, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:19:33] {1500} INFO - at 7.5s,\tbest fbprophet's error=0.0006,\tbest fbprophet's error=0.0006\n", + "INFO:flaml.automl: at 7.5s,\tbest fbprophet's error=0.0006,\tbest fbprophet's error=0.0006\n", + "[flaml.automl: 08-20 19:19:33] {1347} INFO - iteration 2, current learner fbprophet\n", + "INFO:flaml.automl:iteration 2, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:19:36] {1500} INFO - at 10.3s,\tbest fbprophet's error=0.0006,\tbest fbprophet's error=0.0006\n", + "INFO:flaml.automl: at 10.3s,\tbest fbprophet's error=0.0006,\tbest fbprophet's error=0.0006\n", + "[flaml.automl: 08-20 19:19:36] {1347} INFO - iteration 3, current learner fbprophet\n", + "INFO:flaml.automl:iteration 3, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:19:39] {1500} INFO - at 13.2s,\tbest fbprophet's error=0.0006,\tbest fbprophet's error=0.0006\n", + "INFO:flaml.automl: at 13.2s,\tbest fbprophet's error=0.0006,\tbest fbprophet's error=0.0006\n", + "[flaml.automl: 08-20 19:19:39] {1347} INFO - iteration 4, current learner fbprophet\n", + "INFO:flaml.automl:iteration 4, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:19:41] {1500} INFO - at 15.2s,\tbest fbprophet's error=0.0006,\tbest fbprophet's error=0.0006\n", + "INFO:flaml.automl: at 15.2s,\tbest fbprophet's error=0.0006,\tbest fbprophet's error=0.0006\n", + "[flaml.automl: 08-20 19:19:41] {1347} INFO - iteration 5, current learner arima\n", + "INFO:flaml.automl:iteration 5, current learner arima\n", + "[flaml.automl: 08-20 19:19:41] {1500} INFO - at 15.6s,\tbest arima's error=0.0120,\tbest fbprophet's error=0.0006\n", + "INFO:flaml.automl: at 15.6s,\tbest arima's error=0.0120,\tbest fbprophet's error=0.0006\n", + "[flaml.automl: 08-20 19:19:41] {1347} INFO - iteration 6, current learner fbprophet\n", + "INFO:flaml.automl:iteration 6, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:19:45] {1500} INFO - at 19.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 19.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:45] {1347} INFO - iteration 7, current learner fbprophet\n", + "INFO:flaml.automl:iteration 7, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:19:47] {1500} INFO - at 21.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 21.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:47] {1347} INFO - iteration 8, current learner arima\n", + "INFO:flaml.automl:iteration 8, current learner arima\n", + "[flaml.automl: 08-20 19:19:48] {1500} INFO - at 22.5s,\tbest arima's error=0.0040,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 22.5s,\tbest arima's error=0.0040,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:48] {1347} INFO - iteration 9, current learner arima\n", + "INFO:flaml.automl:iteration 9, current learner arima\n", + "[flaml.automl: 08-20 19:19:48] {1500} INFO - at 22.9s,\tbest arima's error=0.0040,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 22.9s,\tbest arima's error=0.0040,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:48] {1347} INFO - iteration 10, current learner arima\n", + "INFO:flaml.automl:iteration 10, current learner arima\n", + "[flaml.automl: 08-20 19:19:50] {1500} INFO - at 24.2s,\tbest arima's error=0.0022,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 24.2s,\tbest arima's error=0.0022,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:50] {1347} INFO - iteration 11, current learner arima\n", + "INFO:flaml.automl:iteration 11, current learner arima\n", + "[flaml.automl: 08-20 19:19:51] {1500} INFO - at 25.4s,\tbest arima's error=0.0022,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 25.4s,\tbest arima's error=0.0022,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:51] {1347} INFO - iteration 12, current learner sarimax\n", + "INFO:flaml.automl:iteration 12, current learner sarimax\n", + "[flaml.automl: 08-20 19:19:51] {1500} INFO - at 25.9s,\tbest sarimax's error=0.0120,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 25.9s,\tbest sarimax's error=0.0120,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:51] {1347} INFO - iteration 13, current learner sarimax\n", + "INFO:flaml.automl:iteration 13, current learner sarimax\n", + "[flaml.automl: 08-20 19:19:52] {1500} INFO - at 26.3s,\tbest sarimax's error=0.0055,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 26.3s,\tbest sarimax's error=0.0055,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:52] {1347} INFO - iteration 14, current learner sarimax\n", + "INFO:flaml.automl:iteration 14, current learner sarimax\n", + "[flaml.automl: 08-20 19:19:52] {1500} INFO - at 26.7s,\tbest sarimax's error=0.0055,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 26.7s,\tbest sarimax's error=0.0055,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:52] {1347} INFO - iteration 15, current learner arima\n", + "INFO:flaml.automl:iteration 15, current learner arima\n", + "[flaml.automl: 08-20 19:19:53] {1500} INFO - at 27.3s,\tbest arima's error=0.0022,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 27.3s,\tbest arima's error=0.0022,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:53] {1347} INFO - iteration 16, current learner sarimax\n", + "INFO:flaml.automl:iteration 16, current learner sarimax\n", + "[flaml.automl: 08-20 19:19:54] {1500} INFO - at 28.2s,\tbest sarimax's error=0.0055,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 28.2s,\tbest sarimax's error=0.0055,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:54] {1347} INFO - iteration 17, current learner fbprophet\n", + "INFO:flaml.automl:iteration 17, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:19:57] {1500} INFO - at 31.3s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 31.3s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:57] {1347} INFO - iteration 18, current learner sarimax\n", + "INFO:flaml.automl:iteration 18, current learner sarimax\n", + "[flaml.automl: 08-20 19:19:57] {1500} INFO - at 31.7s,\tbest sarimax's error=0.0031,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 31.7s,\tbest sarimax's error=0.0031,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:57] {1347} INFO - iteration 19, current learner arima\n", + "INFO:flaml.automl:iteration 19, current learner arima\n", + "[flaml.automl: 08-20 19:19:59] {1500} INFO - at 33.0s,\tbest arima's error=0.0022,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 33.0s,\tbest arima's error=0.0022,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:59] {1347} INFO - iteration 20, current learner sarimax\n", + "INFO:flaml.automl:iteration 20, current learner sarimax\n", + "[flaml.automl: 08-20 19:19:59] {1500} INFO - at 33.6s,\tbest sarimax's error=0.0031,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 33.6s,\tbest sarimax's error=0.0031,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:19:59] {1347} INFO - iteration 21, current learner fbprophet\n", + "INFO:flaml.automl:iteration 21, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:20:02] {1500} INFO - at 36.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 36.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:02] {1347} INFO - iteration 22, current learner fbprophet\n", + "INFO:flaml.automl:iteration 22, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:20:05] {1500} INFO - at 39.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 39.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:05] {1347} INFO - iteration 23, current learner sarimax\n", + "INFO:flaml.automl:iteration 23, current learner sarimax\n", + "[flaml.automl: 08-20 19:20:05] {1500} INFO - at 39.7s,\tbest sarimax's error=0.0031,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 39.7s,\tbest sarimax's error=0.0031,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:05] {1347} INFO - iteration 24, current learner sarimax\n", + "INFO:flaml.automl:iteration 24, current learner sarimax\n", + "[flaml.automl: 08-20 19:20:05] {1500} INFO - at 39.8s,\tbest sarimax's error=0.0031,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 39.8s,\tbest sarimax's error=0.0031,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:05] {1347} INFO - iteration 25, current learner arima\n", + "INFO:flaml.automl:iteration 25, current learner arima\n", + "[flaml.automl: 08-20 19:20:06] {1500} INFO - at 40.4s,\tbest arima's error=0.0022,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 40.4s,\tbest arima's error=0.0022,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:06] {1347} INFO - iteration 26, current learner sarimax\n", + "INFO:flaml.automl:iteration 26, current learner sarimax\n", + "[flaml.automl: 08-20 19:20:07] {1500} INFO - at 41.6s,\tbest sarimax's error=0.0022,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 41.6s,\tbest sarimax's error=0.0022,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:07] {1347} INFO - iteration 27, current learner sarimax\n", + "INFO:flaml.automl:iteration 27, current learner sarimax\n", + "[flaml.automl: 08-20 19:20:09] {1500} INFO - at 43.2s,\tbest sarimax's error=0.0022,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 43.2s,\tbest sarimax's error=0.0022,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:09] {1347} INFO - iteration 28, current learner sarimax\n", + "INFO:flaml.automl:iteration 28, current learner sarimax\n", + "[flaml.automl: 08-20 19:20:09] {1500} INFO - at 43.7s,\tbest sarimax's error=0.0022,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 43.7s,\tbest sarimax's error=0.0022,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:09] {1347} INFO - iteration 29, current learner fbprophet\n", + "INFO:flaml.automl:iteration 29, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:20:12] {1500} INFO - at 46.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 46.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:12] {1347} INFO - iteration 30, current learner fbprophet\n", + "INFO:flaml.automl:iteration 30, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:20:15] {1500} INFO - at 49.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 49.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:15] {1347} INFO - iteration 31, current learner fbprophet\n", + "INFO:flaml.automl:iteration 31, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:20:18] {1500} INFO - at 52.6s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 52.6s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:18] {1347} INFO - iteration 32, current learner sarimax\n", + "INFO:flaml.automl:iteration 32, current learner sarimax\n", + "[flaml.automl: 08-20 19:20:20] {1500} INFO - at 54.3s,\tbest sarimax's error=0.0020,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 54.3s,\tbest sarimax's error=0.0020,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:20] {1347} INFO - iteration 33, current learner fbprophet\n", + "INFO:flaml.automl:iteration 33, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:20:22] {1500} INFO - at 57.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 57.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:22] {1347} INFO - iteration 34, current learner arima\n", + "INFO:flaml.automl:iteration 34, current learner arima\n", + "[flaml.automl: 08-20 19:20:24] {1500} INFO - at 58.8s,\tbest arima's error=0.0016,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 58.8s,\tbest arima's error=0.0016,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:24] {1347} INFO - iteration 35, current learner sarimax\n", + "INFO:flaml.automl:iteration 35, current learner sarimax\n", + "[flaml.automl: 08-20 19:20:27] {1500} INFO - at 61.3s,\tbest sarimax's error=0.0020,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 61.3s,\tbest sarimax's error=0.0020,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:27] {1347} INFO - iteration 36, current learner arima\n", + "INFO:flaml.automl:iteration 36, current learner arima\n", + "[flaml.automl: 08-20 19:20:29] {1500} INFO - at 63.0s,\tbest arima's error=0.0016,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 63.0s,\tbest arima's error=0.0016,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:29] {1347} INFO - iteration 37, current learner arima\n", + "INFO:flaml.automl:iteration 37, current learner arima\n", + "[flaml.automl: 08-20 19:20:30] {1500} INFO - at 64.5s,\tbest arima's error=0.0016,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 64.5s,\tbest arima's error=0.0016,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:30] {1347} INFO - iteration 38, current learner fbprophet\n", + "INFO:flaml.automl:iteration 38, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:20:33] {1500} INFO - at 67.7s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 67.7s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:33] {1347} INFO - iteration 39, current learner arima\n", + "INFO:flaml.automl:iteration 39, current learner arima\n", + "[flaml.automl: 08-20 19:20:35] {1500} INFO - at 69.3s,\tbest arima's error=0.0016,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 69.3s,\tbest arima's error=0.0016,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:35] {1347} INFO - iteration 40, current learner arima\n", + "INFO:flaml.automl:iteration 40, current learner arima\n", + "[flaml.automl: 08-20 19:20:36] {1500} INFO - at 70.3s,\tbest arima's error=0.0016,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 70.3s,\tbest arima's error=0.0016,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:36] {1347} INFO - iteration 41, current learner fbprophet\n", + "INFO:flaml.automl:iteration 41, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:20:39] {1500} INFO - at 73.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 73.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:39] {1347} INFO - iteration 42, current learner arima\n", + "INFO:flaml.automl:iteration 42, current learner arima\n", + "[flaml.automl: 08-20 19:20:41] {1500} INFO - at 75.5s,\tbest arima's error=0.0014,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 75.5s,\tbest arima's error=0.0014,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:41] {1347} INFO - iteration 43, current learner sarimax\n", + "INFO:flaml.automl:iteration 43, current learner sarimax\n", + "[flaml.automl: 08-20 19:20:41] {1500} INFO - at 75.9s,\tbest sarimax's error=0.0020,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 75.9s,\tbest sarimax's error=0.0020,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:41] {1347} INFO - iteration 44, current learner arima\n", + "INFO:flaml.automl:iteration 44, current learner arima\n", + "[flaml.automl: 08-20 19:20:43] {1500} INFO - at 77.7s,\tbest arima's error=0.0014,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 77.7s,\tbest arima's error=0.0014,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:43] {1347} INFO - iteration 45, current learner fbprophet\n", + "INFO:flaml.automl:iteration 45, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:20:46] {1500} INFO - at 80.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 80.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:46] {1347} INFO - iteration 46, current learner arima\n", + "INFO:flaml.automl:iteration 46, current learner arima\n", + "[flaml.automl: 08-20 19:20:48] {1500} INFO - at 82.2s,\tbest arima's error=0.0014,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 82.2s,\tbest arima's error=0.0014,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:48] {1347} INFO - iteration 47, current learner fbprophet\n", + "INFO:flaml.automl:iteration 47, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:20:50] {1500} INFO - at 84.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 84.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:50] {1347} INFO - iteration 48, current learner fbprophet\n", + "INFO:flaml.automl:iteration 48, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:20:53] {1500} INFO - at 87.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 87.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:53] {1347} INFO - iteration 49, current learner sarimax\n", + "INFO:flaml.automl:iteration 49, current learner sarimax\n", + "[flaml.automl: 08-20 19:20:54] {1500} INFO - at 88.3s,\tbest sarimax's error=0.0020,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 88.3s,\tbest sarimax's error=0.0020,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:54] {1347} INFO - iteration 50, current learner fbprophet\n", + "INFO:flaml.automl:iteration 50, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:20:56] {1500} INFO - at 90.9s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 90.9s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:56] {1347} INFO - iteration 51, current learner fbprophet\n", + "INFO:flaml.automl:iteration 51, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:20:59] {1500} INFO - at 93.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 93.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:20:59] {1347} INFO - iteration 52, current learner fbprophet\n", + "INFO:flaml.automl:iteration 52, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:02] {1500} INFO - at 96.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 96.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:02] {1347} INFO - iteration 53, current learner fbprophet\n", + "INFO:flaml.automl:iteration 53, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:05] {1500} INFO - at 99.7s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 99.7s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:05] {1347} INFO - iteration 54, current learner fbprophet\n", + "INFO:flaml.automl:iteration 54, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:08] {1500} INFO - at 102.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 102.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:08] {1347} INFO - iteration 55, current learner fbprophet\n", + "INFO:flaml.automl:iteration 55, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:11] {1500} INFO - at 105.1s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 105.1s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:11] {1347} INFO - iteration 56, current learner fbprophet\n", + "INFO:flaml.automl:iteration 56, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:13] {1500} INFO - at 107.6s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 107.6s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:13] {1347} INFO - iteration 57, current learner fbprophet\n", + "INFO:flaml.automl:iteration 57, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:16] {1500} INFO - at 110.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 110.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:16] {1347} INFO - iteration 58, current learner fbprophet\n", + "INFO:flaml.automl:iteration 58, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:19] {1500} INFO - at 113.1s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 113.1s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:19] {1347} INFO - iteration 59, current learner fbprophet\n", + "INFO:flaml.automl:iteration 59, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:21] {1500} INFO - at 115.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 115.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:21] {1347} INFO - iteration 60, current learner fbprophet\n", + "INFO:flaml.automl:iteration 60, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:24] {1500} INFO - at 118.7s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 118.7s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:24] {1347} INFO - iteration 61, current learner fbprophet\n", + "INFO:flaml.automl:iteration 61, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:27] {1500} INFO - at 121.3s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 121.3s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:27] {1347} INFO - iteration 62, current learner arima\n", + "INFO:flaml.automl:iteration 62, current learner arima\n", + "[flaml.automl: 08-20 19:21:29] {1500} INFO - at 123.8s,\tbest arima's error=0.0013,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 123.8s,\tbest arima's error=0.0013,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:29] {1347} INFO - iteration 63, current learner fbprophet\n", + "INFO:flaml.automl:iteration 63, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:32] {1500} INFO - at 126.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 126.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:32] {1347} INFO - iteration 64, current learner fbprophet\n", + "INFO:flaml.automl:iteration 64, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:35] {1500} INFO - at 129.3s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 129.3s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:35] {1347} INFO - iteration 65, current learner arima\n", + "INFO:flaml.automl:iteration 65, current learner arima\n", + "[flaml.automl: 08-20 19:21:36] {1500} INFO - at 130.9s,\tbest arima's error=0.0013,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 130.9s,\tbest arima's error=0.0013,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:36] {1347} INFO - iteration 66, current learner fbprophet\n", + "INFO:flaml.automl:iteration 66, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:40] {1500} INFO - at 134.1s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 134.1s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:40] {1347} INFO - iteration 67, current learner fbprophet\n", + "INFO:flaml.automl:iteration 67, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:42] {1500} INFO - at 136.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 136.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:42] {1347} INFO - iteration 68, current learner arima\n", + "INFO:flaml.automl:iteration 68, current learner arima\n", + "[flaml.automl: 08-20 19:21:44] {1500} INFO - at 138.9s,\tbest arima's error=0.0013,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 138.9s,\tbest arima's error=0.0013,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:44] {1347} INFO - iteration 69, current learner arima\n", + "INFO:flaml.automl:iteration 69, current learner arima\n", + "[flaml.automl: 08-20 19:21:47] {1500} INFO - at 141.2s,\tbest arima's error=0.0012,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 141.2s,\tbest arima's error=0.0012,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:47] {1347} INFO - iteration 70, current learner fbprophet\n", + "INFO:flaml.automl:iteration 70, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:50] {1500} INFO - at 144.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 144.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:50] {1347} INFO - iteration 71, current learner sarimax\n", + "INFO:flaml.automl:iteration 71, current learner sarimax\n", + "[flaml.automl: 08-20 19:21:52] {1500} INFO - at 146.1s,\tbest sarimax's error=0.0020,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 146.1s,\tbest sarimax's error=0.0020,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:52] {1347} INFO - iteration 72, current learner fbprophet\n", + "INFO:flaml.automl:iteration 72, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:54] {1500} INFO - at 148.2s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 148.2s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:54] {1347} INFO - iteration 73, current learner arima\n", + "INFO:flaml.automl:iteration 73, current learner arima\n", + "[flaml.automl: 08-20 19:21:56] {1500} INFO - at 150.4s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 150.4s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:56] {1347} INFO - iteration 74, current learner fbprophet\n", + "INFO:flaml.automl:iteration 74, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:21:58] {1500} INFO - at 152.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 152.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:21:58] {1347} INFO - iteration 75, current learner fbprophet\n", + "INFO:flaml.automl:iteration 75, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:22:01] {1500} INFO - at 155.6s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 155.6s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:01] {1347} INFO - iteration 76, current learner arima\n", + "INFO:flaml.automl:iteration 76, current learner arima\n", + "[flaml.automl: 08-20 19:22:03] {1500} INFO - at 157.9s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 157.9s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:03] {1347} INFO - iteration 77, current learner fbprophet\n", + "INFO:flaml.automl:iteration 77, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:22:07] {1500} INFO - at 161.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 161.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:07] {1347} INFO - iteration 78, current learner fbprophet\n", + "INFO:flaml.automl:iteration 78, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:22:09] {1500} INFO - at 163.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 163.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:09] {1347} INFO - iteration 79, current learner arima\n", + "INFO:flaml.automl:iteration 79, current learner arima\n", + "[flaml.automl: 08-20 19:22:12] {1500} INFO - at 166.1s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 166.1s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:12] {1347} INFO - iteration 80, current learner fbprophet\n", + "INFO:flaml.automl:iteration 80, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:22:14] {1500} INFO - at 168.7s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 168.7s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:14] {1347} INFO - iteration 81, current learner arima\n", + "INFO:flaml.automl:iteration 81, current learner arima\n", + "[flaml.automl: 08-20 19:22:16] {1500} INFO - at 170.4s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 170.4s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:16] {1347} INFO - iteration 82, current learner arima\n", + "INFO:flaml.automl:iteration 82, current learner arima\n", + "[flaml.automl: 08-20 19:22:18] {1500} INFO - at 172.3s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 172.3s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:18] {1347} INFO - iteration 83, current learner arima\n", + "INFO:flaml.automl:iteration 83, current learner arima\n", + "[flaml.automl: 08-20 19:22:18] {1500} INFO - at 172.5s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 172.5s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:18] {1347} INFO - iteration 84, current learner fbprophet\n", + "INFO:flaml.automl:iteration 84, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:22:20] {1500} INFO - at 174.9s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 174.9s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:20] {1347} INFO - iteration 85, current learner arima\n", + "INFO:flaml.automl:iteration 85, current learner arima\n", + "[flaml.automl: 08-20 19:22:21] {1500} INFO - at 175.2s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 175.2s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:21] {1347} INFO - iteration 86, current learner fbprophet\n", + "INFO:flaml.automl:iteration 86, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:22:24] {1500} INFO - at 178.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 178.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:24] {1347} INFO - iteration 87, current learner fbprophet\n", + "INFO:flaml.automl:iteration 87, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:22:26] {1500} INFO - at 180.3s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 180.3s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:26] {1347} INFO - iteration 88, current learner arima\n", + "INFO:flaml.automl:iteration 88, current learner arima\n", + "[flaml.automl: 08-20 19:22:26] {1500} INFO - at 180.4s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 180.4s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:26] {1347} INFO - iteration 89, current learner fbprophet\n", + "INFO:flaml.automl:iteration 89, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:22:29] {1500} INFO - at 183.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 183.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:29] {1347} INFO - iteration 90, current learner sarimax\n", + "INFO:flaml.automl:iteration 90, current learner sarimax\n", + "[flaml.automl: 08-20 19:22:30] {1500} INFO - at 184.9s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 184.9s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:30] {1347} INFO - iteration 91, current learner sarimax\n", + "INFO:flaml.automl:iteration 91, current learner sarimax\n", + "[flaml.automl: 08-20 19:22:32] {1500} INFO - at 186.5s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 186.5s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:32] {1347} INFO - iteration 92, current learner sarimax\n", + "INFO:flaml.automl:iteration 92, current learner sarimax\n", + "[flaml.automl: 08-20 19:22:33] {1500} INFO - at 188.0s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 188.0s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:33] {1347} INFO - iteration 93, current learner sarimax\n", + "INFO:flaml.automl:iteration 93, current learner sarimax\n", + "[flaml.automl: 08-20 19:22:35] {1500} INFO - at 190.0s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 190.0s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:35] {1347} INFO - iteration 94, current learner sarimax\n", + "INFO:flaml.automl:iteration 94, current learner sarimax\n", + "[flaml.automl: 08-20 19:22:37] {1500} INFO - at 191.7s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 191.7s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:37] {1347} INFO - iteration 95, current learner sarimax\n", + "INFO:flaml.automl:iteration 95, current learner sarimax\n", + "[flaml.automl: 08-20 19:22:39] {1500} INFO - at 193.2s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 193.2s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:39] {1347} INFO - iteration 96, current learner sarimax\n", + "INFO:flaml.automl:iteration 96, current learner sarimax\n", + "[flaml.automl: 08-20 19:22:41] {1500} INFO - at 195.0s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 195.0s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:41] {1347} INFO - iteration 97, current learner sarimax\n", + "INFO:flaml.automl:iteration 97, current learner sarimax\n", + "[flaml.automl: 08-20 19:22:43] {1500} INFO - at 197.2s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 197.2s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:43] {1347} INFO - iteration 98, current learner sarimax\n", + "INFO:flaml.automl:iteration 98, current learner sarimax\n", + "[flaml.automl: 08-20 19:22:44] {1500} INFO - at 198.4s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 198.4s,\tbest sarimax's error=0.0010,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:44] {1347} INFO - iteration 99, current learner sarimax\n", + "INFO:flaml.automl:iteration 99, current learner sarimax\n", + "[flaml.automl: 08-20 19:22:46] {1500} INFO - at 200.2s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 200.2s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:46] {1347} INFO - iteration 100, current learner sarimax\n", + "INFO:flaml.automl:iteration 100, current learner sarimax\n", + "[flaml.automl: 08-20 19:22:48] {1500} INFO - at 202.5s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 202.5s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:48] {1347} INFO - iteration 101, current learner fbprophet\n", + "INFO:flaml.automl:iteration 101, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:22:51] {1500} INFO - at 206.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 206.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:51] {1347} INFO - iteration 102, current learner sarimax\n", + "INFO:flaml.automl:iteration 102, current learner sarimax\n", + "[flaml.automl: 08-20 19:22:53] {1500} INFO - at 207.8s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 207.8s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:53] {1347} INFO - iteration 103, current learner fbprophet\n", + "INFO:flaml.automl:iteration 103, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:22:56] {1500} INFO - at 210.6s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 210.6s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:56] {1347} INFO - iteration 104, current learner sarimax\n", + "INFO:flaml.automl:iteration 104, current learner sarimax\n", + "[flaml.automl: 08-20 19:22:58] {1500} INFO - at 212.7s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 212.7s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:22:58] {1347} INFO - iteration 105, current learner sarimax\n", + "INFO:flaml.automl:iteration 105, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:00] {1500} INFO - at 214.8s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 214.8s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:00] {1347} INFO - iteration 106, current learner arima\n", + "INFO:flaml.automl:iteration 106, current learner arima\n", + "[flaml.automl: 08-20 19:23:00] {1500} INFO - at 214.9s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 214.9s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:00] {1347} INFO - iteration 107, current learner sarimax\n", + "INFO:flaml.automl:iteration 107, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:02] {1500} INFO - at 216.4s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 216.4s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:02] {1347} INFO - iteration 108, current learner sarimax\n", + "INFO:flaml.automl:iteration 108, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:03] {1500} INFO - at 217.7s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 217.7s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:03] {1347} INFO - iteration 109, current learner fbprophet\n", + "INFO:flaml.automl:iteration 109, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:23:06] {1500} INFO - at 220.2s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 220.2s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:06] {1347} INFO - iteration 110, current learner sarimax\n", + "INFO:flaml.automl:iteration 110, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:08] {1500} INFO - at 222.3s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 222.3s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:08] {1347} INFO - iteration 111, current learner sarimax\n", + "INFO:flaml.automl:iteration 111, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:09] {1500} INFO - at 223.9s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 223.9s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:09] {1347} INFO - iteration 112, current learner sarimax\n", + "INFO:flaml.automl:iteration 112, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:11] {1500} INFO - at 225.7s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 225.7s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:11] {1347} INFO - iteration 113, current learner fbprophet\n", + "INFO:flaml.automl:iteration 113, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:23:14] {1500} INFO - at 229.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 229.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:15] {1347} INFO - iteration 114, current learner fbprophet\n", + "INFO:flaml.automl:iteration 114, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:23:17] {1500} INFO - at 231.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 231.5s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:17] {1347} INFO - iteration 115, current learner sarimax\n", + "INFO:flaml.automl:iteration 115, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:18] {1500} INFO - at 232.9s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 232.9s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:18] {1347} INFO - iteration 116, current learner sarimax\n", + "INFO:flaml.automl:iteration 116, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:21] {1500} INFO - at 235.1s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 235.1s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:21] {1347} INFO - iteration 117, current learner fbprophet\n", + "INFO:flaml.automl:iteration 117, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:23:23] {1500} INFO - at 238.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 238.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:23] {1347} INFO - iteration 118, current learner sarimax\n", + "INFO:flaml.automl:iteration 118, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:26] {1500} INFO - at 240.8s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 240.8s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:26] {1347} INFO - iteration 119, current learner sarimax\n", + "INFO:flaml.automl:iteration 119, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:28] {1500} INFO - at 242.2s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 242.2s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:28] {1347} INFO - iteration 120, current learner sarimax\n", + "INFO:flaml.automl:iteration 120, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:30] {1500} INFO - at 244.1s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 244.1s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:30] {1347} INFO - iteration 121, current learner sarimax\n", + "INFO:flaml.automl:iteration 121, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:32] {1500} INFO - at 246.1s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 246.1s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:32] {1347} INFO - iteration 122, current learner fbprophet\n", + "INFO:flaml.automl:iteration 122, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:23:34] {1500} INFO - at 248.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 248.8s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:34] {1347} INFO - iteration 123, current learner fbprophet\n", + "INFO:flaml.automl:iteration 123, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:23:37] {1500} INFO - at 251.7s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 251.7s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:37] {1347} INFO - iteration 124, current learner fbprophet\n", + "INFO:flaml.automl:iteration 124, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:23:40] {1500} INFO - at 254.1s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 254.1s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:40] {1347} INFO - iteration 125, current learner fbprophet\n", + "INFO:flaml.automl:iteration 125, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:23:42] {1500} INFO - at 256.6s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 256.6s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:42] {1347} INFO - iteration 126, current learner fbprophet\n", + "INFO:flaml.automl:iteration 126, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:23:45] {1500} INFO - at 259.1s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 259.1s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:45] {1347} INFO - iteration 127, current learner sarimax\n", + "INFO:flaml.automl:iteration 127, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:46] {1500} INFO - at 260.8s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 260.8s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:46] {1347} INFO - iteration 128, current learner arima\n", + "INFO:flaml.automl:iteration 128, current learner arima\n", + "[flaml.automl: 08-20 19:23:47] {1500} INFO - at 261.2s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 261.2s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:47] {1347} INFO - iteration 129, current learner arima\n", + "INFO:flaml.automl:iteration 129, current learner arima\n", + "[flaml.automl: 08-20 19:23:47] {1500} INFO - at 261.9s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 261.9s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:47] {1347} INFO - iteration 130, current learner sarimax\n", + "INFO:flaml.automl:iteration 130, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:49] {1500} INFO - at 263.7s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 263.7s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:49] {1347} INFO - iteration 131, current learner fbprophet\n", + "INFO:flaml.automl:iteration 131, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:23:51] {1500} INFO - at 265.9s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 265.9s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:51] {1347} INFO - iteration 132, current learner fbprophet\n", + "INFO:flaml.automl:iteration 132, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:23:54] {1500} INFO - at 268.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 268.4s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:54] {1347} INFO - iteration 133, current learner arima\n", + "INFO:flaml.automl:iteration 133, current learner arima\n", + "[flaml.automl: 08-20 19:23:54] {1500} INFO - at 268.8s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 268.8s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:54] {1347} INFO - iteration 134, current learner sarimax\n", + "INFO:flaml.automl:iteration 134, current learner sarimax\n", + "[flaml.automl: 08-20 19:23:56] {1500} INFO - at 271.0s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 271.0s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:56] {1347} INFO - iteration 135, current learner arima\n", + "INFO:flaml.automl:iteration 135, current learner arima\n", + "[flaml.automl: 08-20 19:23:57] {1500} INFO - at 271.6s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 271.6s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:23:57] {1347} INFO - iteration 136, current learner fbprophet\n", + "INFO:flaml.automl:iteration 136, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:24:00] {1500} INFO - at 274.7s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 274.7s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:24:00] {1347} INFO - iteration 137, current learner sarimax\n", + "INFO:flaml.automl:iteration 137, current learner sarimax\n", + "[flaml.automl: 08-20 19:24:02] {1500} INFO - at 276.1s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 276.1s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:24:02] {1347} INFO - iteration 138, current learner fbprophet\n", + "INFO:flaml.automl:iteration 138, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:24:04] {1500} INFO - at 279.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 279.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:24:04] {1347} INFO - iteration 139, current learner sarimax\n", + "INFO:flaml.automl:iteration 139, current learner sarimax\n", + "[flaml.automl: 08-20 19:24:07] {1500} INFO - at 281.2s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 281.2s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:24:07] {1347} INFO - iteration 140, current learner fbprophet\n", + "INFO:flaml.automl:iteration 140, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:24:10] {1500} INFO - at 284.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 284.0s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:24:10] {1347} INFO - iteration 141, current learner sarimax\n", + "INFO:flaml.automl:iteration 141, current learner sarimax\n", + "[flaml.automl: 08-20 19:24:11] {1500} INFO - at 285.5s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 285.5s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:24:11] {1347} INFO - iteration 142, current learner sarimax\n", + "INFO:flaml.automl:iteration 142, current learner sarimax\n", + "[flaml.automl: 08-20 19:24:14] {1500} INFO - at 288.3s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 288.3s,\tbest sarimax's error=0.0008,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:24:14] {1347} INFO - iteration 143, current learner arima\n", + "INFO:flaml.automl:iteration 143, current learner arima\n", + "[flaml.automl: 08-20 19:24:14] {1500} INFO - at 288.9s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 288.9s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:24:14] {1347} INFO - iteration 144, current learner fbprophet\n", + "INFO:flaml.automl:iteration 144, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:24:17] {1500} INFO - at 291.1s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 291.1s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "[flaml.automl: 08-20 19:24:17] {1347} INFO - iteration 145, current learner fbprophet\n", + "INFO:flaml.automl:iteration 145, current learner fbprophet\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:24:20] {1500} INFO - at 294.3s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 294.3s,\tbest fbprophet's error=0.0005,\tbest fbprophet's error=0.0005\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:24:23] {1532} INFO - retrain fbprophet for 2.8s\n", + "INFO:flaml.automl:retrain fbprophet for 2.8s\n", + "[flaml.automl: 08-20 19:24:23] {1347} INFO - iteration 146, current learner arima\n", + "INFO:flaml.automl:iteration 146, current learner arima\n", + "[flaml.automl: 08-20 19:24:23] {1500} INFO - at 298.0s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:flaml.automl: at 298.0s,\tbest arima's error=0.0011,\tbest fbprophet's error=0.0005\n", + "INFO:prophet:Disabling weekly seasonality. Run prophet with weekly_seasonality=True to override this.\n", + "INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n", + "[flaml.automl: 08-20 19:24:26] {1532} INFO - retrain arima for 2.9s\n", + "INFO:flaml.automl:retrain arima for 2.9s\n", + "[flaml.automl: 08-20 19:24:26] {1556} INFO - selected model: \n", + "INFO:flaml.automl:selected model: \n", + "[flaml.automl: 08-20 19:24:26] {1279} INFO - fit succeeded\n", + "INFO:flaml.automl:fit succeeded\n", + "[flaml.automl: 08-20 19:24:26] {1280} INFO - Time taken to find the best model: 73.84539341926575\n", + "INFO:flaml.automl:Time taken to find the best model: 73.84539341926575\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Best model and metric" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 6, + "source": [ + "''' retrieve best config and best learner'''\r\n", + "print('Best ML leaner:', automl.best_estimator)\r\n", + "print('Best hyperparmeter config:', automl.best_config)\r\n", + "print(f'Best mape on validation data: {automl.best_loss}')\r\n", + "print(f'Training duration of best run: {automl.best_config_train_time}s')" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Best ML leaner: fbprophet\n", + "Best hyperparmeter config: {'changepoint_prior_scale': 0.02876449933617924, 'seasonality_prior_scale': 1.80360430903146, 'holidays_prior_scale': 2.1243991057068654, 'seasonality_mode': 'additive'}\n", + "Best mape on validation data: 0.00047649674701670026\n", + "Training duration of best run: 3.572484016418457s\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "source": [ + "print(automl.model.estimator)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 8, + "source": [ + "''' pickle and save the automl object '''\r\n", + "import pickle\r\n", + "with open('automl.pkl', 'wb') as f:\r\n", + " pickle.dump(automl, f, pickle.HIGHEST_PROTOCOL)" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 9, + "source": [ + "''' compute predictions of testing dataset '''\r\n", + "y_pred = automl.predict(X_test)\r\n", + "print('Predicted labels', y_pred)\r\n", + "print('True labels', y_test)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Predicted labels 0 370.182378\n", + "1 370.899874\n", + "2 371.953616\n", + "3 373.138779\n", + "4 373.638453\n", + "5 373.108385\n", + "6 371.764343\n", + "7 369.852285\n", + "8 368.254247\n", + "9 368.322785\n", + "10 369.521407\n", + "11 370.787262\n", + "Name: yhat, dtype: float64\n", + "True labels co2\n", + "514 370.175\n", + "515 371.325\n", + "516 372.060\n", + "517 372.775\n", + "518 373.800\n", + "519 373.060\n", + "520 371.300\n", + "521 369.425\n", + "522 367.880\n", + "523 368.050\n", + "524 369.375\n", + "525 371.020\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 10, + "source": [ + "''' compute different metric values on testing dataset'''\r\n", + "from flaml.ml import sklearn_metric_loss_score\r\n", + "print('mape', '=', sklearn_metric_loss_score('mape', y_pred, y_test))" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "mape = 0.0006814858864004413\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Log history" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 12, + "source": [ + "from flaml.data import get_output_from_log\r\n", + "time_history, best_valid_loss_history, valid_loss_history, config_history, train_loss_history = \\\r\n", + " get_output_from_log(filename=settings['log_file_name'], time_budget=300)\r\n", + "\r\n", + "for config in config_history:\r\n", + " print(config)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{'Current Learner': 'fbprophet', 'Current Sample': 502, 'Current Hyper-parameters': {'changepoint_prior_scale': 0.010000000000000002, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'}, 'Best Learner': 'fbprophet', 'Best Hyper-parameters': {'changepoint_prior_scale': 0.010000000000000002, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'}}\n", + "{'Current Learner': 'fbprophet', 'Current Sample': 502, 'Current Hyper-parameters': {'changepoint_prior_scale': 0.0091602623296037, 'seasonality_prior_scale': 0.8823866403788657, 'holidays_prior_scale': 3.2294014074557995, 'seasonality_mode': 'additive'}, 'Best Learner': 'fbprophet', 'Best Hyper-parameters': {'changepoint_prior_scale': 0.0091602623296037, 'seasonality_prior_scale': 0.8823866403788657, 'holidays_prior_scale': 3.2294014074557995, 'seasonality_mode': 'additive'}}\n", + "{'Current Learner': 'fbprophet', 'Current Sample': 502, 'Current Hyper-parameters': {'changepoint_prior_scale': 0.010000000000000002, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 0.999999999999999, 'seasonality_mode': 'additive'}, 'Best Learner': 'fbprophet', 'Best Hyper-parameters': {'changepoint_prior_scale': 0.010000000000000002, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 0.999999999999999, 'seasonality_mode': 'additive'}}\n", + "{'Current Learner': 'fbprophet', 'Current Sample': 502, 'Current Hyper-parameters': {'changepoint_prior_scale': 0.05247335998097256, 'seasonality_prior_scale': 0.987707602743762, 'holidays_prior_scale': 0.5484274380225445, 'seasonality_mode': 'additive'}, 'Best Learner': 'fbprophet', 'Best Hyper-parameters': {'changepoint_prior_scale': 0.05247335998097256, 'seasonality_prior_scale': 0.987707602743762, 'holidays_prior_scale': 0.5484274380225445, 'seasonality_mode': 'additive'}}\n", + "{'Current Learner': 'fbprophet', 'Current Sample': 502, 'Current Hyper-parameters': {'changepoint_prior_scale': 0.02876449933617924, 'seasonality_prior_scale': 1.80360430903146, 'holidays_prior_scale': 2.1243991057068654, 'seasonality_mode': 'additive'}, 'Best Learner': 'fbprophet', 'Best Hyper-parameters': {'changepoint_prior_scale': 0.02876449933617924, 'seasonality_prior_scale': 1.80360430903146, 'holidays_prior_scale': 2.1243991057068654, 'seasonality_mode': 'additive'}}\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 13, + "source": [ + "import matplotlib.pyplot as plt\r\n", + "import numpy as np\r\n", + "\r\n", + "plt.title('Learning Curve')\r\n", + "plt.xlabel('Wall Clock Time (s)')\r\n", + "plt.ylabel('Validation Accuracy')\r\n", + "plt.scatter(time_history, 1 - np.array(valid_loss_history))\r\n", + "plt.step(time_history, 1 - np.array(best_valid_loss_history), where='post')\r\n", + "plt.show()" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [], + "outputs": [], + "metadata": {} + } + ], + "metadata": { + "kernelspec": { + "name": "python3", + "display_name": "Python 3.8.10 64-bit ('python38': conda)" + }, + "language_info": { + "name": "python", + "version": "3.8.10", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + }, + "interpreter": { + "hash": "8b6c8c3ba4bafbc4530f534c605c8412f25bf61ef13254e4f377ccd42b838aa4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/notebook/flaml_lightgbm.ipynb b/notebook/flaml_lightgbm.ipynb index 49ec982b6..43db1efe5 100644 --- a/notebook/flaml_lightgbm.ipynb +++ b/notebook/flaml_lightgbm.ipynb @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -58,7 +58,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": { "slideshow": { "slide_type": "subslide" @@ -96,7 +96,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": { "slideshow": { "slide_type": "slide" @@ -112,7 +112,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": { "slideshow": { "slide_type": "slide" @@ -121,17 +121,18 @@ "outputs": [], "source": [ "settings = {\n", - " \"time_budget\": 150, # total running time in seconds\n", + " \"time_budget\": 240, # total running time in seconds\n", " \"metric\": 'r2', # primary metrics for regression can be chosen from: ['mae','mse','r2']\n", " \"estimator_list\": ['lgbm'], # list of ML learners; we tune lightgbm in this example\n", " \"task\": 'regression', # task type \n", " \"log_file_name\": 'houses_experiment.log', # flaml log file\n", + " \"seed\": 7654321, # random seed\n", "}" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": { "slideshow": { "slide_type": "slide" @@ -143,108 +144,84 @@ "name": "stderr", "output_type": "stream", "text": [ - "[flaml.automl: 07-24 13:49:03] {912} INFO - Evaluation method: cv\n", - "[flaml.automl: 07-24 13:49:03] {616} INFO - Using RepeatedKFold\n", - "[flaml.automl: 07-24 13:49:03] {933} INFO - Minimizing error metric: 1-r2\n", - "[flaml.automl: 07-24 13:49:03] {952} INFO - List of ML learners in AutoML Run: ['lgbm']\n", - "[flaml.automl: 07-24 13:49:03] {1018} INFO - iteration 0, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:03] {1173} INFO - at 0.5s,\tbest lgbm's error=0.7385,\tbest lgbm's error=0.7385\n", - "[flaml.automl: 07-24 13:49:03] {1018} INFO - iteration 1, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:03] {1173} INFO - at 0.7s,\tbest lgbm's error=0.7385,\tbest lgbm's error=0.7385\n", - "[flaml.automl: 07-24 13:49:03] {1018} INFO - iteration 2, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:03] {1173} INFO - at 0.9s,\tbest lgbm's error=0.5520,\tbest lgbm's error=0.5520\n", - "[flaml.automl: 07-24 13:49:03] {1018} INFO - iteration 3, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:04] {1173} INFO - at 1.1s,\tbest lgbm's error=0.3886,\tbest lgbm's error=0.3886\n", - "[flaml.automl: 07-24 13:49:04] {1018} INFO - iteration 4, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:04] {1173} INFO - at 1.2s,\tbest lgbm's error=0.3886,\tbest lgbm's error=0.3886\n", - "[flaml.automl: 07-24 13:49:04] {1018} INFO - iteration 5, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:04] {1173} INFO - at 1.4s,\tbest lgbm's error=0.3886,\tbest lgbm's error=0.3886\n", - "[flaml.automl: 07-24 13:49:04] {1018} INFO - iteration 6, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:04] {1173} INFO - at 1.6s,\tbest lgbm's error=0.3023,\tbest lgbm's error=0.3023\n", - "[flaml.automl: 07-24 13:49:04] {1018} INFO - iteration 7, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:04] {1173} INFO - at 1.9s,\tbest lgbm's error=0.2611,\tbest lgbm's error=0.2611\n", - "[flaml.automl: 07-24 13:49:04] {1018} INFO - iteration 8, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:05] {1173} INFO - at 2.1s,\tbest lgbm's error=0.2611,\tbest lgbm's error=0.2611\n", - "[flaml.automl: 07-24 13:49:05] {1018} INFO - iteration 9, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:05] {1173} INFO - at 2.4s,\tbest lgbm's error=0.2363,\tbest lgbm's error=0.2363\n", - "[flaml.automl: 07-24 13:49:05] {1018} INFO - iteration 10, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:05] {1173} INFO - at 2.6s,\tbest lgbm's error=0.2363,\tbest lgbm's error=0.2363\n", - "[flaml.automl: 07-24 13:49:05] {1018} INFO - iteration 11, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:05] {1173} INFO - at 2.8s,\tbest lgbm's error=0.2363,\tbest lgbm's error=0.2363\n", - "[flaml.automl: 07-24 13:49:05] {1018} INFO - iteration 12, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:06] {1173} INFO - at 3.2s,\tbest lgbm's error=0.1953,\tbest lgbm's error=0.1953\n", - "[flaml.automl: 07-24 13:49:06] {1018} INFO - iteration 13, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:06] {1173} INFO - at 3.5s,\tbest lgbm's error=0.1953,\tbest lgbm's error=0.1953\n", - "[flaml.automl: 07-24 13:49:06] {1018} INFO - iteration 14, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:06] {1173} INFO - at 3.9s,\tbest lgbm's error=0.1953,\tbest lgbm's error=0.1953\n", - "[flaml.automl: 07-24 13:49:06] {1018} INFO - iteration 15, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:07] {1173} INFO - at 4.1s,\tbest lgbm's error=0.1953,\tbest lgbm's error=0.1953\n", - "[flaml.automl: 07-24 13:49:07] {1018} INFO - iteration 16, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:07] {1173} INFO - at 4.5s,\tbest lgbm's error=0.1953,\tbest lgbm's error=0.1953\n", - "[flaml.automl: 07-24 13:49:07] {1018} INFO - iteration 17, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:07] {1173} INFO - at 4.8s,\tbest lgbm's error=0.1953,\tbest lgbm's error=0.1953\n", - "[flaml.automl: 07-24 13:49:07] {1018} INFO - iteration 18, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:08] {1173} INFO - at 5.5s,\tbest lgbm's error=0.1795,\tbest lgbm's error=0.1795\n", - "[flaml.automl: 07-24 13:49:08] {1018} INFO - iteration 19, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:08] {1173} INFO - at 5.7s,\tbest lgbm's error=0.1795,\tbest lgbm's error=0.1795\n", - "[flaml.automl: 07-24 13:49:08] {1018} INFO - iteration 20, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:11] {1173} INFO - at 8.2s,\tbest lgbm's error=0.1795,\tbest lgbm's error=0.1795\n", - "[flaml.automl: 07-24 13:49:11] {1018} INFO - iteration 21, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:11] {1173} INFO - at 8.5s,\tbest lgbm's error=0.1795,\tbest lgbm's error=0.1795\n", - "[flaml.automl: 07-24 13:49:11] {1018} INFO - iteration 22, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:12] {1173} INFO - at 9.6s,\tbest lgbm's error=0.1768,\tbest lgbm's error=0.1768\n", - "[flaml.automl: 07-24 13:49:12] {1018} INFO - iteration 23, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:13] {1173} INFO - at 10.1s,\tbest lgbm's error=0.1768,\tbest lgbm's error=0.1768\n", - "[flaml.automl: 07-24 13:49:13] {1018} INFO - iteration 24, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:14] {1173} INFO - at 11.1s,\tbest lgbm's error=0.1768,\tbest lgbm's error=0.1768\n", - "[flaml.automl: 07-24 13:49:14] {1018} INFO - iteration 25, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:14] {1173} INFO - at 11.4s,\tbest lgbm's error=0.1768,\tbest lgbm's error=0.1768\n", - "[flaml.automl: 07-24 13:49:14] {1018} INFO - iteration 26, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:18] {1173} INFO - at 15.6s,\tbest lgbm's error=0.1652,\tbest lgbm's error=0.1652\n", - "[flaml.automl: 07-24 13:49:18] {1018} INFO - iteration 27, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:21] {1173} INFO - at 18.5s,\tbest lgbm's error=0.1652,\tbest lgbm's error=0.1652\n", - "[flaml.automl: 07-24 13:49:21] {1018} INFO - iteration 28, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:28] {1173} INFO - at 25.5s,\tbest lgbm's error=0.1642,\tbest lgbm's error=0.1642\n", - "[flaml.automl: 07-24 13:49:28] {1018} INFO - iteration 29, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:29] {1173} INFO - at 26.5s,\tbest lgbm's error=0.1642,\tbest lgbm's error=0.1642\n", - "[flaml.automl: 07-24 13:49:29] {1018} INFO - iteration 30, current learner lgbm\n", - "[flaml.automl: 07-24 13:49:59] {1173} INFO - at 56.8s,\tbest lgbm's error=0.1642,\tbest lgbm's error=0.1642\n", - "[flaml.automl: 07-24 13:49:59] {1018} INFO - iteration 31, current learner lgbm\n", - "[flaml.automl: 07-24 13:50:05] {1173} INFO - at 62.1s,\tbest lgbm's error=0.1622,\tbest lgbm's error=0.1622\n", - "[flaml.automl: 07-24 13:50:05] {1018} INFO - iteration 32, current learner lgbm\n", - "[flaml.automl: 07-24 13:50:13] {1173} INFO - at 70.4s,\tbest lgbm's error=0.1622,\tbest lgbm's error=0.1622\n", - "[flaml.automl: 07-24 13:50:13] {1018} INFO - iteration 33, current learner lgbm\n", - "[flaml.automl: 07-24 13:50:18] {1173} INFO - at 75.6s,\tbest lgbm's error=0.1622,\tbest lgbm's error=0.1622\n", - "[flaml.automl: 07-24 13:50:18] {1018} INFO - iteration 34, current learner lgbm\n", - "[flaml.automl: 07-24 13:50:22] {1173} INFO - at 79.3s,\tbest lgbm's error=0.1622,\tbest lgbm's error=0.1622\n", - "[flaml.automl: 07-24 13:50:22] {1018} INFO - iteration 35, current learner lgbm\n", - "[flaml.automl: 07-24 13:50:49] {1173} INFO - at 106.3s,\tbest lgbm's error=0.1622,\tbest lgbm's error=0.1622\n", - "[flaml.automl: 07-24 13:50:49] {1018} INFO - iteration 36, current learner lgbm\n", - "[flaml.automl: 07-24 13:50:49] {1173} INFO - at 107.0s,\tbest lgbm's error=0.1622,\tbest lgbm's error=0.1622\n", - "[flaml.automl: 07-24 13:50:49] {1018} INFO - iteration 37, current learner lgbm\n", - "[flaml.automl: 07-24 13:50:54] {1173} INFO - at 112.0s,\tbest lgbm's error=0.1611,\tbest lgbm's error=0.1611\n", - "[flaml.automl: 07-24 13:50:54] {1018} INFO - iteration 38, current learner lgbm\n", - "[flaml.automl: 07-24 13:50:59] {1173} INFO - at 116.0s,\tbest lgbm's error=0.1611,\tbest lgbm's error=0.1611\n", - "[flaml.automl: 07-24 13:50:59] {1018} INFO - iteration 39, current learner lgbm\n", - "[flaml.automl: 07-24 13:51:06] {1173} INFO - at 123.3s,\tbest lgbm's error=0.1611,\tbest lgbm's error=0.1611\n", - "[flaml.automl: 07-24 13:51:06] {1018} INFO - iteration 40, current learner lgbm\n", - "[flaml.automl: 07-24 13:51:08] {1173} INFO - at 126.0s,\tbest lgbm's error=0.1611,\tbest lgbm's error=0.1611\n", - "[flaml.automl: 07-24 13:51:08] {1018} INFO - iteration 41, current learner lgbm\n", - "[flaml.automl: 07-24 13:51:11] {1173} INFO - at 128.1s,\tbest lgbm's error=0.1611,\tbest lgbm's error=0.1611\n", - "[flaml.automl: 07-24 13:51:11] {1018} INFO - iteration 42, current learner lgbm\n", - "[flaml.automl: 07-24 13:51:18] {1173} INFO - at 135.4s,\tbest lgbm's error=0.1611,\tbest lgbm's error=0.1611\n", - "[flaml.automl: 07-24 13:51:18] {1018} INFO - iteration 43, current learner lgbm\n", - "[flaml.automl: 07-24 13:51:20] {1173} INFO - at 137.7s,\tbest lgbm's error=0.1611,\tbest lgbm's error=0.1611\n", - "[flaml.automl: 07-24 13:51:20] {1018} INFO - iteration 44, current learner lgbm\n", - "[flaml.automl: 07-24 13:51:27] {1173} INFO - at 144.3s,\tbest lgbm's error=0.1611,\tbest lgbm's error=0.1611\n", - "[flaml.automl: 07-24 13:51:27] {1018} INFO - iteration 45, current learner lgbm\n", - "[flaml.automl: 07-24 13:51:32] {1173} INFO - at 149.4s,\tbest lgbm's error=0.1611,\tbest lgbm's error=0.1611\n", - "[flaml.automl: 07-24 13:51:32] {1219} INFO - selected model: LGBMRegressor(colsample_bytree=0.788228718184241,\n", - " learning_rate=0.08917691724022275, max_bin=256,\n", - " min_child_samples=64, n_estimators=157, num_leaves=4886,\n", - " objective='regression', reg_alpha=0.042293060180467086,\n", - " reg_lambda=95.16149755350158, subsample=0.8278302514488655)\n", - "[flaml.automl: 07-24 13:51:32] {969} INFO - fit succeeded\n" + "[flaml.automl: 08-12 21:25:04] {1121} INFO - Evaluation method: cv\n", + "[flaml.automl: 08-12 21:25:04] {628} INFO - Using RepeatedKFold\n", + "[flaml.automl: 08-12 21:25:04] {1142} INFO - Minimizing error metric: 1-r2\n", + "[flaml.automl: 08-12 21:25:04] {1162} INFO - List of ML learners in AutoML Run: ['lgbm']\n", + "[flaml.automl: 08-12 21:25:04] {1252} INFO - iteration 0, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:07] {1405} INFO - at 4.0s,\tbest lgbm's error=0.7385,\tbest lgbm's error=0.7385\n", + "[flaml.automl: 08-12 21:25:07] {1252} INFO - iteration 1, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:08] {1405} INFO - at 5.1s,\tbest lgbm's error=0.7385,\tbest lgbm's error=0.7385\n", + "[flaml.automl: 08-12 21:25:08] {1252} INFO - iteration 2, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:10] {1405} INFO - at 6.6s,\tbest lgbm's error=0.5520,\tbest lgbm's error=0.5520\n", + "[flaml.automl: 08-12 21:25:10] {1252} INFO - iteration 3, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:11] {1405} INFO - at 7.7s,\tbest lgbm's error=0.3886,\tbest lgbm's error=0.3886\n", + "[flaml.automl: 08-12 21:25:11] {1252} INFO - iteration 4, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:13] {1405} INFO - at 9.8s,\tbest lgbm's error=0.3886,\tbest lgbm's error=0.3886\n", + "[flaml.automl: 08-12 21:25:13] {1252} INFO - iteration 5, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:14] {1405} INFO - at 10.9s,\tbest lgbm's error=0.3886,\tbest lgbm's error=0.3886\n", + "[flaml.automl: 08-12 21:25:14] {1252} INFO - iteration 6, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:16] {1405} INFO - at 12.3s,\tbest lgbm's error=0.3023,\tbest lgbm's error=0.3023\n", + "[flaml.automl: 08-12 21:25:16] {1252} INFO - iteration 7, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:17] {1405} INFO - at 13.6s,\tbest lgbm's error=0.2611,\tbest lgbm's error=0.2611\n", + "[flaml.automl: 08-12 21:25:17] {1252} INFO - iteration 8, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:19] {1405} INFO - at 15.9s,\tbest lgbm's error=0.2611,\tbest lgbm's error=0.2611\n", + "[flaml.automl: 08-12 21:25:19] {1252} INFO - iteration 9, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:23] {1405} INFO - at 19.9s,\tbest lgbm's error=0.2363,\tbest lgbm's error=0.2363\n", + "[flaml.automl: 08-12 21:25:23] {1252} INFO - iteration 10, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:27] {1405} INFO - at 23.3s,\tbest lgbm's error=0.2363,\tbest lgbm's error=0.2363\n", + "[flaml.automl: 08-12 21:25:27] {1252} INFO - iteration 11, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:27] {1405} INFO - at 24.0s,\tbest lgbm's error=0.2363,\tbest lgbm's error=0.2363\n", + "[flaml.automl: 08-12 21:25:27] {1252} INFO - iteration 12, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:29] {1405} INFO - at 25.4s,\tbest lgbm's error=0.1953,\tbest lgbm's error=0.1953\n", + "[flaml.automl: 08-12 21:25:29] {1252} INFO - iteration 13, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:29] {1405} INFO - at 26.0s,\tbest lgbm's error=0.1953,\tbest lgbm's error=0.1953\n", + "[flaml.automl: 08-12 21:25:29] {1252} INFO - iteration 14, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:30] {1405} INFO - at 26.9s,\tbest lgbm's error=0.1953,\tbest lgbm's error=0.1953\n", + "[flaml.automl: 08-12 21:25:30] {1252} INFO - iteration 15, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:32] {1405} INFO - at 28.2s,\tbest lgbm's error=0.1953,\tbest lgbm's error=0.1953\n", + "[flaml.automl: 08-12 21:25:32] {1252} INFO - iteration 16, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:34] {1405} INFO - at 30.2s,\tbest lgbm's error=0.1953,\tbest lgbm's error=0.1953\n", + "[flaml.automl: 08-12 21:25:34] {1252} INFO - iteration 17, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:34] {1405} INFO - at 30.8s,\tbest lgbm's error=0.1953,\tbest lgbm's error=0.1953\n", + "[flaml.automl: 08-12 21:25:34] {1252} INFO - iteration 18, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:36] {1405} INFO - at 32.4s,\tbest lgbm's error=0.1795,\tbest lgbm's error=0.1795\n", + "[flaml.automl: 08-12 21:25:36] {1252} INFO - iteration 19, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:37] {1405} INFO - at 33.6s,\tbest lgbm's error=0.1795,\tbest lgbm's error=0.1795\n", + "[flaml.automl: 08-12 21:25:37] {1252} INFO - iteration 20, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:42] {1405} INFO - at 38.2s,\tbest lgbm's error=0.1795,\tbest lgbm's error=0.1795\n", + "[flaml.automl: 08-12 21:25:42] {1252} INFO - iteration 21, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:43] {1405} INFO - at 39.8s,\tbest lgbm's error=0.1795,\tbest lgbm's error=0.1795\n", + "[flaml.automl: 08-12 21:25:43] {1252} INFO - iteration 22, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:46] {1405} INFO - at 43.1s,\tbest lgbm's error=0.1768,\tbest lgbm's error=0.1768\n", + "[flaml.automl: 08-12 21:25:47] {1252} INFO - iteration 23, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:49] {1405} INFO - at 45.5s,\tbest lgbm's error=0.1768,\tbest lgbm's error=0.1768\n", + "[flaml.automl: 08-12 21:25:49] {1252} INFO - iteration 24, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:58] {1405} INFO - at 54.4s,\tbest lgbm's error=0.1768,\tbest lgbm's error=0.1768\n", + "[flaml.automl: 08-12 21:25:58] {1252} INFO - iteration 25, current learner lgbm\n", + "[flaml.automl: 08-12 21:25:59] {1405} INFO - at 55.8s,\tbest lgbm's error=0.1768,\tbest lgbm's error=0.1768\n", + "[flaml.automl: 08-12 21:25:59] {1252} INFO - iteration 26, current learner lgbm\n", + "[flaml.automl: 08-12 21:26:21] {1405} INFO - at 77.3s,\tbest lgbm's error=0.1657,\tbest lgbm's error=0.1657\n", + "[flaml.automl: 08-12 21:26:21] {1252} INFO - iteration 27, current learner lgbm\n", + "[flaml.automl: 08-12 21:26:29] {1405} INFO - at 85.4s,\tbest lgbm's error=0.1657,\tbest lgbm's error=0.1657\n", + "[flaml.automl: 08-12 21:26:29] {1252} INFO - iteration 28, current learner lgbm\n", + "[flaml.automl: 08-12 21:26:36] {1405} INFO - at 92.3s,\tbest lgbm's error=0.1648,\tbest lgbm's error=0.1648\n", + "[flaml.automl: 08-12 21:26:36] {1252} INFO - iteration 29, current learner lgbm\n", + "[flaml.automl: 08-12 21:26:39] {1405} INFO - at 95.6s,\tbest lgbm's error=0.1648,\tbest lgbm's error=0.1648\n", + "[flaml.automl: 08-12 21:26:39] {1252} INFO - iteration 30, current learner lgbm\n", + "[flaml.automl: 08-12 21:27:06] {1405} INFO - at 122.7s,\tbest lgbm's error=0.1615,\tbest lgbm's error=0.1615\n", + "[flaml.automl: 08-12 21:27:06] {1252} INFO - iteration 31, current learner lgbm\n", + "[flaml.automl: 08-12 21:27:11] {1405} INFO - at 127.3s,\tbest lgbm's error=0.1615,\tbest lgbm's error=0.1615\n", + "[flaml.automl: 08-12 21:27:11] {1252} INFO - iteration 32, current learner lgbm\n", + "[flaml.automl: 08-12 21:28:53] {1405} INFO - at 229.8s,\tbest lgbm's error=0.1615,\tbest lgbm's error=0.1615\n", + "[flaml.automl: 08-12 21:28:53] {1461} INFO - selected model: LGBMRegressor(colsample_bytree=0.8021997484670117,\n", + " learning_rate=0.062267095563511524, max_bin=512,\n", + " min_child_samples=128, n_estimators=511, num_leaves=276,\n", + " objective='regression', reg_alpha=0.009948140763622663,\n", + " reg_lambda=8.181816322817145, subsample=0.8716100265520644,\n", + " verbose=-1)\n", + "[flaml.automl: 08-12 21:28:53] {1184} INFO - fit succeeded\n", + "[flaml.automl: 08-12 21:28:53] {1185} INFO - Time taken to find the best model: 122.74374485015869\n" ] } ], @@ -266,7 +243,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": { "slideshow": { "slide_type": "slide" @@ -278,9 +255,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Best hyperparmeter config: {'n_estimators': 157, 'num_leaves': 4886, 'min_child_samples': 64, 'learning_rate': 0.08917691724022275, 'subsample': 0.8278302514488655, 'log_max_bin': 9, 'colsample_bytree': 0.788228718184241, 'reg_alpha': 0.042293060180467086, 'reg_lambda': 95.16149755350158}\n", - "Best r2 on validation data: 0.8389\n", - "Training duration of best run: 4.971 s\n" + "Best hyperparmeter config: {'n_estimators': 1610, 'num_leaves': 276, 'min_child_samples': 128, 'learning_rate': 0.062267095563511524, 'subsample': 0.8716100265520644, 'log_max_bin': 10, 'colsample_bytree': 0.8021997484670117, 'reg_alpha': 0.009948140763622663, 'reg_lambda': 8.181816322817145}\n", + "Best r2 on validation data: 0.8385\n", + "Training duration of best run: 27.09 s\n" ] } ], @@ -293,7 +270,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": { "slideshow": { "slide_type": "slide" @@ -303,25 +280,59 @@ { "data": { "text/plain": [ - "LGBMRegressor(colsample_bytree=0.788228718184241,\n", - " learning_rate=0.08917691724022275, max_bin=256,\n", - " min_child_samples=64, n_estimators=157, num_leaves=4886,\n", - " objective='regression', reg_alpha=0.042293060180467086,\n", - " reg_lambda=95.16149755350158, subsample=0.8278302514488655)" + "LGBMRegressor(colsample_bytree=0.8021997484670117,\n", + " learning_rate=0.062267095563511524, max_bin=512,\n", + " min_child_samples=128, n_estimators=511, num_leaves=276,\n", + " objective='regression', reg_alpha=0.009948140763622663,\n", + " reg_lambda=8.181816322817145, subsample=0.8716100265520644,\n", + " verbose=-1)" ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "automl.model.estimator" + "automl.model.estimator\n" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc0AAAD4CAYAAACOhb23AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAezklEQVR4nO3de5RcVZ328e9DJySQYAdIZPVEpAAzIJDQJC0KhAxewBF9ESUahIGA85rhMqi4GI3i0oDjCIQZEUUhziBBLvqGi7CCEBgwkImE0J1LdwIElMSRyEXRNJcIQuf3/nF2k6Lsy+lrVVc/n7Vq9ald++z9O0WxnuxzTlcrIjAzM7Pu7VDuAszMzIYKh6aZmVlODk0zM7OcHJpmZmY5OTTNzMxyGlHuAmxgjR8/PgqFQrnLMDMbUpqamv4QERNK2x2aVa5QKNDY2FjuMszMhhRJv+mo3adnzczMcnJompmZ5eTQNDMzy8mhaWZmlpND08zMLCeHppmZWU4OTTMzs5wcmmZmZjn5yw2qXMvmVgpz7yh3GWZmA2bTRR8etLm80jQzM8vJoWlmZpaTQ9PMzCwnh6aZmVlODk0zM7OcHJpmZmY5OTSLSHppAMY8TtLctH28pAN6McZSSQ39XZuZmfWMQ3OARcTtEXFReno80OPQNDOzyuDQ7IAy8yWtk9QiaVZqPyqt+m6S9Jik6yUpvXZsamuSdLmkxan9NEnfk3Q4cBwwX9IaSfsWryAljZe0KW3vJOknkh6VdCuwU1Ftx0h6UNIqSYskjR3cd8fMbPjyNwJ17ONAPXAwMB54WNID6bVDgAOB3wHLgSMkNQJXATMiYqOkG0sHjIhfSrodWBwRNwGkvO3ImcDWiHinpCnAqtR/PPBV4AMR8bKkLwFfAC4s3lnSHGAOQM1bJvTyLTAzs1JeaXZsOnBjRLRFxLPA/cC70msrI+KpiNgGrAEKwP7AkxGxMfX5q9DsoRnAdQAR0Qw0p/b3kJ3eXS5pDTAb2Kt054hYEBENEdFQs3NtH0sxM7N2Xmn23KtF22307T18ne3/cBmdo7+AeyLiU32Y08zMeskrzY4tA2ZJqpE0gWzlt7KL/huAfSQV0vNZnfR7Edil6PkmYFranlnU/gBwEoCkg4ApqX0F2engd6TXxkj62xzHY2Zm/cCh2bFbyU6JrgXuA74YEc901jki/gycBdwlqYksHFs76PoT4F8krZa0L3ApcKak1WTXTtv9ABgr6VGy65VNaZ7fA6cBN0pqBh4kOzVsZmaDQBFR7hqqgqSxEfFSupv2CuCJiPh2uesaVTcp6mZfVu4yzMwGzED8aTBJTRHxV78f75Vm//lMujlnPVBLdjetmZlVEd8I1E/SqrLsK0szMxs4XmmamZnl5NA0MzPLyaFpZmaWk69pVrnJE2tpHIA7y8zMhiOvNM3MzHJyaJqZmeXk0DQzM8vJoWlmZpaTbwSqci2bWynMvaPcZZiZDaqB+Go98ErTzMwsN4emmZlZTg5NMzOznByaZmZmOTk0zczMcnJompmZ5eTQ7AFJL3Xz+jhJZxU9/xtJN6XteknH9mLOeZLO63m1ZmbW3xya/Wsc8EZoRsTvImJmeloP9Dg0zcyscjg0e0HSWEn3SlolqUXSR9NLFwH7Slojab6kgqR1knYELgRmpddmla4gU79C2j5f0uOS/gfYr6jPvpLuktQkaZmk/QftoM3MzN8I1EuvAB+LiBckjQdWSLodmAscFBH1AO0hGBF/kfQ1oCEi/jm9Nq+jgSVNA04kW5mOAFYBTenlBcAZEfGEpHcD3wfe18EYc4A5ADVvmdAfx2tmZjg0e0vAv0maAWwDJgJ79NPYRwK3RsRWgBTGSBoLHA4sktTed1RHA0TEArKAZVTdpOinuszMhj2HZu+cDEwApkXEa5I2AaN7OMbrvPn0eHf77wBsaV/FmpnZ4PM1zd6pBZ5LgfleYK/U/iKwSyf7lL62CZgKIGkqsHdqfwA4XtJOknYB/g9ARLwAbJT0ibSPJB3cf4dkZmbdcWj2zvVAg6QW4FTgMYCIeB5Ynm7qmV+yzy+AA9pvBAJuBnaTtB74Z+DxNMYq4KfAWuBO4OGiMU4G/lHSWmA98FHMzGzQKMKXvKrZqLpJUTf7snKXYWY2qPr6p8EkNUVEQ2m7V5pmZmY5OTTNzMxycmiamZnl5NA0MzPLyb+nWeUmT6ylsY8XxM3MLOOVppmZWU4OTTMzs5wcmmZmZjk5NM3MzHLyjUBVrmVzK4W5d5S7DDProb5+o40NDK80zczMcnJompmZ5eTQNDMzy8mhaWZmlpND08zMLCeHppmZWU7DIjQlFSStK8O8L/Ww/zxJ53XQXpb6zczszYZFaJqZmfWH4RSaNZJ+KGm9pLsl7SSpXtIKSc2SbpW0K4CkpZIa0vZ4SZvS9oGSVkpak/aZlNr/oaj9Kkk17ZNK+qaktWmePVJbQdJ9aYx7Jb29tFhJ09J+a4Gzi9o7rMHMzAbecArNScAVEXEgsAU4AbgW+FJETAFagK93M8YZwHcioh5oAJ6S9E5gFnBEam8DTk79xwArIuJg4AHgM6n9u8DCNO/1wOUdzPUj4Jy0b5c1lO4oaY6kRkmNbVtbuzkkMzPLaziF5saIWJO2m4B9gXERcX9qWwjM6GaMB4GvSPoSsFdE/Bl4PzANeFjSmvR8n9T/L8DiojkLafsw4Ia0/WNgevEkksal2h4o6tNVDW8SEQsioiEiGmp2ru3mkMzMLK/hFJqvFm23AeO66Ps629+b0e2NEXEDcBzwZ+Dnkt4HiGzVWJ8e+0XEvLTLaxERRXP2+bt+O6nBzMwGwXAKzVKtwJ8kHZmenwK0rzo3ka0eAWa27yBpH+DJiLgcuA2YAtwLzJT01tRnN0l7dTP3L4ET0/bJwLLiFyNiC7BF0vSiPl3VYGZmg2A4hybAbGC+pGagHrgwtV8KnClpNTC+qP8ngXXpNOxBwLUR8QjwVeDuNM49QF03854DnJ76nwJ8roM+pwNXpLnUVQ25j9bMzPpE288eWjUaVTcp6mZfVu4yzKyH/KfByktSU0Q0lLYP95WmmZlZbg5NMzOznByaZmZmOTk0zczMcurz7w1aZZs8sZZG31BgZtYvvNI0MzPLyaFpZmaWk0PTzMwsJ4emmZlZTr4RqMq1bG6lMPeOcpdhZjZgBvPbk7zSNDMzy8mhaWZmlpND08zMLCeHppmZWU4OTTMzs5wcmmZmZjk5NAeApIKkdTn6nFT0vEHS5QNfnZmZ9ZZDs3wKwBuhGRGNEfHZ8pVjZmbdGZahmVZ5j0m6XtKjkm6StLOk90taLalF0tWSRqX+myRdktpXSnpHar9G0syicV/qZK5lklalx+HppYuAIyWtkXSupKMkLU777CbpZ5KaJa2QNCW1z0t1LZX0pCSHrJnZIBqWoZnsB3w/It4JvAB8AbgGmBURk8m+LenMov6tqf17wGU9mOc54OiImArMAtpPwc4FlkVEfUR8u2SfC4DVETEF+ApwbdFr+wMfBA4Fvi5pZOmEkuZIapTU2La1tQelmplZV4ZzaP42Ipan7euA9wMbI+Lx1LYQmFHU/8ain4f1YJ6RwA8ltQCLgANy7DMd+DFARNwH7C7pLem1OyLi1Yj4A1kg71G6c0QsiIiGiGio2bm2B6WamVlXhvN3z0bJ8y3A7jn7t2+/TvqHh6QdgB072O9c4Fng4NT3ld4UW+TVou02hvd/QzOzQTWcV5pvl9S+YjwJaAQK7dcrgVOA+4v6zyr6+WDa3gRMS9vHka0qS9UCT0fEtjRmTWp/Edilk9qWAScDSDoK+ENEvJDrqMzMbMAM51XKBuBsSVcDjwCfBVYAiySNAB4Grizqv6ukZrKV3qdS2w+B2yStBe4CXu5gnu8DN0s6taRPM9CW9r0GWF20zzzg6jTfVmB23w7VzMz6gyJKz1JWP0kFYHFEHJSz/yagIV1HHFJG1U2Kutk9uW/JzGxoGYg/DSapKSIaStuH8+lZMzOzHhmWp2cjYhOQa5WZ+hcGrBgzMxsyvNI0MzPLyaFpZmaWk0PTzMwsp2F5TXM4mTyxlsYBuLPMzGw48krTzMwsJ4emmZlZTg5NMzOznByaZmZmOflGoCrXsrmVwtw7yl2GmSUD8ZVvNni80jQzM8vJoWlmZpaTQ9PMzCwnh6aZmVlODk0zM7OcHJpmZmY5VVxoShon6axu+hQknZRjrIKkdV28fpqk7/Wmzv7Y38zMhpaKC01gHNBlaAIFoNvQLBdJ/v1XM7MqVImheRGwr6Q1kuanxzpJLZJmFfU5MvU5N60ol0lalR6H92C+PSUtlfSEpK+3N0r6B0kr0xxXSapJ7adLelzSSuCIov7XSLpS0kPAJZLqJa2Q1CzpVkm7pn6dtS+V9G1JjZIelfQuSbekuv419Rkj6Q5Ja9N7MgszMxs0lRiac4FfR0Q9sAKoBw4GPgDMl1SX+iyLiPqI+DbwHHB0REwFZgGX92C+Q4ETgCnAJyQ1SHpnGueIVEcbcHKa+wKysJwOHFAy1tuAwyPiC8C1wJciYgrQArQHcmftAH+JiAbgSuA24GzgIOA0SbsDfw/8LiIOjoiDgLs6OiBJc1L4NrZtbe3BW2FmZl2p9NOI04EbI6INeFbS/cC7gBdK+o0EviepPeD+tgdz3BMRzwNIuiXN+TowDXhYEsBOZMH8bmBpRPw+9f9pyVyLIqJNUi0wLiLuT+0LgUWdtRftf3v62QKsj4in0zxPAnum9n+XdDGwOCKWdXRAEbEAWAAwqm5S9OC9MDOzLlR6aOZ1LvAs2Yp0B+CVHuxbGioBCFgYEV8ufkHS8d2M9XIP5u3Iq+nntqLt9ucjIuJxSVOBY4F/lXRvRFzYxznNzCynSjw9+yKwS9peBsySVCNpAjADWFnSB6AWeDoitgGnADU9mO9oSbtJ2gk4HlgO3AvMlPRWgPT6XsBDwN9J2l3SSOATHQ0YEa3AnyQdmZpOAe7vrD1voZL+BtgaEdcB84GpPThOMzPro4pbaUbE85KWp18VuRNoBtaSrQC/GBHPSHoeaJO0FrgG+D5ws6RTya7z9WTFtxK4mex65HUR0Qgg6avA3ZJ2AF4Dzo6IFZLmAQ8CW4A1XYw7G7hS0s7Ak8Dp3bTnMZnsuu62VNOZPdjXzMz6SBG+5FXNRtVNirrZl5W7DDNL/KfBhgZJTenGzDepxNOzZmZmFaniTs8OBEkfBC4uad4YER8rRz1mZjY0DYvQjIglwJJy12FmZkObT8+amZnlNCxWmsPZ5Im1NPrGAzOzfuGVppmZWU4OTTMzs5wcmmZmZjk5NM3MzHLyjUBVrmVzK4W5d5S7DDMbIvyNRV3zStPMzCwnh6aZmVlODk0zM7OcHJpmZmY5OTTNzMxycmiamZnl5NA0MzPLqapDU9I4SWd106cg6aQcYxUkreu/6szMbKip6tAExgFdhiZQALoNzZ6Q5C+NMDOrQtUemhcB+0paI2l+eqyT1CJpVlGfI1Ofc9OKcpmkVelxeJ6JJJ0m6XZJ9wH3StpN0s8kNUtaIWlK6tdZ+zxJC9Pcv5H0cUmXpFrvkjQy9btI0iNp/0s7qWWOpEZJjW1bW/v6HpqZWVLtK6K5wEERUS/pBOAM4GBgPPCwpAdSn/Mi4iMAknYGjo6IVyRNAm4EGnLONxWYEhF/lPRdYHVEHC/pfcC1QD1wQSftAPsC7wUOAB4EToiIL0q6FfiwpGXAx4D9IyIkjeuoiIhYACwAGFU3KfK+WWZm1rVqX2kWmw7cGBFtEfEscD/wrg76jQR+KKkFWEQWYHndExF/LJrvxwARcR+wu6S3dNEOcGdEvAa0ADXAXam9hew0civwCvBfkj4ObO1BbWZm1kfDKTTzOhd4lmxF2gDs2IN9X+7j3K8CRMQ24LWIaF8lbgNGRMTrwKHATcBH2B6qZmY2CKo9NF8Edknby4BZkmokTQBmACtL+gDUAk+n4DqFbMXXG8uAkwEkHQX8ISJe6KK9W5LGArUR8XOycD+4l7WZmVkvVPU1zYh4XtLy9KsidwLNwFoggC9GxDOSngfaJK0FrgG+D9ws6VSylVxvV4/zgKslNZOdRp3dTXseuwC3SRoNCPhCL2szM7Ne0PYzgFaNRtVNirrZl5W7DDMbIvz3NDOSmiLir24CrfbTs2ZmZv2mqk/PDgRJHwQuLmneGBEfK0c9ZmY2eByaPRQRS4Al5a7DzMwGn0Ozyk2eWEujr1GYmfULX9M0MzPLyaFpZmaWk0PTzMwsJ4emmZlZTr4RqMq1bG6lMPeOcpdhNqD8C/k2WLzSNDMzy8mhaWZmlpND08zMLCeHppmZWU4OTTMzs5wcmmZmZjk5NM3MzHLqNjQlFSStG6gCJP1yoMbuq+Jjl9Qg6fJy12RmZuVT9i83iIjDy11DHhHRCDSWuw4zMyufvKdnayT9UNJ6SXdL2klSvaQVkpol3SppVwBJSyU1pO3xkjal7QMlrZS0Ju0zKbW/lH4elfa9SdJjkq6XpPTasamtSdLlkhZ3VqikeZIWSlom6TeSPi7pEkktku6SNDL1mybp/jTmEkl1Re1rJa0Fzi4a96j2eSUdKulBSasl/VLSfqn9NEm3pHmekHRJV2+qpB9Iakzv6wVF7R0er6Qxkq5O7+NqSR/tZNw5adzGtq2tXZVgZmY9kDc0JwFXRMSBwBbgBOBa4EsRMQVoAb7ezRhnAN+JiHqgAXiqgz6HAJ8HDgD2AY6QNBq4CvhQREwDJuSod1/gfcBxwHXALyJiMvBn4MMpOL8LzExjXg18M+37I+CciDi4i/EfA46MiEOArwH/VvRaPTALmAzMkrRnF+OcHxENwBTg7yRN6eZ4zwfui4hDgfcC8yWNKR00IhZERENENNTsXNvF9GZm1hN5T89ujIg1abuJLJTGRcT9qW0hsKibMR4Ezpf0NuCWiHiigz4rI+IpAElrgALwEvBkRGxMfW4E5nQz150R8ZqkFqAGuCu1t6Qx9wMOAu5Ji9ka4GlJ49JxPZD6/xj4UAfj1wIL02o5gJFFr90bEa3pGB4B9gJ+20mdn5Q0h+y/Qx3ZPxZ26OJ4jwGOk3Reej4aeDvwaNdvh5mZ9Ye8oflq0XYbMK6Lvq+zfQU7ur0xIm6Q9BDwYeDnkv4pIu7rZp7eXnN9Nc25TdJrERGpfVsaU8D6iDiseKcUmnl8g2z1+jFJBWBp6dxJp8cgaW/gPOBdEfEnSddQ9H51QsAJEbEhZ51mZtaPevsrJ63AnyQdmZ6fArSvOjcB09L2zPYdJO1DtoK6HLiN7JRkHhuAfVI4QXbqs682ABMkHZZqGynpwIjYAmyRND31O7mT/WuBzWn7tF7W8BbgZaBV0h5sX9F2dbxLgHOKrvUe0su5zcysF/rye5qzya6pNZNdx7swtV8KnClpNTC+qP8ngXXptOtBZNdEuxURfwbOAu6S1AS8SBbavRYRfyEL9IvTDT9rgPa7eE8Hrkh1qpMhLgG+lY6xV6vhiFgLrCa7PnoDsDy1d3W83yA7FdwsaX16bmZmg0Tbz1xWLkljI+KltMK6AngiIr5d7roGSn8e76i6SVE3+7L+LdCswvjvaVp/k9SUbtR8k6HyjUCfSSu/9WSnRq8qcz0Dbbgdr5nZkFD2LzfII62y3rTSknQ68LmSrssj4mwqTLoBalRJ8ykR0dJR/46O18zMym9IhGZHIuJHZL9TWfEi4t3lrsHMzPpuqJyeNTMzK7shu9K0fCZPrKXRN0mYmfULrzTNzMxycmiamZnl5NA0MzPLyaFpZmaWk28EqnItm1spzL2j3GWYWZn5W5P6h1eaZmZmOTk0zczMcnJompmZ5eTQNDMzy8mhaWZmlpND08zMLCeHppmZWU5VG5qSlkpqSNs/lzSuH8c+Q9Kp/TWemZkNDcPiyw0i4th+Hu/K/hzPzMyGhopaaUoqSHpM0jWSHpd0vaQPSFou6QlJh0oaI+lqSSslrZb00bTvTpJ+IulRSbcCOxWNu0nS+LT9M0lNktZLmlPU5yVJ35S0VtIKSXt0Uec8Seel7aWSLk71PC7pyNReI+lSSeskNUs6J7W/P9Xdko5jVFGN35K0RlKjpKmSlkj6taQziub+F0kPpzEv6KS+OWmMxratrX34L2JmZsUqKjSTdwD/DuyfHicB04HzgK8A5wP3RcShwHuB+ZLGAGcCWyPincDXgWmdjP/piJgGNACflbR7ah8DrIiIg4EHgM/0oOYRqZ7Pp7kB5gAFoD4ipgDXSxoNXAPMiojJZCv9M4vG+d+IqAeWpX4zgfcAFwBIOgaYBBwK1APTJM0oLSYiFkREQ0Q01Oxc24PDMDOzrlRiaG6MiJaI2AasB+6NiABayELoGGCupDXAUmA08HZgBnAdQEQ0A82djP9ZSWuBFcCeZCEE8BdgcdpuSnPldUsH+30AuCoiXk81/RHYLx3f46nPwlR3u9vTzxbgoYh4MSJ+D7yarskekx6rgVVk/6iYhJmZDYpKvKb5atH2tqLn28jqbQNOiIgNxTtJ6nZgSUeRhdlhEbFV0lKy0AV4LYUzaY6evDftNfZ0v87GKT7u9ucjAAHfioir+jCHmZn1UiWuNLuzBDhHKSUlHZLaHyA7lYukg4ApHexbC/wpBeb+ZKc+B8o9wD9JGpFq2g3YABQkvSP1OQW4vwdjLgE+LWlsGnOipLf2Y81mZtaFoRia3wBGAs2S1qfnAD8Axkp6FLiQ7FRpqbuAEanPRWSnaAfKfwL/m+pcC5wUEa8ApwOLJLWQrSBz34kbEXcDNwAPpv1vAnbp98rNzKxD2n5G0qrRqLpJUTf7snKXYWZl5r+n2TOSmiKiobR9KK40zczMyqISbwSqGJLOBz5R0rwoIr5ZjnrMzKy8HJpdSOHogDQzM8ChWfUmT6yl0dcyzMz6ha9pmpmZ5eTQNDMzy8mhaWZmlpND08zMLCeHppmZWU4OTTMzs5wcmmZmZjk5NM3MzHJyaJqZmeXkv3JS5SS9SPZ3PIea8cAfyl1EDw3FmsF1D6ahWDMMz7r3iogJpY3+Gr3qt6GjP29T6SQ1DrW6h2LN4LoH01CsGVx3MZ+eNTMzy8mhaWZmlpNDs/otKHcBvTQU6x6KNYPrHkxDsWZw3W/wjUBmZmY5eaVpZmaWk0PTzMwsJ4dmlZL095I2SPqVpLkVUM/Vkp6TtK6obTdJ90h6Iv3cNbVL0uWp9mZJU4v2mZ36PyFp9iDUvaekX0h6RNJ6SZ+r9NoljZa0UtLaVPMFqX1vSQ+l2n4qacfUPio9/1V6vVA01pdT+wZJHxyomkvqr5G0WtLioVK3pE2SWiStkdSY2ir2M5LmGifpJkmPSXpU0mFDoOb90nvc/nhB0ucHte6I8KPKHkAN8GtgH2BHYC1wQJlrmgFMBdYVtV0CzE3bc4GL0/axwJ2AgPcAD6X23YAn089d0/auA1x3HTA1be8CPA4cUMm1p7nHpu2RwEOplv8HnJjarwTOTNtnAVem7ROBn6btA9JnZxSwd/pM1QzCZ+ULwA3A4vS84usGNgHjS9oq9jOS5lsI/N+0vSMwrtJrLqm/BngG2Gsw6x7wA/Nj8B/AYcCSoudfBr5cAXUVeHNobgDq0nYd2RcxAFwFfKq0H/Ap4Kqi9jf1G6RjuA04eqjUDuwMrALeTfbNKCNKPyPAEuCwtD0i9VPp56a43wDW+zbgXuB9wOJUx1CoexN/HZoV+xkBaoGNpJtBh0LNHRzDMcDywa7bp2er00Tgt0XPn0ptlWaPiHg6bT8D7JG2O6u/rMeVTv8dQrZyq+ja0ynONcBzwD1kq60tEfF6B/O/UVt6vRXYfbBrTi4DvghsS893Z2jUHcDdkpokzUltlfwZ2Rv4PfCjdCr8PyWNqfCaS50I3Ji2B61uh6ZVhMj+uVexv/8kaSxwM/D5iHih+LVKrD0i2iKinmzldiiwf5lL6pakjwDPRURTuWvphekRMRX4EHC2pBnFL1bgZ2QE2eWSH0TEIcDLZKc131CBNb8hXdc+DlhU+tpA1+3QrE6bgT2Lnr8ttVWaZyXVAaSfz6X2zuovy3FJGkkWmNdHxC2peUjUHhFbgF+QndYcJ6n9+6aL53+jtvR6LfB8GWo+AjhO0ibgJ2SnaL8zBOomIjann88Bt5L9Q6WSPyNPAU9FxEPp+U1kIVrJNRf7ELAqIp5NzwetbodmdXoYmJTuOtyR7DTG7WWuqSO3A+13rc0mu17Y3n5quvPtPUBrOvWyBDhG0q7p7rhjUtuAkSTgv4BHI+I/hkLtkiZIGpe2dyK7BvsoWXjO7KTm9mOZCdyX/rV+O3Biukt1b2ASsHIgagaIiC9HxNsiokD2mb0vIk6u9LoljZG0S/s22X/bdVTwZyQingF+K2m/1PR+4JFKrrnEp9h+ara9vsGpezAu2Pox+A+yu8YeJ7uWdX4F1HMj8DTwGtm/cv+R7PrTvcATwH8Du6W+Aq5ItbcADUXjfBr4VXqcPgh1Tyc71dMMrEmPYyu5dmAKsDrVvA74Wmrfhyw8fkV2WmtUah+dnv8qvb5P0Vjnp2PZAHxoED8vR7H97tmKrjvVtzY91rf//1bJn5E0Vz3QmD4nPyO7i7Sia07zjSE7o1Bb1DZodftr9MzMzHLy6VkzM7OcHJpmZmY5OTTNzMxycmiamZnl5NA0MzPLyaFpZmaWk0PTzMwsp/8PVAqPuXSy5IQAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.barh(automl.model.estimator.feature_name_, automl.model.estimator.feature_importances_)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, "metadata": { "slideshow": { "slide_type": "slide" @@ -337,7 +348,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": { "slideshow": { "slide_type": "slide" @@ -349,8 +360,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Predicted labels [143563.86395674 254576.18760499 144158.79619969 ... 196049.43993507\n", - " 252324.54317706 279607.98371458]\n", + "Predicted labels [138120.83608579 254303.34992791 142506.66563931 ... 188177.25137713\n", + " 267813.20015477 274066.51821463]\n", "True labels 14740 136900.0\n", "10101 241300.0\n", "20566 200700.0\n", @@ -375,7 +386,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "metadata": { "slideshow": { "slide_type": "slide" @@ -387,9 +398,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "r2 = 0.8467624164909245\n", - "mse = 2025572000.0048184\n", - "mae = 29845.819846911687\n" + "r2 = 0.8475173393496316\n", + "mse = 2015593047.2587376\n", + "mae = 30018.530184056573\n" ] } ], @@ -403,7 +414,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 12, "metadata": { "slideshow": { "slide_type": "subslide" @@ -415,17 +426,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 20, 'learning_rate': 0.1, 'subsample': 1.0, 'log_max_bin': 8, 'colsample_bytree': 1.0, 'reg_alpha': 0.0009765625, 'reg_lambda': 1.0}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 20, 'learning_rate': 0.1, 'subsample': 1.0, 'log_max_bin': 8, 'colsample_bytree': 1.0, 'reg_alpha': 0.0009765625, 'reg_lambda': 1.0}}\n", - "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 12, 'learning_rate': 0.25912534572860507, 'subsample': 0.9266743941610592, 'log_max_bin': 10, 'colsample_bytree': 1.0, 'reg_alpha': 0.0013933617380144255, 'reg_lambda': 0.18096917948292954}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 12, 'learning_rate': 0.25912534572860507, 'subsample': 0.9266743941610592, 'log_max_bin': 10, 'colsample_bytree': 1.0, 'reg_alpha': 0.0013933617380144255, 'reg_lambda': 0.18096917948292954}}\n", - "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 24, 'learning_rate': 1.0, 'subsample': 0.8513627344387318, 'log_max_bin': 10, 'colsample_bytree': 0.946138073111236, 'reg_alpha': 0.0018311776973217071, 'reg_lambda': 0.27901659190538414}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 24, 'learning_rate': 1.0, 'subsample': 0.8513627344387318, 'log_max_bin': 10, 'colsample_bytree': 0.946138073111236, 'reg_alpha': 0.0018311776973217071, 'reg_lambda': 0.27901659190538414}}\n", + "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 20, 'learning_rate': 0.09999999999999995, 'subsample': 1.0, 'log_max_bin': 8, 'colsample_bytree': 1.0, 'reg_alpha': 0.0009765625, 'reg_lambda': 1.0}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 20, 'learning_rate': 0.09999999999999995, 'subsample': 1.0, 'log_max_bin': 8, 'colsample_bytree': 1.0, 'reg_alpha': 0.0009765625, 'reg_lambda': 1.0}}\n", + "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 12, 'learning_rate': 0.25912534572860485, 'subsample': 0.9266743941610592, 'log_max_bin': 10, 'colsample_bytree': 1.0, 'reg_alpha': 0.0013933617380144255, 'reg_lambda': 0.18096917948292954}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 12, 'learning_rate': 0.25912534572860485, 'subsample': 0.9266743941610592, 'log_max_bin': 10, 'colsample_bytree': 1.0, 'reg_alpha': 0.0013933617380144255, 'reg_lambda': 0.18096917948292954}}\n", + "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 24, 'learning_rate': 1.0, 'subsample': 0.8513627344387318, 'log_max_bin': 10, 'colsample_bytree': 0.946138073111236, 'reg_alpha': 0.0018311776973217073, 'reg_lambda': 0.27901659190538414}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 4, 'num_leaves': 4, 'min_child_samples': 24, 'learning_rate': 1.0, 'subsample': 0.8513627344387318, 'log_max_bin': 10, 'colsample_bytree': 0.946138073111236, 'reg_alpha': 0.0018311776973217073, 'reg_lambda': 0.27901659190538414}}\n", "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 11, 'num_leaves': 4, 'min_child_samples': 36, 'learning_rate': 1.0, 'subsample': 0.8894434216129232, 'log_max_bin': 10, 'colsample_bytree': 1.0, 'reg_alpha': 0.0013605736901132325, 'reg_lambda': 0.1222158118565165}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 11, 'num_leaves': 4, 'min_child_samples': 36, 'learning_rate': 1.0, 'subsample': 0.8894434216129232, 'log_max_bin': 10, 'colsample_bytree': 1.0, 'reg_alpha': 0.0013605736901132325, 'reg_lambda': 0.1222158118565165}}\n", - "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 20, 'num_leaves': 4, 'min_child_samples': 46, 'learning_rate': 1.0, 'subsample': 0.9814787163243813, 'log_max_bin': 9, 'colsample_bytree': 0.8499027725496043, 'reg_alpha': 0.0022085340760961856, 'reg_lambda': 0.546062702473889}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 20, 'num_leaves': 4, 'min_child_samples': 46, 'learning_rate': 1.0, 'subsample': 0.9814787163243813, 'log_max_bin': 9, 'colsample_bytree': 0.8499027725496043, 'reg_alpha': 0.0022085340760961856, 'reg_lambda': 0.546062702473889}}\n", + "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 20, 'num_leaves': 4, 'min_child_samples': 46, 'learning_rate': 1.0, 'subsample': 0.9814787163243813, 'log_max_bin': 9, 'colsample_bytree': 0.8499027725496043, 'reg_alpha': 0.0022085340760961856, 'reg_lambda': 0.5460627024738893}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 20, 'num_leaves': 4, 'min_child_samples': 46, 'learning_rate': 1.0, 'subsample': 0.9814787163243813, 'log_max_bin': 9, 'colsample_bytree': 0.8499027725496043, 'reg_alpha': 0.0022085340760961856, 'reg_lambda': 0.5460627024738893}}\n", "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 20, 'num_leaves': 11, 'min_child_samples': 52, 'learning_rate': 1.0, 'subsample': 1.0, 'log_max_bin': 9, 'colsample_bytree': 0.7967145599266738, 'reg_alpha': 0.05680749758595097, 'reg_lambda': 2.756357095973371}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 20, 'num_leaves': 11, 'min_child_samples': 52, 'learning_rate': 1.0, 'subsample': 1.0, 'log_max_bin': 9, 'colsample_bytree': 0.7967145599266738, 'reg_alpha': 0.05680749758595097, 'reg_lambda': 2.756357095973371}}\n", "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 37, 'num_leaves': 15, 'min_child_samples': 93, 'learning_rate': 0.6413547778096401, 'subsample': 1.0, 'log_max_bin': 9, 'colsample_bytree': 0.6980216487058154, 'reg_alpha': 0.020158745350617662, 'reg_lambda': 0.954042157679914}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 37, 'num_leaves': 15, 'min_child_samples': 93, 'learning_rate': 0.6413547778096401, 'subsample': 1.0, 'log_max_bin': 9, 'colsample_bytree': 0.6980216487058154, 'reg_alpha': 0.020158745350617662, 'reg_lambda': 0.954042157679914}}\n", - "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 75, 'num_leaves': 32, 'min_child_samples': 83, 'learning_rate': 0.19997653978110663, 'subsample': 0.8895588746662894, 'log_max_bin': 7, 'colsample_bytree': 0.663557757490723, 'reg_alpha': 0.03147131714846291, 'reg_lambda': 0.38644069375879475}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 75, 'num_leaves': 32, 'min_child_samples': 83, 'learning_rate': 0.19997653978110663, 'subsample': 0.8895588746662894, 'log_max_bin': 7, 'colsample_bytree': 0.663557757490723, 'reg_alpha': 0.03147131714846291, 'reg_lambda': 0.38644069375879475}}\n", - "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 81, 'num_leaves': 66, 'min_child_samples': 93, 'learning_rate': 0.07560024606664352, 'subsample': 0.8756054034199897, 'log_max_bin': 7, 'colsample_bytree': 0.7142272555842307, 'reg_alpha': 0.00219854653612346, 'reg_lambda': 2.9360090402842274}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 81, 'num_leaves': 66, 'min_child_samples': 93, 'learning_rate': 0.07560024606664352, 'subsample': 0.8756054034199897, 'log_max_bin': 7, 'colsample_bytree': 0.7142272555842307, 'reg_alpha': 0.00219854653612346, 'reg_lambda': 2.9360090402842274}}\n", - "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 283, 'num_leaves': 171, 'min_child_samples': 128, 'learning_rate': 0.056885026855831654, 'subsample': 0.9152991332236934, 'log_max_bin': 8, 'colsample_bytree': 0.7103230835995594, 'reg_alpha': 0.012993197803320033, 'reg_lambda': 7.0529810054461715}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 283, 'num_leaves': 171, 'min_child_samples': 128, 'learning_rate': 0.056885026855831654, 'subsample': 0.9152991332236934, 'log_max_bin': 8, 'colsample_bytree': 0.7103230835995594, 'reg_alpha': 0.012993197803320033, 'reg_lambda': 7.0529810054461715}}\n", - "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 363, 'num_leaves': 269, 'min_child_samples': 128, 'learning_rate': 0.13082160708847235, 'subsample': 0.820105567300051, 'log_max_bin': 10, 'colsample_bytree': 0.6819303877749074, 'reg_alpha': 0.03805198795768637, 'reg_lambda': 18.14103139151093}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 363, 'num_leaves': 269, 'min_child_samples': 128, 'learning_rate': 0.13082160708847235, 'subsample': 0.820105567300051, 'log_max_bin': 10, 'colsample_bytree': 0.6819303877749074, 'reg_alpha': 0.03805198795768637, 'reg_lambda': 18.14103139151093}}\n" + "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 75, 'num_leaves': 32, 'min_child_samples': 83, 'learning_rate': 0.19997653978110663, 'subsample': 0.8895588746662894, 'log_max_bin': 7, 'colsample_bytree': 0.663557757490723, 'reg_alpha': 0.03147131714846291, 'reg_lambda': 0.3864406937587945}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 75, 'num_leaves': 32, 'min_child_samples': 83, 'learning_rate': 0.19997653978110663, 'subsample': 0.8895588746662894, 'log_max_bin': 7, 'colsample_bytree': 0.663557757490723, 'reg_alpha': 0.03147131714846291, 'reg_lambda': 0.3864406937587945}}\n", + "{'Current Learner': 'lgbm', 'Current Sample': 15480, 'Current Hyper-parameters': {'n_estimators': 81, 'num_leaves': 66, 'min_child_samples': 93, 'learning_rate': 0.07560024606664352, 'subsample': 0.8756054034199897, 'log_max_bin': 7, 'colsample_bytree': 0.7142272555842307, 'reg_alpha': 0.00219854653612346, 'reg_lambda': 2.9360090402842274}, 'Best Learner': 'lgbm', 'Best Hyper-parameters': {'n_estimators': 81, 'num_leaves': 66, 'min_child_samples': 93, 'learning_rate': 0.07560024606664352, 'subsample': 0.8756054034199897, 'log_max_bin': 7, 'colsample_bytree': 0.7142272555842307, 'reg_alpha': 0.00219854653612346, 'reg_lambda': 2.9360090402842274}}\n" ] } ], @@ -440,7 +449,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 13, "metadata": { "slideshow": { "slide_type": "slide" @@ -449,7 +458,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -461,7 +470,6 @@ } ], "source": [ - "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "plt.title('Learning Curve')\n", @@ -483,7 +491,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 14, "metadata": { "tags": [] }, @@ -492,7 +500,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "flaml r2 = 0.8467624164909245\n" + "flaml r2 = 0.8475173393496316\n" ] } ], @@ -509,7 +517,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -519,7 +527,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -528,7 +536,7 @@ "LGBMRegressor()" ] }, - "execution_count": 14, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -539,7 +547,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 17, "metadata": { "tags": [] }, @@ -567,7 +575,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -576,7 +584,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -594,7 +602,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 20, "metadata": { "tags": [ "outputPrepend" @@ -605,89 +613,89 @@ "name": "stderr", "output_type": "stream", "text": [ - "\u001b[32m[I 2021-07-24 13:51:37,223]\u001b[0m A new study created in memory with name: no-name-a9ad03a9-1a95-4cb8-903f-402d3a214640\u001b[0m\n", - "feature_fraction, val_score: 2251528152.166571: 14%|#4 | 1/7 [00:01<00:08, 1.42s/it]\u001b[32m[I 2021-07-24 13:51:38,667]\u001b[0m Trial 0 finished with value: 2251528152.166571 and parameters: {'feature_fraction': 0.5}. Best is trial 0 with value: 2251528152.166571.\u001b[0m\n", - "feature_fraction, val_score: 2251528152.166571: 29%|##8 | 2/7 [00:03<00:07, 1.47s/it]\u001b[32m[I 2021-07-24 13:51:40,257]\u001b[0m Trial 1 finished with value: 2253578981.8374605 and parameters: {'feature_fraction': 0.6}. Best is trial 0 with value: 2251528152.166571.\u001b[0m\n", - "feature_fraction, val_score: 2251528152.166571: 43%|####2 | 3/7 [00:04<00:06, 1.54s/it]\u001b[32m[I 2021-07-24 13:51:41,944]\u001b[0m Trial 2 finished with value: 2293115294.9762316 and parameters: {'feature_fraction': 1.0}. Best is trial 0 with value: 2251528152.166571.\u001b[0m\n", - "feature_fraction, val_score: 2221143011.565778: 57%|#####7 | 4/7 [00:06<00:04, 1.52s/it]\u001b[32m[I 2021-07-24 13:51:43,420]\u001b[0m Trial 3 finished with value: 2221143011.5657783 and parameters: {'feature_fraction': 0.7}. Best is trial 3 with value: 2221143011.5657783.\u001b[0m\n", - "feature_fraction, val_score: 2221143011.565778: 71%|#######1 | 5/7 [00:07<00:03, 1.51s/it]\u001b[32m[I 2021-07-24 13:51:44,892]\u001b[0m Trial 4 finished with value: 2221143011.5657783 and parameters: {'feature_fraction': 0.8}. Best is trial 3 with value: 2221143011.5657783.\u001b[0m\n", - "feature_fraction, val_score: 2221143011.565778: 86%|########5 | 6/7 [00:09<00:01, 1.51s/it]\u001b[32m[I 2021-07-24 13:51:46,405]\u001b[0m Trial 5 finished with value: 2491490333.842695 and parameters: {'feature_fraction': 0.4}. Best is trial 3 with value: 2221143011.5657783.\u001b[0m\n", - "feature_fraction, val_score: 2193757572.841483: 100%|##########| 7/7 [00:10<00:00, 1.52s/it]\u001b[32m[I 2021-07-24 13:51:47,947]\u001b[0m Trial 6 finished with value: 2193757572.841483 and parameters: {'feature_fraction': 0.8999999999999999}. Best is trial 6 with value: 2193757572.841483.\u001b[0m\n", - "feature_fraction, val_score: 2193757572.841483: 100%|##########| 7/7 [00:10<00:00, 1.53s/it]\n", - "num_leaves, val_score: 2193757572.841483: 5%|5 | 1/20 [00:06<01:55, 6.10s/it]\u001b[32m[I 2021-07-24 13:51:54,053]\u001b[0m Trial 7 finished with value: 2248042974.885056 and parameters: {'num_leaves': 163}. Best is trial 7 with value: 2248042974.885056.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 10%|# | 2/20 [00:09<01:36, 5.36s/it]\u001b[32m[I 2021-07-24 13:51:57,685]\u001b[0m Trial 8 finished with value: 2202201580.7993436 and parameters: {'num_leaves': 88}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 15%|#5 | 3/20 [00:18<01:46, 6.24s/it]\u001b[32m[I 2021-07-24 13:52:05,988]\u001b[0m Trial 9 finished with value: 2245590498.6014037 and parameters: {'num_leaves': 191}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 20%|## | 4/20 [00:25<01:44, 6.53s/it]\u001b[32m[I 2021-07-24 13:52:13,177]\u001b[0m Trial 10 finished with value: 2313837552.1304107 and parameters: {'num_leaves': 179}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 25%|##5 | 5/20 [00:27<01:19, 5.28s/it]\u001b[32m[I 2021-07-24 13:52:15,543]\u001b[0m Trial 11 finished with value: 2292271962.1367116 and parameters: {'num_leaves': 52}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 30%|### | 6/20 [00:32<01:12, 5.16s/it]\u001b[32m[I 2021-07-24 13:52:20,433]\u001b[0m Trial 12 finished with value: 2262598949.621539 and parameters: {'num_leaves': 143}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 35%|###5 | 7/20 [00:34<00:55, 4.25s/it]\u001b[32m[I 2021-07-24 13:52:22,553]\u001b[0m Trial 13 finished with value: 2290214250.6976314 and parameters: {'num_leaves': 50}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 40%|#### | 8/20 [00:40<00:56, 4.70s/it]\u001b[32m[I 2021-07-24 13:52:28,292]\u001b[0m Trial 14 finished with value: 2274572970.4214416 and parameters: {'num_leaves': 165}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 45%|####5 | 9/20 [00:49<01:06, 6.05s/it]\u001b[32m[I 2021-07-24 13:52:37,485]\u001b[0m Trial 15 finished with value: 2293618526.656807 and parameters: {'num_leaves': 244}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 50%|##### | 10/20 [00:55<01:00, 6.09s/it]\u001b[32m[I 2021-07-24 13:52:43,668]\u001b[0m Trial 16 finished with value: 2248672042.5925345 and parameters: {'num_leaves': 164}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 55%|#####5 | 11/20 [00:59<00:47, 5.33s/it]\u001b[32m[I 2021-07-24 13:52:47,239]\u001b[0m Trial 17 finished with value: 2264385179.765125 and parameters: {'num_leaves': 91}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 60%|###### | 12/20 [01:08<00:51, 6.48s/it]\u001b[32m[I 2021-07-24 13:52:56,413]\u001b[0m Trial 18 finished with value: 2252406272.4344435 and parameters: {'num_leaves': 251}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 65%|######5 | 13/20 [01:12<00:39, 5.71s/it]\u001b[32m[I 2021-07-24 13:53:00,320]\u001b[0m Trial 19 finished with value: 2214542360.152998 and parameters: {'num_leaves': 101}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 70%|####### | 14/20 [01:12<00:25, 4.19s/it]\u001b[32m[I 2021-07-24 13:53:00,950]\u001b[0m Trial 20 finished with value: 2748428041.4812107 and parameters: {'num_leaves': 3}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 75%|#######5 | 15/20 [01:16<00:20, 4.11s/it]\u001b[32m[I 2021-07-24 13:53:04,880]\u001b[0m Trial 21 finished with value: 2228598419.330431 and parameters: {'num_leaves': 100}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 80%|######## | 16/20 [01:20<00:15, 3.97s/it]\u001b[32m[I 2021-07-24 13:53:08,539]\u001b[0m Trial 22 finished with value: 2251484592.265115 and parameters: {'num_leaves': 95}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 85%|########5 | 17/20 [01:22<00:10, 3.47s/it]\u001b[32m[I 2021-07-24 13:53:10,837]\u001b[0m Trial 23 finished with value: 2247121386.2896996 and parameters: {'num_leaves': 49}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 90%|######### | 18/20 [01:23<00:05, 2.71s/it]\u001b[32m[I 2021-07-24 13:53:11,772]\u001b[0m Trial 24 finished with value: 2232858800.451656 and parameters: {'num_leaves': 10}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 95%|#########5| 19/20 [01:27<00:03, 3.14s/it]\u001b[32m[I 2021-07-24 13:53:15,912]\u001b[0m Trial 25 finished with value: 2236616896.4291906 and parameters: {'num_leaves': 111}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 100%|##########| 20/20 [01:32<00:00, 3.62s/it]\u001b[32m[I 2021-07-24 13:53:20,649]\u001b[0m Trial 26 finished with value: 2272025220.904855 and parameters: {'num_leaves': 128}. Best is trial 8 with value: 2202201580.7993436.\u001b[0m\n", - "num_leaves, val_score: 2193757572.841483: 100%|##########| 20/20 [01:32<00:00, 4.64s/it]\n", - "bagging, val_score: 2193757572.841483: 10%|# | 1/10 [00:02<00:19, 2.16s/it]\u001b[32m[I 2021-07-24 13:53:22,811]\u001b[0m Trial 27 finished with value: 2215507853.2691116 and parameters: {'bagging_fraction': 0.833765937354807, 'bagging_freq': 5}. Best is trial 27 with value: 2215507853.2691116.\u001b[0m\n", - "bagging, val_score: 2193757572.841483: 20%|## | 2/10 [00:04<00:17, 2.19s/it]\u001b[32m[I 2021-07-24 13:53:25,089]\u001b[0m Trial 28 finished with value: 2289649905.7234273 and parameters: {'bagging_fraction': 0.7166436113253525, 'bagging_freq': 3}. Best is trial 27 with value: 2215507853.2691116.\u001b[0m\n", - "bagging, val_score: 2193757572.841483: 30%|### | 3/10 [00:06<00:15, 2.28s/it]\u001b[32m[I 2021-07-24 13:53:27,565]\u001b[0m Trial 29 finished with value: 2435071807.8717895 and parameters: {'bagging_fraction': 0.4311907585027494, 'bagging_freq': 3}. Best is trial 27 with value: 2215507853.2691116.\u001b[0m\n", - "bagging, val_score: 2193757572.841483: 40%|#### | 4/10 [00:09<00:13, 2.31s/it]\u001b[32m[I 2021-07-24 13:53:29,967]\u001b[0m Trial 30 finished with value: 2384649358.377396 and parameters: {'bagging_fraction': 0.48304880587976823, 'bagging_freq': 5}. Best is trial 27 with value: 2215507853.2691116.\u001b[0m\n", - "bagging, val_score: 2193757572.841483: 50%|##### | 5/10 [00:11<00:11, 2.27s/it]\u001b[32m[I 2021-07-24 13:53:32,141]\u001b[0m Trial 31 finished with value: 2210265907.248649 and parameters: {'bagging_fraction': 0.7877791059553392, 'bagging_freq': 6}. Best is trial 31 with value: 2210265907.248649.\u001b[0m\n", - "bagging, val_score: 2193757572.841483: 60%|###### | 6/10 [00:13<00:09, 2.28s/it]\u001b[32m[I 2021-07-24 13:53:34,434]\u001b[0m Trial 32 finished with value: 2272518522.3229847 and parameters: {'bagging_fraction': 0.7142758200867739, 'bagging_freq': 4}. Best is trial 31 with value: 2210265907.248649.\u001b[0m\n", - "bagging, val_score: 2193757572.841483: 70%|####### | 7/10 [00:15<00:06, 2.26s/it]\u001b[32m[I 2021-07-24 13:53:36,650]\u001b[0m Trial 33 finished with value: 2265778780.249233 and parameters: {'bagging_fraction': 0.6387893291706077, 'bagging_freq': 1}. Best is trial 31 with value: 2210265907.248649.\u001b[0m\n", - "bagging, val_score: 2193757572.841483: 80%|######## | 8/10 [00:18<00:04, 2.26s/it]\u001b[32m[I 2021-07-24 13:53:38,903]\u001b[0m Trial 34 finished with value: 2233770570.763797 and parameters: {'bagging_fraction': 0.7784748097499257, 'bagging_freq': 3}. Best is trial 31 with value: 2210265907.248649.\u001b[0m\n", - "bagging, val_score: 2193757572.841483: 90%|######### | 9/10 [00:20<00:02, 2.31s/it]\u001b[32m[I 2021-07-24 13:53:41,337]\u001b[0m Trial 35 finished with value: 2385812002.7077584 and parameters: {'bagging_fraction': 0.43475426988023463, 'bagging_freq': 4}. Best is trial 31 with value: 2210265907.248649.\u001b[0m\n", - "bagging, val_score: 2193757572.841483: 100%|##########| 10/10 [00:23<00:00, 2.34s/it]\u001b[32m[I 2021-07-24 13:53:43,759]\u001b[0m Trial 36 finished with value: 2279764756.511298 and parameters: {'bagging_fraction': 0.509552686945636, 'bagging_freq': 5}. Best is trial 31 with value: 2210265907.248649.\u001b[0m\n", - "bagging, val_score: 2193757572.841483: 100%|##########| 10/10 [00:23<00:00, 2.31s/it]\n", - "feature_fraction_stage2, val_score: 2193757572.841483: 17%|#6 | 1/6 [00:01<00:08, 1.68s/it]\u001b[32m[I 2021-07-24 13:53:45,444]\u001b[0m Trial 37 finished with value: 2193757572.841483 and parameters: {'feature_fraction': 0.9159999999999999}. Best is trial 37 with value: 2193757572.841483.\u001b[0m\n", - "feature_fraction_stage2, val_score: 2193757572.841483: 33%|###3 | 2/6 [00:03<00:06, 1.68s/it]\u001b[32m[I 2021-07-24 13:53:47,130]\u001b[0m Trial 38 finished with value: 2193757572.841483 and parameters: {'feature_fraction': 0.852}. Best is trial 37 with value: 2193757572.841483.\u001b[0m\n", - "feature_fraction_stage2, val_score: 2193757572.841483: 50%|##### | 3/6 [00:05<00:05, 1.68s/it]\u001b[32m[I 2021-07-24 13:53:48,802]\u001b[0m Trial 39 finished with value: 2193757572.841483 and parameters: {'feature_fraction': 0.82}. Best is trial 37 with value: 2193757572.841483.\u001b[0m\n", - "feature_fraction_stage2, val_score: 2193757572.841483: 67%|######6 | 4/6 [00:06<00:03, 1.70s/it]\u001b[32m[I 2021-07-24 13:53:50,554]\u001b[0m Trial 40 finished with value: 2293115294.9762316 and parameters: {'feature_fraction': 0.9799999999999999}. Best is trial 37 with value: 2193757572.841483.\u001b[0m\n", - "feature_fraction_stage2, val_score: 2193757572.841483: 83%|########3 | 5/6 [00:08<00:01, 1.68s/it]\u001b[32m[I 2021-07-24 13:53:52,199]\u001b[0m Trial 41 finished with value: 2193757572.841483 and parameters: {'feature_fraction': 0.8839999999999999}. Best is trial 37 with value: 2193757572.841483.\u001b[0m\n", - "feature_fraction_stage2, val_score: 2193757572.841483: 100%|##########| 6/6 [00:10<00:00, 1.72s/it]\u001b[32m[I 2021-07-24 13:53:54,016]\u001b[0m Trial 42 finished with value: 2293115294.9762316 and parameters: {'feature_fraction': 0.948}. Best is trial 37 with value: 2193757572.841483.\u001b[0m\n", - "feature_fraction_stage2, val_score: 2193757572.841483: 100%|##########| 6/6 [00:10<00:00, 1.71s/it]\n", - "regularization_factors, val_score: 2193757505.927801: 5%|5 | 1/20 [00:01<00:33, 1.78s/it]\u001b[32m[I 2021-07-24 13:53:55,803]\u001b[0m Trial 43 finished with value: 2193757505.927801 and parameters: {'lambda_l1': 0.035530313749205525, 'lambda_l2': 1.7142996437624364e-05}. Best is trial 43 with value: 2193757505.927801.\u001b[0m\n", - "regularization_factors, val_score: 2193757505.927801: 10%|# | 2/20 [00:03<00:31, 1.77s/it]\u001b[32m[I 2021-07-24 13:53:57,544]\u001b[0m Trial 44 finished with value: 2223375534.1890984 and parameters: {'lambda_l1': 1.7561787606994837e-06, 'lambda_l2': 0.028131894820153703}. Best is trial 43 with value: 2193757505.927801.\u001b[0m\n", - "regularization_factors, val_score: 2193757505.927801: 15%|#5 | 3/20 [00:05<00:30, 1.80s/it]\u001b[32m[I 2021-07-24 13:53:59,412]\u001b[0m Trial 45 finished with value: 2247496509.5917783 and parameters: {'lambda_l1': 2.7262641755324635e-07, 'lambda_l2': 0.07409628972810856}. Best is trial 43 with value: 2193757505.927801.\u001b[0m\n", - "regularization_factors, val_score: 2193757505.927801: 20%|## | 4/20 [00:07<00:31, 1.95s/it]\u001b[32m[I 2021-07-24 13:54:01,725]\u001b[0m Trial 46 finished with value: 2226827669.753629 and parameters: {'lambda_l1': 8.386241389210335, 'lambda_l2': 2.5276971608749994}. Best is trial 43 with value: 2193757505.927801.\u001b[0m\n", - "regularization_factors, val_score: 2193757505.927801: 25%|##5 | 5/20 [00:09<00:28, 1.89s/it]\u001b[32m[I 2021-07-24 13:54:03,481]\u001b[0m Trial 47 finished with value: 2216429817.580567 and parameters: {'lambda_l1': 1.1041957573939113e-05, 'lambda_l2': 0.017450153863046828}. Best is trial 43 with value: 2193757505.927801.\u001b[0m\n", - "regularization_factors, val_score: 2193757505.927801: 30%|### | 6/20 [00:11<00:26, 1.92s/it]\u001b[32m[I 2021-07-24 13:54:05,458]\u001b[0m Trial 48 finished with value: 2203413700.676657 and parameters: {'lambda_l1': 2.2785459443579694, 'lambda_l2': 0.00206545335591311}. Best is trial 43 with value: 2193757505.927801.\u001b[0m\n", - "regularization_factors, val_score: 2193757505.927801: 35%|###5 | 7/20 [00:13<00:25, 1.93s/it]\u001b[32m[I 2021-07-24 13:54:07,430]\u001b[0m Trial 49 finished with value: 2193757572.7271867 and parameters: {'lambda_l1': 0.00039136395694252244, 'lambda_l2': 3.427541754951745e-08}. Best is trial 43 with value: 2193757505.927801.\u001b[0m\n", - "regularization_factors, val_score: 2193757505.927801: 40%|#### | 8/20 [00:15<00:23, 1.95s/it]\u001b[32m[I 2021-07-24 13:54:09,422]\u001b[0m Trial 50 finished with value: 2240547395.6341996 and parameters: {'lambda_l1': 0.00018872808872200846, 'lambda_l2': 0.5702426219534228}. Best is trial 43 with value: 2193757505.927801.\u001b[0m\n", - "regularization_factors, val_score: 2193757473.925522: 45%|####5 | 9/20 [00:17<00:20, 1.88s/it]\u001b[32m[I 2021-07-24 13:54:11,149]\u001b[0m Trial 51 finished with value: 2193757473.9255223 and parameters: {'lambda_l1': 5.115495660230786e-06, 'lambda_l2': 2.891511576151028e-05}. Best is trial 51 with value: 2193757473.9255223.\u001b[0m\n", - "regularization_factors, val_score: 2193757473.925522: 50%|##### | 10/20 [00:18<00:18, 1.87s/it]\u001b[32m[I 2021-07-24 13:54:12,975]\u001b[0m Trial 52 finished with value: 2209441211.88343 and parameters: {'lambda_l1': 6.709340304448373e-08, 'lambda_l2': 0.0033851983067145165}. Best is trial 51 with value: 2193757473.9255223.\u001b[0m\n", - "regularization_factors, val_score: 2193757473.925522: 55%|#####5 | 11/20 [00:21<00:17, 1.94s/it]\u001b[32m[I 2021-07-24 13:54:15,091]\u001b[0m Trial 53 finished with value: 2193757554.8642426 and parameters: {'lambda_l1': 0.00398313349668578, 'lambda_l2': 4.918044983674336e-06}. Best is trial 51 with value: 2193757473.9255223.\u001b[0m\n", - "regularization_factors, val_score: 2193757473.925522: 60%|###### | 12/20 [00:22<00:15, 1.89s/it]\u001b[32m[I 2021-07-24 13:54:16,857]\u001b[0m Trial 54 finished with value: 2193757527.2890315 and parameters: {'lambda_l1': 0.03174575050092051, 'lambda_l2': 1.121877835012437e-05}. Best is trial 51 with value: 2193757473.9255223.\u001b[0m\n", - "regularization_factors, val_score: 2193757461.792665: 65%|######5 | 13/20 [00:24<00:13, 1.88s/it]\u001b[32m[I 2021-07-24 13:54:18,728]\u001b[0m Trial 55 finished with value: 2193757461.7926645 and parameters: {'lambda_l1': 0.19245364133000292, 'lambda_l2': 2.098195966946619e-05}. Best is trial 55 with value: 2193757461.7926645.\u001b[0m\n", - "regularization_factors, val_score: 2193757461.792665: 70%|####### | 14/20 [00:26<00:11, 1.87s/it]\u001b[32m[I 2021-07-24 13:54:20,550]\u001b[0m Trial 56 finished with value: 2193757572.4410305 and parameters: {'lambda_l1': 1.0621410162724814e-08, 'lambda_l2': 1.1658751463777809e-07}. Best is trial 55 with value: 2193757461.7926645.\u001b[0m\n", - "regularization_factors, val_score: 2193757022.409628: 75%|#######5 | 15/20 [00:28<00:09, 1.84s/it]\u001b[32m[I 2021-07-24 13:54:22,314]\u001b[0m Trial 57 finished with value: 2193757022.4096284 and parameters: {'lambda_l1': 0.4708623853744175, 'lambda_l2': 0.00013251231491224775}. Best is trial 57 with value: 2193757022.4096284.\u001b[0m\n", - "regularization_factors, val_score: 2193757022.409628: 80%|######## | 16/20 [00:30<00:07, 1.81s/it]\u001b[32m[I 2021-07-24 13:54:24,053]\u001b[0m Trial 58 finished with value: 2193757471.257112 and parameters: {'lambda_l1': 0.48939023058146797, 'lambda_l2': 5.55788736346222e-07}. Best is trial 57 with value: 2193757022.4096284.\u001b[0m\n", - "regularization_factors, val_score: 2193756705.682960: 85%|########5 | 17/20 [00:31<00:05, 1.81s/it]\u001b[32m[I 2021-07-24 13:54:25,872]\u001b[0m Trial 59 finished with value: 2193756705.6829596 and parameters: {'lambda_l1': 0.2944813276784501, 'lambda_l2': 0.00023554829225716752}. Best is trial 59 with value: 2193756705.6829596.\u001b[0m\n", - "regularization_factors, val_score: 2193756705.682960: 90%|######### | 18/20 [00:33<00:03, 1.80s/it]\u001b[32m[I 2021-07-24 13:54:27,663]\u001b[0m Trial 60 finished with value: 2213959934.0753803 and parameters: {'lambda_l1': 5.791380633444603, 'lambda_l2': 0.00017616756434467052}. Best is trial 59 with value: 2193756705.6829596.\u001b[0m\n", - "regularization_factors, val_score: 2193756300.347055: 95%|#########5| 19/20 [00:35<00:01, 1.81s/it]\u001b[32m[I 2021-07-24 13:54:29,475]\u001b[0m Trial 61 finished with value: 2193756300.347055 and parameters: {'lambda_l1': 0.0038798669293550647, 'lambda_l2': 0.000370708788404359}. Best is trial 61 with value: 2193756300.347055.\u001b[0m\n", - "regularization_factors, val_score: 2193754225.665947: 100%|##########| 20/20 [00:37<00:00, 1.81s/it]\u001b[32m[I 2021-07-24 13:54:31,283]\u001b[0m Trial 62 finished with value: 2193754225.665947 and parameters: {'lambda_l1': 0.001623299893398886, 'lambda_l2': 0.0009761417290668266}. Best is trial 62 with value: 2193754225.665947.\u001b[0m\n", - "regularization_factors, val_score: 2193754225.665947: 100%|##########| 20/20 [00:37<00:00, 1.86s/it]\n", - "min_data_in_leaf, val_score: 2193754225.665947: 20%|## | 1/5 [00:01<00:07, 1.90s/it]\u001b[32m[I 2021-07-24 13:54:33,186]\u001b[0m Trial 63 finished with value: 2225388728.9240403 and parameters: {'min_child_samples': 10}. Best is trial 63 with value: 2225388728.9240403.\u001b[0m\n", - "min_data_in_leaf, val_score: 2193754225.665947: 40%|#### | 2/5 [00:03<00:05, 1.88s/it]\u001b[32m[I 2021-07-24 13:54:35,035]\u001b[0m Trial 64 finished with value: 2219135238.044885 and parameters: {'min_child_samples': 5}. Best is trial 64 with value: 2219135238.044885.\u001b[0m\n", - "min_data_in_leaf, val_score: 2193754225.665947: 60%|###### | 3/5 [00:06<00:04, 2.04s/it]\u001b[32m[I 2021-07-24 13:54:37,428]\u001b[0m Trial 65 finished with value: 2275374497.207612 and parameters: {'min_child_samples': 100}. Best is trial 64 with value: 2219135238.044885.\u001b[0m\n", - "min_data_in_leaf, val_score: 2193754225.665947: 80%|######## | 4/5 [00:08<00:01, 1.99s/it]\u001b[32m[I 2021-07-24 13:54:39,318]\u001b[0m Trial 66 finished with value: 2229247396.3587947 and parameters: {'min_child_samples': 25}. Best is trial 64 with value: 2219135238.044885.\u001b[0m\n", - "min_data_in_leaf, val_score: 2193754225.665947: 100%|##########| 5/5 [00:10<00:00, 2.00s/it]\u001b[32m[I 2021-07-24 13:54:41,353]\u001b[0m Trial 67 finished with value: 2274227159.90541 and parameters: {'min_child_samples': 50}. Best is trial 64 with value: 2219135238.044885.\u001b[0m\n", - "min_data_in_leaf, val_score: 2193754225.665947: 100%|##########| 5/5 [00:10<00:00, 2.01s/it]" + "\u001b[32m[I 2021-08-12 21:28:57,590]\u001b[0m A new study created in memory with name: no-name-46b1ad95-0f7c-4964-b50d-b3513a8fd6b5\u001b[0m\n", + "feature_fraction, val_score: 1961388150.442426: 14%|#4 | 1/7 [00:02<00:12, 2.16s/it]\u001b[32m[I 2021-08-12 21:28:59,788]\u001b[0m Trial 0 finished with value: 1961388150.4424257 and parameters: {'feature_fraction': 1.0}. Best is trial 0 with value: 1961388150.4424257.\u001b[0m\n", + "feature_fraction, val_score: 1959693958.979496: 29%|##8 | 2/7 [00:04<00:11, 2.38s/it]\u001b[32m[I 2021-08-12 21:29:02,317]\u001b[0m Trial 1 finished with value: 1959693958.9794962 and parameters: {'feature_fraction': 0.7}. Best is trial 1 with value: 1959693958.9794962.\u001b[0m\n", + "feature_fraction, val_score: 1923826918.442115: 43%|####2 | 3/7 [00:08<00:12, 3.06s/it]\u001b[32m[I 2021-08-12 21:29:06,187]\u001b[0m Trial 2 finished with value: 1923826918.4421153 and parameters: {'feature_fraction': 0.8999999999999999}. Best is trial 2 with value: 1923826918.4421153.\u001b[0m\n", + "feature_fraction, val_score: 1923826918.442115: 57%|#####7 | 4/7 [00:11<00:09, 3.05s/it]\u001b[32m[I 2021-08-12 21:29:09,235]\u001b[0m Trial 3 finished with value: 1935542284.5841484 and parameters: {'feature_fraction': 0.6}. Best is trial 2 with value: 1923826918.4421153.\u001b[0m\n", + "feature_fraction, val_score: 1923826918.442115: 71%|#######1 | 5/7 [00:17<00:07, 3.97s/it]\u001b[32m[I 2021-08-12 21:29:14,817]\u001b[0m Trial 4 finished with value: 2237193094.198953 and parameters: {'feature_fraction': 0.4}. Best is trial 2 with value: 1923826918.4421153.\u001b[0m\n", + "feature_fraction, val_score: 1923826918.442115: 86%|########5 | 6/7 [00:22<00:04, 4.27s/it]\u001b[32m[I 2021-08-12 21:29:19,667]\u001b[0m Trial 5 finished with value: 1959693958.9794967 and parameters: {'feature_fraction': 0.8}. Best is trial 2 with value: 1923826918.4421153.\u001b[0m\n", + "feature_fraction, val_score: 1923826918.442115: 100%|##########| 7/7 [00:26<00:00, 4.38s/it]\u001b[32m[I 2021-08-12 21:29:24,287]\u001b[0m Trial 6 finished with value: 1988198059.9532917 and parameters: {'feature_fraction': 0.5}. Best is trial 2 with value: 1923826918.4421153.\u001b[0m\n", + "feature_fraction, val_score: 1923826918.442115: 100%|##########| 7/7 [00:26<00:00, 3.81s/it]\n", + "num_leaves, val_score: 1909760725.486306: 5%|5 | 1/20 [00:11<03:45, 11.86s/it]\u001b[32m[I 2021-08-12 21:29:36,173]\u001b[0m Trial 7 finished with value: 1909760725.486306 and parameters: {'num_leaves': 49}. Best is trial 7 with value: 1909760725.486306.\u001b[0m\n", + "num_leaves, val_score: 1893602110.446437: 10%|# | 2/20 [00:17<02:27, 8.17s/it]\u001b[32m[I 2021-08-12 21:29:41,758]\u001b[0m Trial 8 finished with value: 1893602110.4464366 and parameters: {'num_leaves': 25}. Best is trial 8 with value: 1893602110.4464366.\u001b[0m\n", + "num_leaves, val_score: 1893602110.446437: 15%|#5 | 3/20 [00:28<02:43, 9.64s/it]\u001b[32m[I 2021-08-12 21:29:53,150]\u001b[0m Trial 9 finished with value: 1912380397.1371074 and parameters: {'num_leaves': 153}. Best is trial 8 with value: 1893602110.4464366.\u001b[0m\n", + "num_leaves, val_score: 1893602110.446437: 20%|## | 4/20 [00:34<02:06, 7.88s/it]\u001b[32m[I 2021-08-12 21:29:58,336]\u001b[0m Trial 10 finished with value: 1967375619.2597315 and parameters: {'num_leaves': 15}. Best is trial 8 with value: 1893602110.4464366.\u001b[0m\n", + "num_leaves, val_score: 1893602110.446437: 25%|##5 | 5/20 [00:52<02:58, 11.87s/it]\u001b[32m[I 2021-08-12 21:30:17,285]\u001b[0m Trial 11 finished with value: 1927844271.0899227 and parameters: {'num_leaves': 191}. Best is trial 8 with value: 1893602110.4464366.\u001b[0m\n", + "num_leaves, val_score: 1893602110.446437: 30%|### | 6/20 [01:06<02:51, 12.27s/it]\u001b[32m[I 2021-08-12 21:30:30,325]\u001b[0m Trial 12 finished with value: 1899507608.1924043 and parameters: {'num_leaves': 129}. Best is trial 8 with value: 1893602110.4464366.\u001b[0m\n", + "num_leaves, val_score: 1893602110.446437: 35%|###5 | 7/20 [01:12<02:14, 10.35s/it]\u001b[32m[I 2021-08-12 21:30:36,715]\u001b[0m Trial 13 finished with value: 1914457236.300789 and parameters: {'num_leaves': 110}. Best is trial 8 with value: 1893602110.4464366.\u001b[0m\n", + "num_leaves, val_score: 1893602110.446437: 40%|#### | 8/20 [01:33<02:46, 13.89s/it]\u001b[32m[I 2021-08-12 21:30:58,207]\u001b[0m Trial 14 finished with value: 1900862950.0439188 and parameters: {'num_leaves': 201}. Best is trial 8 with value: 1893602110.4464366.\u001b[0m\n", + "num_leaves, val_score: 1893602110.446437: 45%|####5 | 9/20 [01:43<02:18, 12.61s/it]\u001b[32m[I 2021-08-12 21:31:08,003]\u001b[0m Trial 15 finished with value: 1924633212.447516 and parameters: {'num_leaves': 26}. Best is trial 8 with value: 1893602110.4464366.\u001b[0m\n", + "num_leaves, val_score: 1893602110.446437: 50%|##### | 10/20 [01:47<01:38, 9.83s/it]\u001b[32m[I 2021-08-12 21:31:11,597]\u001b[0m Trial 16 finished with value: 1923826918.4421153 and parameters: {'num_leaves': 31}. Best is trial 8 with value: 1893602110.4464366.\u001b[0m\n", + "num_leaves, val_score: 1893602110.446437: 55%|#####5 | 11/20 [01:54<01:21, 9.03s/it]\u001b[32m[I 2021-08-12 21:31:18,802]\u001b[0m Trial 17 finished with value: 1926492416.6653154 and parameters: {'num_leaves': 73}. Best is trial 8 with value: 1893602110.4464366.\u001b[0m\n", + "num_leaves, val_score: 1866168216.164035: 60%|###### | 12/20 [02:04<01:14, 9.35s/it]\u001b[32m[I 2021-08-12 21:31:28,884]\u001b[0m Trial 18 finished with value: 1866168216.164035 and parameters: {'num_leaves': 122}. Best is trial 18 with value: 1866168216.164035.\u001b[0m\n", + "num_leaves, val_score: 1866168216.164035: 65%|######5 | 13/20 [02:16<01:10, 10.14s/it]\u001b[32m[I 2021-08-12 21:31:40,859]\u001b[0m Trial 19 finished with value: 1916479244.3534958 and parameters: {'num_leaves': 82}. Best is trial 18 with value: 1866168216.164035.\u001b[0m\n", + "num_leaves, val_score: 1866168216.164035: 70%|####### | 14/20 [02:34<01:14, 12.40s/it]\u001b[32m[I 2021-08-12 21:31:58,472]\u001b[0m Trial 20 finished with value: 1915145777.7969475 and parameters: {'num_leaves': 238}. Best is trial 18 with value: 1866168216.164035.\u001b[0m\n", + "num_leaves, val_score: 1866168216.164035: 75%|#######5 | 15/20 [02:35<00:44, 8.92s/it]\u001b[32m[I 2021-08-12 21:31:59,320]\u001b[0m Trial 21 finished with value: 3301372834.445037 and parameters: {'num_leaves': 2}. Best is trial 18 with value: 1866168216.164035.\u001b[0m\n", + "num_leaves, val_score: 1866168216.164035: 80%|######## | 16/20 [02:43<00:35, 8.77s/it]\u001b[32m[I 2021-08-12 21:32:07,734]\u001b[0m Trial 22 finished with value: 1945937902.6664844 and parameters: {'num_leaves': 156}. Best is trial 18 with value: 1866168216.164035.\u001b[0m\n", + "num_leaves, val_score: 1866168216.164035: 85%|########5 | 17/20 [02:57<00:31, 10.39s/it]\u001b[32m[I 2021-08-12 21:32:21,885]\u001b[0m Trial 23 finished with value: 1897968424.186267 and parameters: {'num_leaves': 91}. Best is trial 18 with value: 1866168216.164035.\u001b[0m\n", + "num_leaves, val_score: 1866168216.164035: 90%|######### | 18/20 [03:01<00:17, 8.50s/it]\u001b[32m[I 2021-08-12 21:32:26,009]\u001b[0m Trial 24 finished with value: 1886768541.069841 and parameters: {'num_leaves': 53}. Best is trial 18 with value: 1866168216.164035.\u001b[0m\n", + "num_leaves, val_score: 1866168216.164035: 95%|#########5| 19/20 [03:05<00:07, 7.23s/it]\u001b[32m[I 2021-08-12 21:32:30,288]\u001b[0m Trial 25 finished with value: 1893552453.049502 and parameters: {'num_leaves': 54}. Best is trial 18 with value: 1866168216.164035.\u001b[0m\n", + "num_leaves, val_score: 1866168216.164035: 100%|##########| 20/20 [03:14<00:00, 7.66s/it]\u001b[32m[I 2021-08-12 21:32:38,928]\u001b[0m Trial 26 finished with value: 1930159275.287451 and parameters: {'num_leaves': 124}. Best is trial 18 with value: 1866168216.164035.\u001b[0m\n", + "num_leaves, val_score: 1866168216.164035: 100%|##########| 20/20 [03:14<00:00, 9.73s/it]\n", + "bagging, val_score: 1866168216.164035: 10%|# | 1/10 [00:12<01:51, 12.34s/it]\u001b[32m[I 2021-08-12 21:32:51,319]\u001b[0m Trial 27 finished with value: 2226447935.929949 and parameters: {'bagging_fraction': 0.4348942073647856, 'bagging_freq': 3}. Best is trial 27 with value: 2226447935.929949.\u001b[0m\n", + "bagging, val_score: 1866168216.164035: 20%|## | 2/10 [00:21<01:22, 10.26s/it]\u001b[32m[I 2021-08-12 21:33:00,132]\u001b[0m Trial 28 finished with value: 2047448708.567457 and parameters: {'bagging_fraction': 0.522491146991637, 'bagging_freq': 4}. Best is trial 28 with value: 2047448708.567457.\u001b[0m\n", + "bagging, val_score: 1866168216.164035: 30%|### | 3/10 [00:30<01:08, 9.74s/it]\u001b[32m[I 2021-08-12 21:33:09,241]\u001b[0m Trial 29 finished with value: 2208782213.328473 and parameters: {'bagging_fraction': 0.5407390333877419, 'bagging_freq': 7}. Best is trial 28 with value: 2047448708.567457.\u001b[0m\n", + "bagging, val_score: 1866168216.164035: 40%|#### | 4/10 [00:37<00:53, 8.84s/it]\u001b[32m[I 2021-08-12 21:33:16,696]\u001b[0m Trial 30 finished with value: 1981019323.367325 and parameters: {'bagging_fraction': 0.9034329988074628, 'bagging_freq': 6}. Best is trial 30 with value: 1981019323.367325.\u001b[0m\n", + "bagging, val_score: 1866168216.164035: 50%|##### | 5/10 [00:46<00:43, 8.65s/it]\u001b[32m[I 2021-08-12 21:33:25,005]\u001b[0m Trial 31 finished with value: 2049529460.907788 and parameters: {'bagging_fraction': 0.7171693778212943, 'bagging_freq': 5}. Best is trial 30 with value: 1981019323.367325.\u001b[0m\n", + "bagging, val_score: 1866168216.164035: 60%|###### | 6/10 [00:53<00:33, 8.31s/it]\u001b[32m[I 2021-08-12 21:33:32,668]\u001b[0m Trial 32 finished with value: 2264022325.9930034 and parameters: {'bagging_fraction': 0.43045359107371695, 'bagging_freq': 3}. Best is trial 30 with value: 1981019323.367325.\u001b[0m\n", + "bagging, val_score: 1866168216.164035: 70%|####### | 7/10 [01:01<00:24, 8.06s/it]\u001b[32m[I 2021-08-12 21:33:40,205]\u001b[0m Trial 33 finished with value: 2187533763.495785 and parameters: {'bagging_fraction': 0.5150727650965822, 'bagging_freq': 7}. Best is trial 30 with value: 1981019323.367325.\u001b[0m\n", + "bagging, val_score: 1866168216.164035: 80%|######## | 8/10 [01:10<00:16, 8.29s/it]\u001b[32m[I 2021-08-12 21:33:48,992]\u001b[0m Trial 34 finished with value: 2195055434.15977 and parameters: {'bagging_fraction': 0.49821116144311656, 'bagging_freq': 7}. Best is trial 30 with value: 1981019323.367325.\u001b[0m\n", + "bagging, val_score: 1866168216.164035: 90%|######### | 9/10 [01:18<00:08, 8.20s/it]\u001b[32m[I 2021-08-12 21:33:56,992]\u001b[0m Trial 35 finished with value: 2120746509.002798 and parameters: {'bagging_fraction': 0.4779649667796321, 'bagging_freq': 3}. Best is trial 30 with value: 1981019323.367325.\u001b[0m\n", + "bagging, val_score: 1866168216.164035: 100%|##########| 10/10 [01:24<00:00, 7.77s/it]\u001b[32m[I 2021-08-12 21:34:03,812]\u001b[0m Trial 36 finished with value: 1948370918.3509336 and parameters: {'bagging_fraction': 0.9410977830175267, 'bagging_freq': 1}. Best is trial 36 with value: 1948370918.3509336.\u001b[0m\n", + "bagging, val_score: 1866168216.164035: 100%|##########| 10/10 [01:24<00:00, 8.48s/it]\n", + "feature_fraction_stage2, val_score: 1866168216.164035: 17%|#6 | 1/6 [00:06<00:34, 6.82s/it]\u001b[32m[I 2021-08-12 21:34:10,653]\u001b[0m Trial 37 finished with value: 1909783233.1033392 and parameters: {'feature_fraction': 0.9799999999999999}. Best is trial 37 with value: 1909783233.1033392.\u001b[0m\n", + "feature_fraction_stage2, val_score: 1866168216.164035: 33%|###3 | 2/6 [00:13<00:26, 6.69s/it]\u001b[32m[I 2021-08-12 21:34:17,259]\u001b[0m Trial 38 finished with value: 1866168216.1640353 and parameters: {'feature_fraction': 0.9159999999999999}. Best is trial 38 with value: 1866168216.1640353.\u001b[0m\n", + "feature_fraction_stage2, val_score: 1866168216.164035: 50%|##### | 3/6 [00:21<00:21, 7.30s/it]\u001b[32m[I 2021-08-12 21:34:25,288]\u001b[0m Trial 39 finished with value: 1866168216.164035 and parameters: {'feature_fraction': 0.82}. Best is trial 39 with value: 1866168216.164035.\u001b[0m\n", + "feature_fraction_stage2, val_score: 1866168216.164035: 67%|######6 | 4/6 [00:27<00:13, 6.99s/it]\u001b[32m[I 2021-08-12 21:34:31,785]\u001b[0m Trial 40 finished with value: 1866168216.164035 and parameters: {'feature_fraction': 0.852}. Best is trial 39 with value: 1866168216.164035.\u001b[0m\n", + "feature_fraction_stage2, val_score: 1866168216.164035: 83%|########3 | 5/6 [00:36<00:07, 7.41s/it]\u001b[32m[I 2021-08-12 21:34:39,941]\u001b[0m Trial 41 finished with value: 1866168216.164035 and parameters: {'feature_fraction': 0.8839999999999999}. Best is trial 39 with value: 1866168216.164035.\u001b[0m\n", + "feature_fraction_stage2, val_score: 1866168216.164035: 100%|##########| 6/6 [00:44<00:00, 7.75s/it]\u001b[32m[I 2021-08-12 21:34:48,352]\u001b[0m Trial 42 finished with value: 1909783233.1033392 and parameters: {'feature_fraction': 0.948}. Best is trial 39 with value: 1866168216.164035.\u001b[0m\n", + "feature_fraction_stage2, val_score: 1866168216.164035: 100%|##########| 6/6 [00:44<00:00, 7.42s/it]\n", + "regularization_factors, val_score: 1866168216.164035: 5%|5 | 1/20 [00:07<02:29, 7.85s/it]\u001b[32m[I 2021-08-12 21:34:56,223]\u001b[0m Trial 43 finished with value: 1899009420.0243478 and parameters: {'lambda_l1': 0.0014127541304345857, 'lambda_l2': 0.22374000194862534}. Best is trial 43 with value: 1899009420.0243478.\u001b[0m\n", + "regularization_factors, val_score: 1866168216.164035: 10%|# | 2/20 [00:15<02:14, 7.47s/it]\u001b[32m[I 2021-08-12 21:35:03,428]\u001b[0m Trial 44 finished with value: 1867133014.62294 and parameters: {'lambda_l1': 0.03844784585753986, 'lambda_l2': 0.00018061829598451463}. Best is trial 44 with value: 1867133014.62294.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 15%|#5 | 3/20 [00:22<02:07, 7.51s/it]\u001b[32m[I 2021-08-12 21:35:10,983]\u001b[0m Trial 45 finished with value: 1862347751.563527 and parameters: {'lambda_l1': 0.17221202238015665, 'lambda_l2': 0.00025519456319286597}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 20%|## | 4/20 [00:29<01:56, 7.29s/it]\u001b[32m[I 2021-08-12 21:35:17,943]\u001b[0m Trial 46 finished with value: 1866168215.2466798 and parameters: {'lambda_l1': 1.1162378906196939e-07, 'lambda_l2': 2.3517586151003225e-07}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 25%|##5 | 5/20 [00:39<02:03, 8.23s/it]\u001b[32m[I 2021-08-12 21:35:27,834]\u001b[0m Trial 47 finished with value: 1866168215.2750273 and parameters: {'lambda_l1': 8.118613275023769e-06, 'lambda_l2': 2.2125899197414973e-07}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 30%|### | 6/20 [00:50<02:08, 9.19s/it]\u001b[32m[I 2021-08-12 21:35:38,881]\u001b[0m Trial 48 finished with value: 1866168214.4534495 and parameters: {'lambda_l1': 3.650657666456404e-06, 'lambda_l2': 5.551789380059054e-07}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 35%|###5 | 7/20 [00:57<01:51, 8.56s/it]\u001b[32m[I 2021-08-12 21:35:46,142]\u001b[0m Trial 49 finished with value: 1894359167.4235432 and parameters: {'lambda_l1': 0.6834643786787952, 'lambda_l2': 0.0005042843753004482}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 40%|#### | 8/20 [01:04<01:35, 7.95s/it]\u001b[32m[I 2021-08-12 21:35:52,804]\u001b[0m Trial 50 finished with value: 1866168212.9993303 and parameters: {'lambda_l1': 0.00016032873004682006, 'lambda_l2': 1.0453125221176078e-06}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 45%|####5 | 9/20 [01:11<01:22, 7.54s/it]\u001b[32m[I 2021-08-12 21:35:59,443]\u001b[0m Trial 51 finished with value: 1892611870.5699668 and parameters: {'lambda_l1': 0.051377714337184646, 'lambda_l2': 0.05419859107292369}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 50%|##### | 10/20 [01:17<01:13, 7.33s/it]\u001b[32m[I 2021-08-12 21:36:06,284]\u001b[0m Trial 52 finished with value: 1866168211.9443643 and parameters: {'lambda_l1': 1.1485671686518937e-06, 'lambda_l2': 1.4100757187184286e-06}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 55%|#####5 | 11/20 [01:25<01:06, 7.36s/it]\u001b[32m[I 2021-08-12 21:36:13,725]\u001b[0m Trial 53 finished with value: 1885586770.2273645 and parameters: {'lambda_l1': 4.580147889294802, 'lambda_l2': 0.0005018959196271982}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 60%|###### | 12/20 [01:31<00:56, 7.02s/it]\u001b[32m[I 2021-08-12 21:36:19,979]\u001b[0m Trial 54 finished with value: 1866168157.8088048 and parameters: {'lambda_l1': 1.434301476741782e-08, 'lambda_l2': 1.8012113848059015e-05}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 65%|######5 | 13/20 [01:38<00:48, 6.96s/it]\u001b[32m[I 2021-08-12 21:36:26,789]\u001b[0m Trial 55 finished with value: 1866168172.4661086 and parameters: {'lambda_l1': 2.8590447974532532e-08, 'lambda_l2': 1.3570074139942467e-05}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 70%|####### | 14/20 [01:44<00:40, 6.78s/it]\u001b[32m[I 2021-08-12 21:36:33,156]\u001b[0m Trial 56 finished with value: 1929762960.4500725 and parameters: {'lambda_l1': 9.874299239326142, 'lambda_l2': 0.011250132690468205}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 75%|#######5 | 15/20 [01:51<00:33, 6.68s/it]\u001b[32m[I 2021-08-12 21:36:39,605]\u001b[0m Trial 57 finished with value: 1866168145.853947 and parameters: {'lambda_l1': 0.001457467132871678, 'lambda_l2': 2.1471698394126437e-05}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 80%|######## | 16/20 [01:57<00:26, 6.57s/it]\u001b[32m[I 2021-08-12 21:36:45,923]\u001b[0m Trial 58 finished with value: 1866168046.9808419 and parameters: {'lambda_l1': 0.0011582433705743624, 'lambda_l2': 5.158343573053873e-05}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 85%|########5 | 17/20 [02:05<00:20, 6.85s/it]\u001b[32m[I 2021-08-12 21:36:53,433]\u001b[0m Trial 59 finished with value: 1869255015.1998665 and parameters: {'lambda_l1': 0.0437753701485812, 'lambda_l2': 7.728496590262199}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1862347751.563527: 90%|######### | 18/20 [02:11<00:13, 6.79s/it]\u001b[32m[I 2021-08-12 21:37:00,080]\u001b[0m Trial 60 finished with value: 1866168215.8948646 and parameters: {'lambda_l1': 0.0002464476399548371, 'lambda_l2': 1.305866123493045e-08}. Best is trial 45 with value: 1862347751.563527.\u001b[0m\n", + "regularization_factors, val_score: 1860040693.310331: 95%|#########5| 19/20 [02:18<00:06, 6.66s/it]\u001b[32m[I 2021-08-12 21:37:06,434]\u001b[0m Trial 61 finished with value: 1860040693.3103309 and parameters: {'lambda_l1': 0.7465543891293522, 'lambda_l2': 0.00286148358308546}. Best is trial 61 with value: 1860040693.3103309.\u001b[0m\n", + "regularization_factors, val_score: 1860040693.310331: 100%|##########| 20/20 [02:24<00:00, 6.64s/it]\u001b[32m[I 2021-08-12 21:37:13,031]\u001b[0m Trial 62 finished with value: 1919199084.8296423 and parameters: {'lambda_l1': 0.4541623636884782, 'lambda_l2': 0.005250499353309728}. Best is trial 61 with value: 1860040693.3103309.\u001b[0m\n", + "regularization_factors, val_score: 1860040693.310331: 100%|##########| 20/20 [02:24<00:00, 7.23s/it]\n", + "min_data_in_leaf, val_score: 1860040693.310331: 20%|## | 1/5 [00:07<00:28, 7.13s/it]\u001b[32m[I 2021-08-12 21:37:20,192]\u001b[0m Trial 63 finished with value: 1922926466.623347 and parameters: {'min_child_samples': 25}. Best is trial 63 with value: 1922926466.623347.\u001b[0m\n", + "min_data_in_leaf, val_score: 1860040693.310331: 40%|#### | 2/5 [00:14<00:21, 7.16s/it]\u001b[32m[I 2021-08-12 21:37:27,374]\u001b[0m Trial 64 finished with value: 1989706958.6761992 and parameters: {'min_child_samples': 100}. Best is trial 63 with value: 1922926466.623347.\u001b[0m\n", + "min_data_in_leaf, val_score: 1807874616.779958: 60%|###### | 3/5 [00:21<00:14, 7.12s/it]\u001b[32m[I 2021-08-12 21:37:34,441]\u001b[0m Trial 65 finished with value: 1807874616.7799582 and parameters: {'min_child_samples': 5}. Best is trial 65 with value: 1807874616.7799582.\u001b[0m\n", + "min_data_in_leaf, val_score: 1807874616.779958: 80%|######## | 4/5 [00:29<00:07, 7.41s/it]\u001b[32m[I 2021-08-12 21:37:42,305]\u001b[0m Trial 66 finished with value: 1982448779.0409832 and parameters: {'min_child_samples': 50}. Best is trial 65 with value: 1807874616.7799582.\u001b[0m\n", + "min_data_in_leaf, val_score: 1807874616.779958: 100%|##########| 5/5 [00:36<00:00, 7.31s/it]\u001b[32m[I 2021-08-12 21:37:49,432]\u001b[0m Trial 67 finished with value: 1903338404.5809317 and parameters: {'min_child_samples': 10}. Best is trial 65 with value: 1807874616.7799582.\u001b[0m\n", + "min_data_in_leaf, val_score: 1807874616.779958: 100%|##########| 5/5 [00:36<00:00, 7.28s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 2min 55s, sys: 8.33 s, total: 3min 3s\n", - "Wall time: 3min 4s\n" + "CPU times: user 1h 2min 37s, sys: 31.5 s, total: 1h 3min 9s\n", + "Wall time: 8min 51s\n" ] }, { @@ -710,7 +718,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 21, "metadata": { "tags": [] }, @@ -719,7 +727,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Optuna LightGBM Tuner r2 = 0.8454106958774709\n" + "Optuna LightGBM Tuner r2 = 0.8449953275302208\n" ] } ], @@ -746,7 +754,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -794,7 +802,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 23, "metadata": { "tags": [] }, @@ -803,88 +811,90 @@ "name": "stderr", "output_type": "stream", "text": [ - "[flaml.automl: 07-24 13:54:42] {912} INFO - Evaluation method: cv\n", - "[flaml.automl: 07-24 13:54:42] {616} INFO - Using RepeatedKFold\n", - "[flaml.automl: 07-24 13:54:42] {933} INFO - Minimizing error metric: 1-r2\n", - "[flaml.automl: 07-24 13:54:42] {952} INFO - List of ML learners in AutoML Run: ['my_lgbm']\n", - "[flaml.automl: 07-24 13:54:42] {1018} INFO - iteration 0, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:42] {1173} INFO - at 0.3s,\tbest my_lgbm's error=2.9888,\tbest my_lgbm's error=2.9888\n", - "[flaml.automl: 07-24 13:54:42] {1018} INFO - iteration 1, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:42] {1173} INFO - at 0.4s,\tbest my_lgbm's error=2.9888,\tbest my_lgbm's error=2.9888\n", - "[flaml.automl: 07-24 13:54:42] {1018} INFO - iteration 2, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:42] {1173} INFO - at 0.6s,\tbest my_lgbm's error=1.7536,\tbest my_lgbm's error=1.7536\n", - "[flaml.automl: 07-24 13:54:42] {1018} INFO - iteration 3, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:42] {1173} INFO - at 0.8s,\tbest my_lgbm's error=0.4529,\tbest my_lgbm's error=0.4529\n", - "[flaml.automl: 07-24 13:54:42] {1018} INFO - iteration 4, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:43] {1173} INFO - at 1.0s,\tbest my_lgbm's error=0.4529,\tbest my_lgbm's error=0.4529\n", - "[flaml.automl: 07-24 13:54:43] {1018} INFO - iteration 5, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:43] {1173} INFO - at 1.1s,\tbest my_lgbm's error=0.4529,\tbest my_lgbm's error=0.4529\n", - "[flaml.automl: 07-24 13:54:43] {1018} INFO - iteration 6, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:43] {1173} INFO - at 1.5s,\tbest my_lgbm's error=0.3159,\tbest my_lgbm's error=0.3159\n", - "[flaml.automl: 07-24 13:54:43] {1018} INFO - iteration 7, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:43] {1173} INFO - at 1.9s,\tbest my_lgbm's error=0.2717,\tbest my_lgbm's error=0.2717\n", - "[flaml.automl: 07-24 13:54:43] {1018} INFO - iteration 8, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:44] {1173} INFO - at 2.1s,\tbest my_lgbm's error=0.2717,\tbest my_lgbm's error=0.2717\n", - "[flaml.automl: 07-24 13:54:44] {1018} INFO - iteration 9, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:44] {1173} INFO - at 2.5s,\tbest my_lgbm's error=0.2073,\tbest my_lgbm's error=0.2073\n", - "[flaml.automl: 07-24 13:54:44] {1018} INFO - iteration 10, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:44] {1173} INFO - at 2.7s,\tbest my_lgbm's error=0.2073,\tbest my_lgbm's error=0.2073\n", - "[flaml.automl: 07-24 13:54:44] {1018} INFO - iteration 11, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:45] {1173} INFO - at 2.9s,\tbest my_lgbm's error=0.2073,\tbest my_lgbm's error=0.2073\n", - "[flaml.automl: 07-24 13:54:45] {1018} INFO - iteration 12, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:45] {1173} INFO - at 3.4s,\tbest my_lgbm's error=0.1883,\tbest my_lgbm's error=0.1883\n", - "[flaml.automl: 07-24 13:54:45] {1018} INFO - iteration 13, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:45] {1173} INFO - at 3.7s,\tbest my_lgbm's error=0.1883,\tbest my_lgbm's error=0.1883\n", - "[flaml.automl: 07-24 13:54:45] {1018} INFO - iteration 14, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:46] {1173} INFO - at 4.3s,\tbest my_lgbm's error=0.1883,\tbest my_lgbm's error=0.1883\n", - "[flaml.automl: 07-24 13:54:46] {1018} INFO - iteration 15, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:46] {1173} INFO - at 4.6s,\tbest my_lgbm's error=0.1883,\tbest my_lgbm's error=0.1883\n", - "[flaml.automl: 07-24 13:54:46] {1018} INFO - iteration 16, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:47] {1173} INFO - at 5.2s,\tbest my_lgbm's error=0.1878,\tbest my_lgbm's error=0.1878\n", - "[flaml.automl: 07-24 13:54:47] {1018} INFO - iteration 17, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:47] {1173} INFO - at 5.5s,\tbest my_lgbm's error=0.1878,\tbest my_lgbm's error=0.1878\n", - "[flaml.automl: 07-24 13:54:47] {1018} INFO - iteration 18, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:48] {1173} INFO - at 6.7s,\tbest my_lgbm's error=0.1878,\tbest my_lgbm's error=0.1878\n", - "[flaml.automl: 07-24 13:54:48] {1018} INFO - iteration 19, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:49] {1173} INFO - at 7.0s,\tbest my_lgbm's error=0.1878,\tbest my_lgbm's error=0.1878\n", - "[flaml.automl: 07-24 13:54:49] {1018} INFO - iteration 20, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:51] {1173} INFO - at 9.7s,\tbest my_lgbm's error=0.1878,\tbest my_lgbm's error=0.1878\n", - "[flaml.automl: 07-24 13:54:51] {1018} INFO - iteration 21, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:52] {1173} INFO - at 10.1s,\tbest my_lgbm's error=0.1878,\tbest my_lgbm's error=0.1878\n", - "[flaml.automl: 07-24 13:54:52] {1018} INFO - iteration 22, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:53] {1173} INFO - at 11.0s,\tbest my_lgbm's error=0.1751,\tbest my_lgbm's error=0.1751\n", - "[flaml.automl: 07-24 13:54:53] {1018} INFO - iteration 23, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:53] {1173} INFO - at 11.4s,\tbest my_lgbm's error=0.1751,\tbest my_lgbm's error=0.1751\n", - "[flaml.automl: 07-24 13:54:53] {1018} INFO - iteration 24, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:54] {1173} INFO - at 12.5s,\tbest my_lgbm's error=0.1751,\tbest my_lgbm's error=0.1751\n", - "[flaml.automl: 07-24 13:54:54] {1018} INFO - iteration 25, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:54:54] {1173} INFO - at 12.8s,\tbest my_lgbm's error=0.1751,\tbest my_lgbm's error=0.1751\n", - "[flaml.automl: 07-24 13:54:54] {1018} INFO - iteration 26, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:55:00] {1173} INFO - at 18.5s,\tbest my_lgbm's error=0.1660,\tbest my_lgbm's error=0.1660\n", - "[flaml.automl: 07-24 13:55:00] {1018} INFO - iteration 27, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:55:03] {1173} INFO - at 21.5s,\tbest my_lgbm's error=0.1660,\tbest my_lgbm's error=0.1660\n", - "[flaml.automl: 07-24 13:55:03] {1018} INFO - iteration 28, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:55:10] {1173} INFO - at 28.2s,\tbest my_lgbm's error=0.1660,\tbest my_lgbm's error=0.1660\n", - "[flaml.automl: 07-24 13:55:10] {1018} INFO - iteration 29, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:55:11] {1173} INFO - at 29.1s,\tbest my_lgbm's error=0.1660,\tbest my_lgbm's error=0.1660\n", - "[flaml.automl: 07-24 13:55:11] {1018} INFO - iteration 30, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:55:37] {1173} INFO - at 55.3s,\tbest my_lgbm's error=0.1634,\tbest my_lgbm's error=0.1634\n", - "[flaml.automl: 07-24 13:55:37] {1018} INFO - iteration 31, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:55:50] {1173} INFO - at 68.6s,\tbest my_lgbm's error=0.1624,\tbest my_lgbm's error=0.1624\n", - "[flaml.automl: 07-24 13:55:50] {1018} INFO - iteration 32, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:56:13] {1173} INFO - at 90.9s,\tbest my_lgbm's error=0.1624,\tbest my_lgbm's error=0.1624\n", - "[flaml.automl: 07-24 13:56:13] {1018} INFO - iteration 33, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:56:31] {1173} INFO - at 109.9s,\tbest my_lgbm's error=0.1624,\tbest my_lgbm's error=0.1624\n", - "[flaml.automl: 07-24 13:56:31] {1018} INFO - iteration 34, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:56:41] {1173} INFO - at 119.3s,\tbest my_lgbm's error=0.1624,\tbest my_lgbm's error=0.1624\n", - "[flaml.automl: 07-24 13:56:41] {1018} INFO - iteration 35, current learner my_lgbm\n", - "[flaml.automl: 07-24 13:57:18] {1173} INFO - at 156.1s,\tbest my_lgbm's error=0.1624,\tbest my_lgbm's error=0.1624\n", - "[flaml.automl: 07-24 13:57:18] {1219} INFO - selected model: LGBMRegressor(colsample_bytree=0.7929174747127123,\n", - " learning_rate=0.10575205975801834, max_bin=128,\n", - " min_child_samples=128, n_estimators=754, num_leaves=710,\n", - " objective=,\n", - " reg_alpha=0.0009765625, reg_lambda=10.762106709995438)\n", - "[flaml.automl: 07-24 13:57:18] {969} INFO - fit succeeded\n" + "[flaml.automl: 08-12 21:37:52] {1121} INFO - Evaluation method: cv\n", + "[flaml.automl: 08-12 21:37:52] {628} INFO - Using RepeatedKFold\n", + "[flaml.automl: 08-12 21:37:52] {1142} INFO - Minimizing error metric: 1-r2\n", + "[flaml.automl: 08-12 21:37:52] {1162} INFO - List of ML learners in AutoML Run: ['my_lgbm']\n", + "[flaml.automl: 08-12 21:37:52] {1252} INFO - iteration 0, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:53] {1405} INFO - at 0.4s,\tbest my_lgbm's error=2.9888,\tbest my_lgbm's error=2.9888\n", + "[flaml.automl: 08-12 21:37:53] {1252} INFO - iteration 1, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:53] {1405} INFO - at 0.6s,\tbest my_lgbm's error=2.9888,\tbest my_lgbm's error=2.9888\n", + "[flaml.automl: 08-12 21:37:53] {1252} INFO - iteration 2, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:53] {1405} INFO - at 0.9s,\tbest my_lgbm's error=1.7536,\tbest my_lgbm's error=1.7536\n", + "[flaml.automl: 08-12 21:37:53] {1252} INFO - iteration 3, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:53] {1405} INFO - at 1.1s,\tbest my_lgbm's error=0.4529,\tbest my_lgbm's error=0.4529\n", + "[flaml.automl: 08-12 21:37:53] {1252} INFO - iteration 4, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:54] {1405} INFO - at 1.3s,\tbest my_lgbm's error=0.4529,\tbest my_lgbm's error=0.4529\n", + "[flaml.automl: 08-12 21:37:54] {1252} INFO - iteration 5, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:54] {1405} INFO - at 1.5s,\tbest my_lgbm's error=0.4529,\tbest my_lgbm's error=0.4529\n", + "[flaml.automl: 08-12 21:37:54] {1252} INFO - iteration 6, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:54] {1405} INFO - at 1.8s,\tbest my_lgbm's error=0.3159,\tbest my_lgbm's error=0.3159\n", + "[flaml.automl: 08-12 21:37:54] {1252} INFO - iteration 7, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:54] {1405} INFO - at 2.1s,\tbest my_lgbm's error=0.2717,\tbest my_lgbm's error=0.2717\n", + "[flaml.automl: 08-12 21:37:54] {1252} INFO - iteration 8, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:55] {1405} INFO - at 2.4s,\tbest my_lgbm's error=0.2717,\tbest my_lgbm's error=0.2717\n", + "[flaml.automl: 08-12 21:37:55] {1252} INFO - iteration 9, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:55] {1405} INFO - at 2.8s,\tbest my_lgbm's error=0.2073,\tbest my_lgbm's error=0.2073\n", + "[flaml.automl: 08-12 21:37:55] {1252} INFO - iteration 10, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:55] {1405} INFO - at 3.0s,\tbest my_lgbm's error=0.2073,\tbest my_lgbm's error=0.2073\n", + "[flaml.automl: 08-12 21:37:55] {1252} INFO - iteration 11, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:55] {1405} INFO - at 3.2s,\tbest my_lgbm's error=0.2073,\tbest my_lgbm's error=0.2073\n", + "[flaml.automl: 08-12 21:37:56] {1252} INFO - iteration 12, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:56] {1405} INFO - at 3.8s,\tbest my_lgbm's error=0.1883,\tbest my_lgbm's error=0.1883\n", + "[flaml.automl: 08-12 21:37:56] {1252} INFO - iteration 13, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:56] {1405} INFO - at 4.2s,\tbest my_lgbm's error=0.1883,\tbest my_lgbm's error=0.1883\n", + "[flaml.automl: 08-12 21:37:56] {1252} INFO - iteration 14, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:58] {1405} INFO - at 5.3s,\tbest my_lgbm's error=0.1883,\tbest my_lgbm's error=0.1883\n", + "[flaml.automl: 08-12 21:37:58] {1252} INFO - iteration 15, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:58] {1405} INFO - at 5.9s,\tbest my_lgbm's error=0.1883,\tbest my_lgbm's error=0.1883\n", + "[flaml.automl: 08-12 21:37:58] {1252} INFO - iteration 16, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:37:59] {1405} INFO - at 6.9s,\tbest my_lgbm's error=0.1878,\tbest my_lgbm's error=0.1878\n", + "[flaml.automl: 08-12 21:37:59] {1252} INFO - iteration 17, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:00] {1405} INFO - at 7.3s,\tbest my_lgbm's error=0.1878,\tbest my_lgbm's error=0.1878\n", + "[flaml.automl: 08-12 21:38:00] {1252} INFO - iteration 18, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:01] {1405} INFO - at 9.1s,\tbest my_lgbm's error=0.1878,\tbest my_lgbm's error=0.1878\n", + "[flaml.automl: 08-12 21:38:01] {1252} INFO - iteration 19, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:02] {1405} INFO - at 9.4s,\tbest my_lgbm's error=0.1878,\tbest my_lgbm's error=0.1878\n", + "[flaml.automl: 08-12 21:38:02] {1252} INFO - iteration 20, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:06] {1405} INFO - at 13.7s,\tbest my_lgbm's error=0.1878,\tbest my_lgbm's error=0.1878\n", + "[flaml.automl: 08-12 21:38:06] {1252} INFO - iteration 21, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:07] {1405} INFO - at 14.3s,\tbest my_lgbm's error=0.1878,\tbest my_lgbm's error=0.1878\n", + "[flaml.automl: 08-12 21:38:07] {1252} INFO - iteration 22, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:08] {1405} INFO - at 15.5s,\tbest my_lgbm's error=0.1751,\tbest my_lgbm's error=0.1751\n", + "[flaml.automl: 08-12 21:38:08] {1252} INFO - iteration 23, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:08] {1405} INFO - at 16.2s,\tbest my_lgbm's error=0.1751,\tbest my_lgbm's error=0.1751\n", + "[flaml.automl: 08-12 21:38:08] {1252} INFO - iteration 24, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:10] {1405} INFO - at 17.8s,\tbest my_lgbm's error=0.1751,\tbest my_lgbm's error=0.1751\n", + "[flaml.automl: 08-12 21:38:10] {1252} INFO - iteration 25, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:10] {1405} INFO - at 18.1s,\tbest my_lgbm's error=0.1751,\tbest my_lgbm's error=0.1751\n", + "[flaml.automl: 08-12 21:38:10] {1252} INFO - iteration 26, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:18] {1405} INFO - at 25.8s,\tbest my_lgbm's error=0.1660,\tbest my_lgbm's error=0.1660\n", + "[flaml.automl: 08-12 21:38:18] {1252} INFO - iteration 27, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:22] {1405} INFO - at 29.5s,\tbest my_lgbm's error=0.1660,\tbest my_lgbm's error=0.1660\n", + "[flaml.automl: 08-12 21:38:22] {1252} INFO - iteration 28, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:25] {1405} INFO - at 32.4s,\tbest my_lgbm's error=0.1660,\tbest my_lgbm's error=0.1660\n", + "[flaml.automl: 08-12 21:38:25] {1252} INFO - iteration 29, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:27] {1405} INFO - at 34.8s,\tbest my_lgbm's error=0.1660,\tbest my_lgbm's error=0.1660\n", + "[flaml.automl: 08-12 21:38:27] {1252} INFO - iteration 30, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:49] {1405} INFO - at 56.7s,\tbest my_lgbm's error=0.1611,\tbest my_lgbm's error=0.1611\n", + "[flaml.automl: 08-12 21:38:49] {1252} INFO - iteration 31, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:38:50] {1405} INFO - at 57.7s,\tbest my_lgbm's error=0.1611,\tbest my_lgbm's error=0.1611\n", + "[flaml.automl: 08-12 21:38:50] {1252} INFO - iteration 32, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:39:07] {1405} INFO - at 75.1s,\tbest my_lgbm's error=0.1611,\tbest my_lgbm's error=0.1611\n", + "[flaml.automl: 08-12 21:39:07] {1252} INFO - iteration 33, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:39:45] {1405} INFO - at 112.5s,\tbest my_lgbm's error=0.1611,\tbest my_lgbm's error=0.1611\n", + "[flaml.automl: 08-12 21:39:45] {1252} INFO - iteration 34, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:39:52] {1405} INFO - at 120.2s,\tbest my_lgbm's error=0.1611,\tbest my_lgbm's error=0.1611\n", + "[flaml.automl: 08-12 21:39:52] {1252} INFO - iteration 35, current learner my_lgbm\n", + "[flaml.automl: 08-12 21:40:18] {1405} INFO - at 146.0s,\tbest my_lgbm's error=0.1611,\tbest my_lgbm's error=0.1611\n", + "[flaml.automl: 08-12 21:40:18] {1461} INFO - selected model: LGBMRegressor(colsample_bytree=0.7808828637589872,\n", + " learning_rate=0.1353935721742319, max_bin=256,\n", + " min_child_samples=112, n_estimators=1069, num_leaves=135,\n", + " objective=,\n", + " reg_alpha=0.003923158789997704, reg_lambda=4.093134402981548,\n", + " verbose=-1)\n", + "[flaml.automl: 08-12 21:40:18] {1184} INFO - fit succeeded\n", + "[flaml.automl: 08-12 21:40:18] {1185} INFO - Time taken to find the best model: 56.6591739654541\n" ] } ], @@ -903,7 +913,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 24, "metadata": { "tags": [] }, @@ -912,11 +922,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "Best hyperparmeter config: {'n_estimators': 754, 'num_leaves': 710, 'min_child_samples': 128, 'learning_rate': 0.10575205975801834, 'subsample': 1.0, 'log_max_bin': 8, 'colsample_bytree': 0.7929174747127123, 'reg_alpha': 0.0009765625, 'reg_lambda': 10.762106709995438}\n", - "Best r2 on validation data: 0.8376\n", - "Training duration of best run: 13.28 s\n", - "Predicted labels [135768.25690639 246689.39399877 136637.13857269 ... 175212.47378055\n", - " 243756.5990978 271017.12074672]\n", + "Best hyperparmeter config: {'n_estimators': 1069, 'num_leaves': 135, 'min_child_samples': 112, 'learning_rate': 0.1353935721742319, 'subsample': 1.0, 'log_max_bin': 9, 'colsample_bytree': 0.7808828637589872, 'reg_alpha': 0.003923158789997704, 'reg_lambda': 4.093134402981548}\n", + "Best r2 on validation data: 0.8389\n", + "Training duration of best run: 21.89 s\n", + "Predicted labels [144004.59232945 244728.76267583 142055.18306456 ... 188807.72145446\n", + " 235921.97531295 287399.52640133]\n", "True labels 14740 136900.0\n", "10101 241300.0\n", "20566 200700.0\n", @@ -929,9 +939,9 @@ "8522 227300.0\n", "16798 265600.0\n", "Name: median_house_value, Length: 5160, dtype: float64\n", - "r2 = 0.8459538207127344\n", - "mse = 2036260428.588182\n", - "mae = 30277.65301151835\n" + "r2 = 0.8448624478693473\n", + "mse = 2050686747.6576138\n", + "mae = 30682.547208847514\n" ] } ], @@ -953,23 +963,15 @@ ], "metadata": { "interpreter": { - "hash": "0cfea3304185a9579d09e0953576b57c8581e46e6ebc6dfeb681bc5a511f7544" + "hash": "ea9f131eb1b7663628f6445553ba215a834e2f0b4d18774746f0f47938ce4671" }, "kernelspec": { - "display_name": "Python 3.8.0 64-bit ('blend': conda)", + "display_name": "Python 3.8.0 64-bit ('test': conda)", "name": "python3" }, "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.0" + "version": "" } }, "nbformat": 4, diff --git a/setup.py b/setup.py index 14d858e79..d0f6fd53a 100644 --- a/setup.py +++ b/setup.py @@ -56,6 +56,7 @@ setuptools.setup( "torch==1.8.1", "datasets==1.4.1", "azure-storage-blob", + "statsmodels>=0.12.2" ], "blendsearch": [ "optuna==2.8.0" @@ -79,6 +80,10 @@ setuptools.setup( "datasets==1.4.1", "tensorboardX<=2.2", "torch" + ], + "forecast": [ + "prophet>=1.0.1", + "statsmodels>=0.12.2" ] }, classifiers=[ diff --git a/test/test_forecast.py b/test/test_forecast.py new file mode 100644 index 000000000..381ab60a4 --- /dev/null +++ b/test/test_forecast.py @@ -0,0 +1,119 @@ +def test_forecast_automl_df(budget=5): + # using dataframe + import statsmodels.api as sm + data = sm.datasets.co2.load_pandas() + data = data.data + data = data['co2'].resample('MS').mean() + data = data.fillna(data.bfill()) + data = data.to_frame().reset_index() + data = data.rename(columns={'index': 'ds', 'co2': 'y'}) + num_samples = data.shape[0] + time_horizon = 12 + split_idx = num_samples - time_horizon + X_train = data[:split_idx] + X_test = data[split_idx:]['ds'].to_frame() + y_test = data[split_idx:]['y'].to_frame() + ''' import AutoML class from flaml package ''' + from flaml import AutoML + automl = AutoML() + settings = { + "time_budget": budget, # total running time in seconds + "metric": 'mape', # primary metric + "task": 'forecast', # task type + "log_file_name": 'CO2_forecast.log', # flaml log file + "eval_method": "holdout", + "split_type": 'time' + } + '''The main flaml automl API''' + try: + automl.fit(dataframe=X_train, **settings, period=time_horizon, freq='M') + except ImportError: + automl.fit(dataframe=X_train, **settings, estimator_list=['arima', 'sarimax'], period=time_horizon, freq='M') + ''' retrieve best config and best learner''' + print('Best ML leaner:', automl.best_estimator) + print('Best hyperparmeter config:', automl.best_config) + print(f'Best mape on validation data: {automl.best_loss}') + print(f'Training duration of best run: {automl.best_config_train_time}s') + print(automl.model.estimator) + ''' pickle and save the automl object ''' + import pickle + with open('automl.pkl', 'wb') as f: + pickle.dump(automl, f, pickle.HIGHEST_PROTOCOL) + ''' compute predictions of testing dataset ''' + y_pred = automl.predict(X_test) + print('Predicted labels', y_pred) + print('True labels', y_test) + ''' compute different metric values on testing dataset''' + from flaml.ml import sklearn_metric_loss_score + print('mape', '=', sklearn_metric_loss_score('mape', y_pred, y_test)) + from flaml.data import get_output_from_log + time_history, best_valid_loss_history, valid_loss_history, config_history, train_loss_history = \ + get_output_from_log(filename=settings['log_file_name'], time_budget=budget) + for config in config_history: + print(config) + print(automl.prune_attr) + print(automl.max_resource) + print(automl.min_resource) + + +def test_forecast_automl_Xy(budget=5): + # using X_train and y_train + import statsmodels.api as sm + data = sm.datasets.co2.load_pandas() + data = data.data + data = data['co2'].resample('MS').mean() + data = data.fillna(data.bfill()) + data = data.to_frame().reset_index() + num_samples = data.shape[0] + time_horizon = 12 + split_idx = num_samples - time_horizon + X_train = data[:split_idx]['index'].to_frame() + y_train = data[:split_idx]['co2'] + X_test = data[split_idx:]['index'].to_frame() + y_test = data[split_idx:]['co2'].to_frame() + ''' import AutoML class from flaml package ''' + from flaml import AutoML + automl = AutoML() + settings = { + "time_budget": budget, # total running time in seconds + "metric": 'mape', # primary metric + "task": 'forecast', # task type + "log_file_name": 'CO2_forecast.log', # flaml log file + "eval_method": "holdout", + "split_type": 'time' + } + '''The main flaml automl API''' + try: + automl.fit(X_train=X_train, y_train=y_train, **settings, period=time_horizon, freq='M') + except ImportError: + automl.fit(X_train=X_train, y_train=y_train, **settings, estimator_list=['arima', 'sarimax'], period=time_horizon, freq='M') + ''' retrieve best config and best learner''' + print('Best ML leaner:', automl.best_estimator) + print('Best hyperparmeter config:', automl.best_config) + print(f'Best mape on validation data: {automl.best_loss}') + print(f'Training duration of best run: {automl.best_config_train_time}s') + print(automl.model.estimator) + ''' pickle and save the automl object ''' + import pickle + with open('automl.pkl', 'wb') as f: + pickle.dump(automl, f, pickle.HIGHEST_PROTOCOL) + ''' compute predictions of testing dataset ''' + y_pred = automl.predict(X_test) + print('Predicted labels', y_pred) + print('True labels', y_test) + ''' compute different metric values on testing dataset''' + from flaml.ml import sklearn_metric_loss_score + print('mape', '=', sklearn_metric_loss_score('mape', y_pred, y_test)) + from flaml.data import get_output_from_log + time_history, best_valid_loss_history, valid_loss_history, config_history, train_loss_history = \ + get_output_from_log(filename=settings['log_file_name'], time_budget=budget) + for config in config_history: + print(config) + print(automl.prune_attr) + print(automl.max_resource) + print(automl.min_resource) + + +if __name__ == "__main__": + test_forecast_automl_df(60) + test_forecast_automl_Xy(60) diff --git a/test/test_split.py b/test/test_split.py index d72384565..1b9b88848 100644 --- a/test/test_split.py +++ b/test/test_split.py @@ -6,10 +6,12 @@ from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score -dataset = "credit" +dataset = "credit-g" def _test(split_type): + from sklearn.externals._arff import ArffException + automl = AutoML() automl_settings = { @@ -22,9 +24,17 @@ def _test(split_type): "split_type": split_type, } - X, y = fetch_openml(name=dataset, return_X_y=True) - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, - random_state=42) + try: + X, y = fetch_openml(name=dataset, return_X_y=True) + except (ArffException, ValueError): + from sklearn.datasets import load_wine + X, y = load_wine(return_X_y=True) + if split_type != 'time': + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, + random_state=42) + else: + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, + shuffle=False) automl.fit(X_train=X_train, y_train=y_train, **automl_settings) pred = automl.predict(X_test) @@ -37,6 +47,10 @@ def _test_uniform(): _test(split_type="uniform") +def test_time(): + _test(split_type="time") + + def test_groups(): from sklearn.externals._arff import ArffException try: diff --git a/test/tune/example.py b/test/tune/example.py new file mode 100644 index 000000000..07a07b76e --- /dev/null +++ b/test/tune/example.py @@ -0,0 +1,52 @@ +import time + + +def evaluation_fn(step, width, height): + return (0.1 + width * step / 100)**(-1) + height * 0.1 + + +def easy_objective(config): + from ray import tune + # Hyperparameters + width, height = config["width"], config["height"] + + for step in range(config["steps"]): + # Iterative training function - can be any arbitrary training procedure + intermediate_score = evaluation_fn(step, width, height) + # Feed the score back back to Tune. + tune.report(iterations=step, mean_loss=intermediate_score) + time.sleep(0.1) + + +def test_blendsearch_tune(smoke_test=True): + try: + from ray import tune + from ray.tune.suggest import ConcurrencyLimiter + from ray.tune.schedulers import AsyncHyperBandScheduler + from ray.tune.suggest.flaml import BlendSearch + except ImportError: + print('ray[tune] is not installed, skipping test') + return + algo = BlendSearch() + algo = ConcurrencyLimiter(algo, max_concurrent=4) + scheduler = AsyncHyperBandScheduler() + analysis = tune.run( + easy_objective, + metric="mean_loss", + mode="min", + search_alg=algo, + scheduler=scheduler, + num_samples=10 if smoke_test else 100, + config={ + "steps": 100, + "width": tune.uniform(0, 20), + "height": tune.uniform(-100, 100), + # This is an ignored parameter. + "activation": tune.choice(["relu", "tanh"]) + }) + + print("Best hyperparameters found were: ", analysis.best_config) + + +if __name__ == "__main__": + test_blendsearch_tune(False)