Невозможно воспроизвести прогнозы H2O GBM, несмотря на установку начального числа

Я пытаюсь запустить несколько моделей H2O с разными переменными ответа в цикле for.

H2O cluster uptime:         53 mins 11 secs
H2O cluster timezone:       Etc/UTC
H2O data parsing timezone:  UTC
H2O cluster version:        3.22.1.1
H2O cluster version age:    2 hours and 15 minutes
H2O cluster name:           H2O_from_python_root_np3l2m
H2O cluster total nodes:    1
H2O cluster free memory:    13.01 Gb
H2O cluster total cores:    8
H2O cluster allowed cores:  8
H2O cluster status:         locked, healthy
H2O connection url:         http://localhost:54321
H2O connection proxy:
H2O internal security:      False
H2O API Extensions:         XGBoost, Algos, AutoML, Core V3, Core V4
Python version:             2.7.12 final

Я установил семя для выбора наборов поездов / проверок и самой модели. У меня активна ранняя остановка, но, согласно документации, результаты должны воспроизводиться, пока активен score_tree_interval.

### This is the code that's defining the model

def append_probs(hframe, response_col, model):
  pd_df = h2o.as_list(hframe).copy()
  pd_df.loc[:,'pred'] = h2o.as_list(model.predict(hframe)).values
  pd_df.loc[:,'error'] = pd_df['pred'] - pd_df[response_col]
  return pd_df

def run_model(response_col, model_typ, hframe_train, hframe_pred):
  h2o_dtypes = [hframe_train.type(e) for e in hframe_train.columns]
  data = h2o.deep_copy(hframe_train,'data')
  mapping = {'new_email_ldsub':'live_pp',
             'new_call_ldsub':'live_pp',
             'used_email_ldsub':'live_usedplus',
             'used_call_ldsub':'live_usedplus',
             'myapp_edm_ldsub':'live_myapp',
             'cc_edm_ldsub':'live_cc',
             'fbm_call_ldsub':'live_fbm',
             'fbm_email_ldsub':'live_fbm'}
  data = data[data[mapping[response_col]]==1]

  train, valid = data.split_frame([0.8], seed=1234)

  X = hframe_train.col_names[:-14]
  print X
  y = response_col
  print y

  if model_typ == 'gbm':
    model = H2OGradientBoostingEstimator(
      ntrees=512,
      learn_rate=0.08,
      max_depth=7,
      col_sample_rate = 0.7,
      sample_rate = 0.9,
      stopping_tolerance=1e-05,
      stopping_rounds=2,
      score_tree_interval=5,
      #nfolds=5,
      #fold_assignment = "Random",
      distribution = 'poisson',
      seed=20000,
      stopping_metric='mae',
      min_rows = 10,
      nbins = 30

  model.train(X, y, training_frame=train, validation_frame=valid)

  pred_df = append_probs(hframe_pred,response_col,model)

  return model, pred_df

### This is the code that runs the model

gbm_results = pd.DataFrame()

gbm_mapping = {'live_pp':['new_call_ldsub','new_email_ldsub'],
           'live_usedplus':['used_call_ldsub','used_email_ldsub'],
           'live_myapp':['myapp_edm_ldsub'],
           'live_cc':['cc_edm_ldsub'],
           'live_fbm':['fbm_call_ldsub','fbm_email_ldsub']}

gbm_train_err = {}
gbm_valid_err = {}
gbm_xval_err = {}


for k,v in gbm_mapping.iteritems():
  for e in v:
    gbm_mod, gbm_pred_df = run_model(e,'gbm',hframe,hframe_forecast_pred)
    gbm_pred_df = gbm_pred_df[['id','month','pred']]
    gbm_pred_df = gbm_pred_df.groupby(['id','month'])['pred'].sum().reset_index()
    gbm_pred_df.loc[:,'product'] = str(e)
    gbm_train_err[str(e)] = [gbm_mod.mae(train=True),gbm_mod.rmse(train=True)]
    gbm_valid_err[str(e)] = [gbm_mod.mae(valid=True),gbm_mod.rmse(valid=True)]
    gbm_xval_err[str(e)] = [gbm_mod.mae(xval=True),gbm_mod.rmse(xval=True)]
    gbm_results = pd.concat([gbm_results, gbm_pred_df])

gbm_results['process_month'] = pd.to_datetime(gbm_results['process_month'],unit='ms')

Основываясь на документации, я ожидаю, что результаты для каждой модели будут воспроизводимыми / близкими.


person J. Lee    schedule 28.12.2018    source источник
comment
Привет, @Lee, вы видите разные результаты или это вопрос, чтобы подтвердить, что вы увидите воспроизводимые результаты. Если вы видите разные результаты, не могли бы вы опубликовать несколько примеров результатов, чтобы мы могли увидеть, насколько далеки разные прогоны? Благодарность!   -  person Lauren    schedule 02.01.2019
comment
Еще одна просьба: не могли бы вы дополнить свой вопрос коротким и полностью воспроизводимым примером? Если вы работаете на одном узле и устанавливаете начальное число вместе с score_tree_interval (а также несколькими другими критериями, перечисленными здесь: docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/gbm-faq / Ваша модель должна быть воспроизводимой.   -  person Lauren    schedule 02.01.2019
comment
Привет, @Lauren, спасибо за помощь. Я видел разные результаты. Я смог воспроизвести результаты, когда отключил раннюю остановку, но использование ранней остановки с набором score_tree_interval каждый раз давало мне разные прогнозы. Я постараюсь загрузить несколько примеров, если смогу воспроизвести их на наборе данных игрушек.   -  person J. Lee    schedule 04.01.2019


Ответы (1)


Начиная с последней версии H2O-3 3.22.1.1, требования воспроизводимости перечислены в документации здесь.

Для вашего удобства вот требования к воспроизводимости модели на одном узле:

Обратите внимание, что в дополнение к начальному значению вам необходимо использовать те же данные (те же разбиения), те же параметры и либо не использовать раннюю остановку, либо использовать раннюю остановку с установленным score_tree_interval.

Как гарантировать воспроизводимость в кластере с одним узлом?

Следующие критерии должны быть соблюдены, чтобы гарантировать воспроизводимость в кластере с одним узлом:

  • те же тренировочные данные

Примечание. Если у вас есть H2O для импорта всего каталога с несколькими файлами, а не с одним файлом, мы не гарантируем воспроизводимость, поскольку данные могут быть перемешаны во время импорта.

  • те же параметры, которые использовались для обучения модели
  • тот же набор семян (это требуется при выполнении любого отбора проб)
  • без ранней остановки или ранней остановки с установленным score_tree_interval и теми же данными проверки
person Lauren    schedule 03.01.2019
comment
Думаю, я разобрался. Я использовал два разных кластера, которые использовали две разные версии H2O. Спасибо за вашу помощь! - person J. Lee; 10.01.2019