code: """
  Optuna example that demonstrates a pruner for XGBoost.
  
  In this example, we optimize the validation accuracy of cancer detection using XGBoost.
  We optimize both the choice of booster model and their hyperparameters. Throughout
  training of models, a pruner observes intermediate results and stop unpromising trials.
  
  You can run this example as follows:
      $ python xgboost_integration.py
  
  """
  
  import numpy as np
  import sklearn.datasets
  import sklearn.metrics
  from sklearn.model_selection import train_test_split
  import xgboost as xgb
  
  import optuna
  
  
  # FYI: Objective functions can take additional arguments
  # (https://optuna.readthedocs.io/en/stable/faq.html#objective-func-additional-args).
  def objective(trial):
      data, target = sklearn.datasets.load_breast_cancer(return_X_y=True)
      train_x, test_x, train_y, test_y = train_test_split(data, target, test_size=0.25)
      dtrain = xgb.DMatrix(train_x, label=train_y)
      dtest = xgb.DMatrix(test_x, label=test_y)
  
      param = {
          'silent': 1,
          'objective': 'binary:logistic',
          'eval_metric': 'auc',
          'booster': trial.suggest_categorical('booster', ['gbtree', 'gblinear', 'dart']),
          'lambda': trial.suggest_loguniform('lambda', 1e-8, 1.0),
          'alpha': trial.suggest_loguniform('alpha', 1e-8, 1.0)
      }
  
      if param['booster'] == 'gbtree' or param['booster'] == 'dart':
          param['max_depth'] = trial.suggest_int('max_depth', 1, 9)
          param['eta'] = trial.suggest_loguniform('eta', 1e-8, 1.0)
          param['gamma'] = trial.suggest_loguniform('gamma', 1e-8, 1.0)
          param['grow_policy'] = trial.suggest_categorical('grow_policy', ['depthwise', 'lossguide'])
      if param['booster'] == 'dart':
          param['sample_type'] = trial.suggest_categorical('sample_type', ['uniform', 'weighted'])
          param['normalize_type'] = trial.suggest_categorical('normalize_type', ['tree', 'forest'])
          param['rate_drop'] = trial.suggest_loguniform('rate_drop', 1e-8, 1.0)
          param['skip_drop'] = trial.suggest_loguniform('skip_drop', 1e-8, 1.0)
  
      # Add a callback for pruning.
      pruning_callback = optuna.integration.XGBoostPruningCallback(trial, 'validation-auc')
      bst = xgb.train(param, dtrain, evals=[(dtest, 'validation')], callbacks=[pruning_callback])
      preds = bst.predict(dtest)
      pred_labels = np.rint(preds)
      accuracy = sklearn.metrics.accuracy_score(test_y, pred_labels)
      return accuracy
  
  
  if __name__ == '__main__':
      study = optuna.create_study(pruner=optuna.pruners.MedianPruner(n_warmup_steps=5),
                                  direction='maximize')
      study.optimize(objective, n_trials=100)
      print(study.best_trial)
  
apis: sklearn.model_selection.train_test_split