def METHOD_NAME(self):
    # TODO (andrewhsiehth):
    # Handle the comparison of different kinds of evaluation metrics.
    # E.g. For roc_auc, the higher the better.
    # But for mse, the lower the better.
    # The line "if eval_score > best_eval_score:"
    # should be replaced by a indicator function.
    best_eval_score = 0.0
    train_loader = get_from_registry(self.input_type, input_fn_registry)(
        filepath=self.params["input"]["train_data"], **self.params["training"]
    )()
    for epoch in range(self.params["training"]["num_epochs"]):
        train_loader.sampler.set_epoch(epoch)
        self.train(train_loader)
        eval_score = self.evaluate()
        if eval_score > best_eval_score:
            best_eval_score = eval_score
            self.save_checkpoint()
    return best_eval_score