def fit(self, X_train, y_train, X_valid, y_valid, seed=42, label=None): self.label = label if label else 'LGB' self.models = [] for bag in range(self.meta_bags): self.params['seed'] = seed * (bag + 1) model = XGBClassifier(**self.params) model.fit(X_train, y_train, eval_set=[(X_train, y_train), (X_valid, y_valid)], eval_metric=self.feval, early_stopping_rounds=self.early_stop, verbose=False) model.xgb_eval = model.evals_result_['validation_1']['gini'] model.best_round = np.argsort(model.xgb_eval)[::-1][0] model.importances = model.feature_importances_ self.models.append(model) print('[%s Bag %d] Found %.6f @ %d with %d estimators' % (self.label, bag, model.xgb_eval[model.best_round], model.best_round, self.params.get('n_estimators', 100))) return self