Вложенный цикл для XGBoost - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь выполнить алгоритм XGBoost для регрессии, и я хочу иметь реализацию для проверки нескольких метрик, и выполняется только 4 раза, когда предполагается выполнение 24 .Выход имеет даты, а конечный объект preds_dict [] имеет только 4 элемента, как показано в результатах выполнения ниже.

preds_dict = []

for subsample in (8, 10):
    for gamma in range(0,1,5):
        for colsample_bytree in range(8,10):
            for max_depth in range(4,5):
                parameters = {'colsample_bytree': colsample_bytree / 10.0,
                            'max_depth': max_depth,
                            'subsample': subsample / 10.0,
                            'reg_alpha': 0.3,
                            'gamma': gamma,
                            'n_estimators': 1000,
                            'learning_rate': 0.1, 
                             'silent': True}
                start_time = time.monotonic()
                xgb = XGBRegressor(**parameters)
                xgb.fit(X_train,y_train)
                predictions = xgb.predict(X_test)
                sum_errs = arraysum((y_test - predictions)**2)
                stdev = sqrt(1/(len(y_test)-2) * sum_errs)

                prediction = {}

                prediction['max_depth'] = max_depth
                prediction['colsample_bytree'] = colsample_bytree / 10.0
                prediction['gamma'] = gamma
                prediction['subsample'] = subsample / 10.0

                #print('MAE: %.3f' % metrics.mean_absolute_error(y_test,predictions))
                prediction['MAE'] = metrics.mean_absolute_error(y_test,predictions)
                #print('MSE: %.3f' % metrics.mean_squared_error(y_test,predictions))
                prediction['MSE'] = metrics.mean_squared_error(y_test,predictions)
                #print('RMSE: %.3f' % np.sqrt(metrics.mean_squared_error(y_test,predictions)))
                prediction['RMSE'] = np.sqrt(metrics.mean_squared_error(y_test,predictions))
                #print('R2: %.3f' % metrics.r2_score(y_test,predictions))
                prediction['R2'] = metrics.r2_score(y_test,predictions)
                #print('SD: %.3f' % stdev)
                prediction['SD'] = stdev
                elapsed_time = time.monotonic() - start_time
                print('Time: %.3f' % elapsed_time)
                prediction['Time'] = elapsed_time
                preds_dict.append(prediction)

Результат этого выполнения:

[{'MAE': 12.713975206895622,
  'MSE': 294.93097406823347,
  'R2': 0.8640914724519757,
  'RMSE': 17.17355449719811,
  'SD': 17.18134472417949,
  'Time': 3.373633985998822,
  'colsample_bytree': 0.8,
  'gamma': 0,
  'max_depth': 4,
  'subsample': 0.8},
 {'MAE': 12.629139921822985,
  'MSE': 295.3937865569692,
  'R2': 0.8638782016550591,
  'RMSE': 17.187023784150913,
  'SD': 17.19482012103823,
  'Time': 3.5945449880000524,
  'colsample_bytree': 0.9,
  'gamma': 0,
  'max_depth': 4,
  'subsample': 0.8},
 {'MAE': 12.819829216785898,
  'MSE': 303.5407366360256,
  'R2': 0.8601239673202291,
  'RMSE': 17.422420515991043,
  'SD': 17.43032363298448,
  'Time': 3.1082309119992715,
  'colsample_bytree': 0.8,
  'gamma': 0,
  'max_depth': 4,
  'subsample': 1.0},
 {'MAE': 12.91538407644789,
  'MSE': 303.26353352229705,
  'R2': 0.8602517065891805,
  'RMSE': 17.414463342931274,
  'SD': 17.422362850410774,
  'Time': 3.336124154000572,
  'colsample_bytree': 0.9,
  'gamma': 0,
  'max_depth': 4,
  'subsample': 1.0}]
...