def METHOD_NAME(self):
    # TODO: if encoding_type is not None, set the encoding type
    trainable_predictors = {
        "bananas": MLPPredictor(ss_type=self.ss_type, encoding_type=EncodingType.PATH),
        "bayes_lin_reg": BayesianLinearRegression(
            ss_type=self.ss_type, encoding_type=EncodingType.ADJACENCY_ONE_HOT
        ),
        "bohamiann": BOHAMIANN(
            ss_type=self.ss_type, encoding_type=EncodingType.ADJACENCY_ONE_HOT
        ),
        "bonas": BonasPredictor(ss_type=self.ss_type, encoding_type=EncodingType.BONAS),
        "dngo": DNGOPredictor(
            ss_type=self.ss_type, encoding_type=EncodingType.ADJACENCY_ONE_HOT
        ),
        "lgb": LGBoost(
            ss_type=self.ss_type,
            zc=self.zc,
            encoding_type=EncodingType.ADJACENCY_ONE_HOT,
            zc_only=self.zc_only
        ),
        "gcn": GCNPredictor(ss_type=self.ss_type, encoding_type=EncodingType.GCN),
        "gp": GPPredictor(ss_type=self.ss_type, encoding_type=EncodingType.ADJACENCY_ONE_HOT),
        "gpwl": GPWLPredictor(
            ss_type=self.ss_type,
            kernel_type="wloa",
            optimize_gp_hyper=True,
            h="auto",
        ),
        "mlp": MLPPredictor(
            ss_type=self.ss_type, encoding_type=EncodingType.ADJACENCY_ONE_HOT
        ),
        "nao": SemiNASPredictor(
            ss_type=self.ss_type, semi=False, encoding_type=EncodingType.SEMINAS
        ),
        "ngb": NGBoost(
            ss_type=self.ss_type,
            zc=self.zc,
            encoding_type=EncodingType.ADJACENCY_ONE_HOT,
            zc_only=self.zc_only    
        ),
        "rf": RandomForestPredictor(
            ss_type=self.ss_type,
            zc=self.zc,
            encoding_type=EncodingType.ADJACENCY_ONE_HOT,
            zc_only=self.zc_only
        ),
        "seminas": SemiNASPredictor(
            ss_type=self.ss_type, semi=True, encoding_type=EncodingType.SEMINAS
        ),
        "sparse_gp": SparseGPPredictor(
            ss_type=self.ss_type,
            encoding_type=EncodingType.ADJACENCY_ONE_HOT,
            optimize_gp_hyper=True,
        ),
        "var_sparse_gp": VarSparseGPPredictor(
            ss_type=self.ss_type,
            encoding_type=EncodingType.ADJACENCY_ONE_HOT,
            optimize_gp_hyper=True,
            zc=False,
        ),
        "xgb": XGBoost(
            ss_type=self.ss_type, 
            zc=self.zc, 
            encoding_type=EncodingType.ADJACENCY_ONE_HOT,
            zc_only=self.zc_only
        ),
        "omni_ngb": OmniNGBPredictor(
            zero_cost=["jacov"],
            lce=[],
            encoding_type=EncodingType.ADJACENCY_ONE_HOT,
            ss_type=self.ss_type,
            run_pre_compute=False,
            n_hypers=25,
            min_train_size=0,
            max_zerocost=100,
        ),
        "omni_seminas": OmniSemiNASPredictor(
            zero_cost=["jacov"],
            lce=[],
            encoding_type=EncodingType.SEMINAS,
            ss_type=self.ss_type,
            run_pre_compute=False,
            semi=True,
            max_zerocost=1000,
            config=self.config,
        ),
    }
    return [
        copy.deepcopy(trainable_predictors[self.predictor_type])
        for _ in range(self.num_ensemble)
    ]