Реконструкция n-й лучшей модели из объекта Trials (hyperopt) - PullRequest
0 голосов
/ 11 февраля 2020

Как я могу восстановить n-ю лучшую (например, третью лучшую) модель из объекта базы данных Trial с использованием библиотеки hyperopt Python?

Я адаптировал функцию из здесь чтобы получить результаты от n-й лучшей модели:

def nthBestModelFromTrials(trials,     # trials database object
                           rank = 2):  # n-th best model, in this case the third best model

    # filter out trials with status non-ok
    valid_trial_list = [trial for trial in trials
                            if STATUS_OK == trial['result']['status']]

    # get the losses of the remaining trials
    losses = [float(trial['result']['loss']) for trial in valid_trial_list]

    # get index of the n-th best model
    index_having_nth_minumum_loss = losses.index(sorted(losses)[rank])

    # get results data from the n-th best model object
    best_trial_obj = valid_trial_list[index_having_nth_minumum_loss ]

Однако best_trial_obj дает мне следующее ...

 {
 'state': 2,
 'tid': 4,
 'spec': None,
 'result': {'loss': 2339973.0105,
  'status': 'ok',
  'validation_technique_used': 'validation set 30% of newest data'},
 'misc': {'tid': 4,
  'cmd': ('domain_attachment', 'FMinIter_Domain'),
  'workdir': None,
  'idxs': {'D': [1],
   'P': [0],
   'Q': [0],
   'changepoint_prior_scale': [],
   'classifier': [4],
   'd': [1],
   'external_regressors_prophet': [],
   'external_regressors_sarimax': [4],
   'growth_type': [],
   'p': [3],
   'q': [2],
   'regressor_prior_scale': [],
   's': [12],
   'yearly_fourier_order': [],
   'yearly_seasonality_prior_scale': []},
  'vals': {'D': [1],
   'P': [1],
   'Q': [1],
   'changepoint_prior_scale': [],
   'classifier': [1],
   'd': [1],
   'external_regressors_prophet': [],
   'external_regressors_sarimax': [0],
   'growth_type': [],
   'p': [1],
   'q': [2],
   'regressor_prior_scale': [],
   's': [0],
   'yearly_fourier_order': [],
   'yearly_seasonality_prior_scale': []}},
 'exp_key': None,
 'owner': None,
 'version': 0,
 'book_time': datetime.datetime(2020, 2, 10, 16, 25, 35, 277000),
 'refresh_time': datetime.datetime(2020, 2, 10, 16, 25, 35, 499000)
 }

... но мне нужно форма, которую я также получаю, когда применяю функцию fmin (откуда я получаю только лучшую модель), а именно такую ​​форму:

{'D': 1,
 'P': 0,
 'Q': 0,
 'classifier': 1,
 'd': 1,
 'external_regressors_sarimax': 0,
 'p': 3,
 'q': 2,
 's': 12}

В чем разница между "idxs" и "vals"? Если бы я знал разницу между этими двумя, я мог бы просто создать вывод самостоятельно.

...