MiGenPro XGBoost models from the manuscript run
================================================

One XGBoost classifier per phenotype, from the first of the five train/test
iterations (random seed 43) of the manuscript run: grid-search-optimised
hyperparameters, features selected as the top 25% by mutual information.

Files and classes
  gram_XGBClassifier.pkl         negative, positive                       (1,539 features)
  motility_XGBClassifier.pkl     motile, non_motile                       (1,527 features)
  oxygen_XGBClassifier.pkl       aerobe, anaerobe, facultative anaerobe,
                                 microaerophile                           (1,610 features)
  spore_XGBClassifier.pkl        non_spore_forming, spore_forming         (1,456 features)
  temperature_XGBClassifier.pkl  mesophile, thermophile                   (1,705 features)

Features are Pfam protein-domain counts per genome; the expected feature names
are stored in each model (feature_names_in_). Each model also stores the label
encoder used in training, so MiGenPro returns phenotype labels directly:

  migenpro --ml --load_model gram_XGBClassifier.pkl --predict \
           --feature_matrix feature_matrix.tsv --phenotype_matrix phenotype_matrix.tsv \
           --output predictions/

The files are Python pickles. Load them only with versions matching those used
to save them: scikit-learn 1.5.2, xgboost 3.2.0, numpy 2.4.6 (Python 3.14).
Only unpickle files from a source you trust.
