We trained separate models for each adsorbate. We used a 64/16/20 train/validation/test split during model training using the Numpy random function to select data. The random state was set to 42 for each model so that the same data was selected across all model configurations for a given adsorbate. We tested both a random split among all data and a group split in which data was divided by MOF structure and all data associated with the structure was held out in either the validation or test set.