This notebook shows how to use KIM to perform inverse modeling for a cloud chamber model.

# Libraries
from pathlib import Path
import pandas as pd

from kim.map import KIM
from kim.data import Data
from kim.mapping_model import MLP

%load_ext autoreload
%autoreload 2

Read the data#

  • The Output.csv file includes the ensemble of the two parameters to be estimated, represented by \(\mathbf{Y}\).

  • The Input_np_holodec.csv file includes the ensemble of the simulations generated by the cloud chamber model, represented by \(\mathbf{X}\).

# File and folder paths
f_para = Path("./data-holodec-PoissonPertb/Output.csv")
f_state = Path("./data-holodec-PoissonPertb/Input_np_holodec.csv")
# Read the data
df_para, df_state = pd.read_csv(f_para),pd.read_csv(f_state)
y_keys, x_keys = df_para.keys(), df_state.keys()
y, x = df_para.values, df_state.values
x.shape, y.shape
((513, 1458), (513, 2))

Configurations#

Preliminary analysis configuration#

# The random seed used in the statistical significance test
seed_shuffle = 1234

# The folder where the data analysis results will be saved
f_data_save = Path("./results-holodec/data")
# Data configuration
data_params = {
    "xscaler_type": "minmax",  # scaler for the x (input) data
    "yscaler_type": "minmax",  # scaler for the y (output) data
}

# Sensitivity analysis configuration
sensitivity_params = {
    "method": "pc", "metric": "it-knn",
    "sst": True, "ntest": 100, "alpha": 0.05, "k": 3,
    "n_jobs": 100, "seed_shuffle": seed_shuffle,
    "verbose": 1
}

Ensemble learning configuration#

# Some basis ensemble learning configuration
Ns_train = 400
Ns_val = 50
hidden_activation = 'sigmoid'
final_activation = 'leaky_relu'
seed_ens = 1024
seed_predict = 3636
seed_dl = 10
seed_model = 100
training_verbose = 1
n_models = 100
n_jobs = 20  # Number of parallel jobs used in joblib

# Locations where the ensemble learning results will be saved
f_kim_save1 = Path("./results-holodec/map_many2many")
f_kim_save2 = Path("./results-holodec/map_many2one")
f_kim_save3 = Path("./results-holodec/map_many2one_cond")
# Mapping parameters for each test below
map_configs = {
    "model_type": MLP,
    'n_model': n_models,
    'ensemble_type': 'ens_random',
    'model_hp_choices': {
        "depth": [1,3,5,6],
        "width_size": [3,6,10]
    },
    'model_hp_fixed': {
        "hidden_activation": hidden_activation,
        "final_activation": final_activation,
        "model_seed": seed_model
    },
    'optax_hp_choices': {
        'learning_rate': [0.01, 0.005, 0.003],
    },
    'optax_hp_fixed': {
        'nsteps': 300,
        'optimizer_type': 'adam',
    },
    'dl_hp_choices': {
    },
    'dl_hp_fixed': {
        'dl_seed': seed_dl,
        'num_train_sample': Ns_train,
        'num_val_sample': Ns_val,
        'batch_size': 64
    },
    'ens_seed': seed_ens,
    'training_parallel': True,
    'parallel_config': {
        'n_jobs': n_jobs, 
        'backend': 'loky',
        'verbose': 1
    },
    'device': None,
}

Perform preliminary data analysis#

The analysis include both sensitivity analysis and redundancy filtering check

data = Data(x, y, **data_params)
data.calculate_sensitivity(**sensitivity_params)
Using the kNN-based information theoretic metrics ...
Performing pairwise analysis to remove insensitive inputs ...
100%|██████████| 1458/1458 [10:28<00:00,  2.32it/s]  
Performing conditional independence testing to remove redundant inputs ...

Train the inverse mapping#

Now, let’s train the inverse mappings via ensemble learning. We are training three types of inverse mappings:

  • kim1: The naive inverse mapping from all \(\mathbf{Y}\) to all \(\mathbf{X}\)

  • kim2: The knowledge-informed inverse mapping from sensitive \(\mathbf{Y}\) to each of \(\mathbf{X}\) using global sensitivity analysis

  • kim3: The knowledge-informed inverse mapping from sensitive \(\mathbf{Y}\) to each of \(\mathbf{X}\) using global sensitivity analysis + redundancy filtering check

# Initialize three diffferent KIMs
kim1 = KIM(data, map_configs, map_option='many2many')
kim2 = KIM(data, map_configs, mask_option="sensitivity", map_option='many2one')
kim3 = KIM(data, map_configs, mask_option="cond_sensitivity", map_option='many2one')

# Train the mappings
kim1.train()
kim2.train()
kim3.train()
 Performing ensemble training in parallel with 100 model configurations...
[Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers.
/global/cfs/cdirs/m1800/peishi/.conda/envs/kim/lib/python3.12/site-packages/joblib/externals/loky/backend/fork_exec.py:38: RuntimeWarning: os.fork() was called. os.fork() is incompatible with multithreaded code, and JAX is multithreaded, so this will likely lead to a deadlock.
  pid = os.fork()
100%|██████████| 300/300 [00:03<00:00, 88.71it/s] 
100%|██████████| 300/300 [00:03<00:00, 85.63it/s] 
100%|██████████| 300/300 [00:03<00:00, 84.97it/s] 
100%|██████████| 300/300 [00:03<00:00, 83.72it/s] 
100%|██████████| 300/300 [00:03<00:00, 78.77it/s]
100%|██████████| 300/300 [00:03<00:00, 77.45it/s]
100%|██████████| 300/300 [00:03<00:00, 75.99it/s]
100%|██████████| 300/300 [00:04<00:00, 73.51it/s]
100%|██████████| 300/300 [00:04<00:00, 71.85it/s]
100%|██████████| 300/300 [00:04<00:00, 69.90it/s]
100%|██████████| 300/300 [00:04<00:00, 70.15it/s]
 86%|████████▌ | 257/300 [00:04<00:00, 78.81it/s][Parallel(n_jobs=20)]: Done  10 tasks      | elapsed:   34.4s
100%|██████████| 300/300 [00:04<00:00, 65.90it/s]
100%|██████████| 300/300 [00:04<00:00, 63.90it/s]
100%|██████████| 300/300 [00:04<00:00, 64.37it/s]
100%|██████████| 300/300 [00:04<00:00, 63.90it/s]
100%|██████████| 300/300 [00:04<00:00, 63.39it/s]
100%|██████████| 300/300 [00:04<00:00, 62.15it/s]]
100%|██████████| 300/300 [00:04<00:00, 61.74it/s]
100%|██████████| 300/300 [00:05<00:00, 57.05it/s]]
100%|██████████| 300/300 [00:05<00:00, 57.07it/s]
100%|██████████| 300/300 [00:03<00:00, 96.24it/s] 
100%|██████████| 300/300 [00:03<00:00, 95.32it/s] 
100%|██████████| 300/300 [00:04<00:00, 67.23it/s]]
100%|██████████| 300/300 [00:04<00:00, 68.89it/s]]
100%|██████████| 300/300 [00:04<00:00, 66.53it/s]]
100%|██████████| 300/300 [00:03<00:00, 97.00it/s] 
100%|██████████| 300/300 [00:03<00:00, 80.99it/s]
100%|██████████| 300/300 [00:03<00:00, 80.74it/s]
100%|██████████| 300/300 [00:04<00:00, 69.12it/s]
100%|██████████| 300/300 [00:03<00:00, 85.27it/s]
100%|██████████| 300/300 [00:03<00:00, 86.06it/s]
100%|██████████| 300/300 [00:05<00:00, 60.00it/s]
100%|██████████| 300/300 [00:04<00:00, 70.86it/s]
100%|██████████| 300/300 [00:04<00:00, 63.48it/s]
100%|██████████| 300/300 [00:04<00:00, 63.12it/s]
100%|██████████| 300/300 [00:03<00:00, 79.44it/s]
100%|██████████| 300/300 [00:04<00:00, 65.56it/s]
100%|██████████| 300/300 [00:04<00:00, 64.59it/s]]
100%|██████████| 300/300 [00:04<00:00, 68.35it/s]
100%|██████████| 300/300 [00:04<00:00, 62.61it/s]]
100%|██████████| 300/300 [00:03<00:00, 83.20it/s]]
100%|██████████| 300/300 [00:03<00:00, 81.57it/s]]
100%|██████████| 300/300 [00:03<00:00, 99.67it/s] 
100%|██████████| 300/300 [00:03<00:00, 84.72it/s]]
100%|██████████| 300/300 [00:03<00:00, 91.18it/s] 
100%|██████████| 300/300 [00:03<00:00, 86.26it/s]]
100%|██████████| 300/300 [00:04<00:00, 67.26it/s]]
100%|██████████| 300/300 [00:03<00:00, 87.91it/s]]
100%|██████████| 300/300 [00:04<00:00, 67.65it/s]]
100%|██████████| 300/300 [00:04<00:00, 71.71it/s]
100%|██████████| 300/300 [00:04<00:00, 70.65it/s]]
100%|██████████| 300/300 [00:03<00:00, 82.81it/s]]
100%|██████████| 300/300 [00:04<00:00, 67.46it/s]]
100%|██████████| 300/300 [00:04<00:00, 61.30it/s]]
100%|██████████| 300/300 [00:04<00:00, 71.73it/s]]
100%|██████████| 300/300 [00:04<00:00, 61.68it/s]
100%|██████████| 300/300 [00:04<00:00, 62.93it/s]]
100%|██████████| 300/300 [00:04<00:00, 72.97it/s]]
100%|██████████| 300/300 [00:03<00:00, 98.96it/s] 
100%|██████████| 300/300 [00:04<00:00, 66.96it/s]
100%|██████████| 300/300 [00:04<00:00, 60.54it/s]]
100%|██████████| 300/300 [00:03<00:00, 98.86it/s] 
100%|██████████| 300/300 [00:04<00:00, 67.26it/s]]
100%|██████████| 300/300 [00:04<00:00, 71.33it/s]]
100%|██████████| 300/300 [00:03<00:00, 93.23it/s] 
100%|██████████| 300/300 [00:04<00:00, 65.85it/s]]
100%|██████████| 300/300 [00:03<00:00, 75.22it/s]]
100%|██████████| 300/300 [00:03<00:00, 99.62it/s] 
100%|██████████| 300/300 [00:04<00:00, 62.56it/s]
100%|██████████| 300/300 [00:04<00:00, 67.68it/s]
100%|██████████| 300/300 [00:04<00:00, 61.53it/s]
100%|██████████| 300/300 [00:04<00:00, 72.33it/s]
100%|██████████| 300/300 [00:05<00:00, 59.32it/s]
100%|██████████| 300/300 [00:04<00:00, 66.15it/s]
100%|██████████| 300/300 [00:04<00:00, 70.63it/s]
100%|██████████| 300/300 [00:04<00:00, 68.24it/s]
100%|██████████| 300/300 [00:03<00:00, 76.64it/s]
100%|██████████| 300/300 [00:04<00:00, 69.67it/s]
100%|██████████| 300/300 [00:03<00:00, 83.30it/s]
100%|██████████| 300/300 [00:04<00:00, 60.87it/s]
100%|██████████| 300/300 [00:03<00:00, 84.24it/s]
100%|██████████| 300/300 [00:04<00:00, 61.48it/s]
100%|██████████| 300/300 [00:04<00:00, 71.59it/s]
100%|██████████| 300/300 [00:03<00:00, 80.70it/s]]
100%|██████████| 300/300 [00:05<00:00, 58.35it/s]]
100%|██████████| 300/300 [00:04<00:00, 68.96it/s]]
100%|██████████| 300/300 [00:04<00:00, 70.89it/s]]
100%|██████████| 300/300 [00:03<00:00, 91.17it/s] 
100%|██████████| 300/300 [00:03<00:00, 91.17it/s] 
100%|██████████| 300/300 [00:04<00:00, 74.87it/s]
100%|██████████| 300/300 [00:04<00:00, 69.35it/s]
100%|██████████| 300/300 [00:04<00:00, 73.14it/s]
100%|██████████| 300/300 [00:04<00:00, 72.40it/s]
100%|██████████| 300/300 [00:03<00:00, 76.98it/s]
100%|██████████| 300/300 [00:04<00:00, 73.34it/s]
100%|██████████| 300/300 [00:04<00:00, 62.02it/s]
100%|██████████| 300/300 [00:04<00:00, 64.95it/s]
100%|██████████| 300/300 [00:04<00:00, 67.56it/s]
100%|██████████| 300/300 [00:04<00:00, 61.80it/s]
100%|██████████| 300/300 [00:03<00:00, 77.25it/s]
[Parallel(n_jobs=20)]: Done 100 out of 100 | elapsed:   53.6s finished
[Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers.
Training completes.

 Performing ensemble training in parallel with 100 model configurations...
100%|██████████| 300/300 [00:03<00:00, 95.44it/s] 
100%|██████████| 300/300 [00:03<00:00, 92.17it/s] 
100%|██████████| 300/300 [00:03<00:00, 89.40it/s] 
100%|██████████| 300/300 [00:03<00:00, 89.71it/s] 
100%|██████████| 300/300 [00:03<00:00, 87.52it/s]
100%|██████████| 300/300 [00:03<00:00, 87.72it/s] 
100%|██████████| 300/300 [00:03<00:00, 79.90it/s] 
100%|██████████| 300/300 [00:03<00:00, 76.54it/s]
100%|██████████| 300/300 [00:03<00:00, 76.83it/s]
100%|██████████| 300/300 [00:04<00:00, 70.75it/s]
100%|██████████| 300/300 [00:04<00:00, 70.82it/s]
[Parallel(n_jobs=20)]: Done  10 tasks      | elapsed:    4.7s
100%|██████████| 300/300 [00:04<00:00, 68.49it/s]
100%|██████████| 300/300 [00:04<00:00, 68.38it/s]
100%|██████████| 300/300 [00:04<00:00, 64.42it/s]
100%|██████████| 300/300 [00:04<00:00, 63.51it/s]
100%|██████████| 300/300 [00:04<00:00, 63.83it/s]
100%|██████████| 300/300 [00:04<00:00, 64.53it/s]
100%|██████████| 300/300 [00:05<00:00, 59.58it/s]]
100%|██████████| 300/300 [00:05<00:00, 58.01it/s]]
100%|██████████| 300/300 [00:05<00:00, 57.42it/s]]
100%|██████████| 300/300 [00:03<00:00, 97.02it/s] 
100%|██████████| 300/300 [00:03<00:00, 99.93it/s] 
100%|██████████| 300/300 [00:04<00:00, 65.98it/s]]
100%|██████████| 300/300 [00:03<00:00, 99.10it/s] 
100%|██████████| 300/300 [00:03<00:00, 83.45it/s]
100%|██████████| 300/300 [00:04<00:00, 71.62it/s]]
100%|██████████| 300/300 [00:04<00:00, 69.56it/s]]
100%|██████████| 300/300 [00:04<00:00, 65.39it/s]]
100%|██████████| 300/300 [00:03<00:00, 83.79it/s] 
100%|██████████| 300/300 [00:04<00:00, 62.35it/s]]
100%|██████████| 300/300 [00:03<00:00, 89.97it/s] 
100%|██████████| 300/300 [00:03<00:00, 92.84it/s] 
100%|██████████| 300/300 [00:04<00:00, 65.32it/s]
100%|██████████| 300/300 [00:04<00:00, 62.65it/s]
100%|██████████| 300/300 [00:03<00:00, 78.81it/s]
100%|██████████| 300/300 [00:04<00:00, 65.99it/s]]
100%|██████████| 300/300 [00:04<00:00, 68.22it/s]]
100%|██████████| 300/300 [00:04<00:00, 62.66it/s]]
100%|██████████| 300/300 [00:04<00:00, 65.82it/s]]
100%|██████████| 300/300 [00:04<00:00, 62.25it/s]
100%|██████████| 300/300 [00:03<00:00, 85.75it/s] 
100%|██████████| 300/300 [00:03<00:00, 84.19it/s] 
100%|██████████| 300/300 [00:02<00:00, 101.88it/s]
100%|██████████| 300/300 [00:03<00:00, 93.31it/s] 
100%|██████████| 300/300 [00:03<00:00, 84.06it/s]]
100%|██████████| 300/300 [00:04<00:00, 70.93it/s]]
100%|██████████| 300/300 [00:03<00:00, 94.89it/s] 
100%|██████████| 300/300 [00:03<00:00, 78.16it/s]]
100%|██████████| 300/300 [00:04<00:00, 67.73it/s]]
100%|██████████| 300/300 [00:03<00:00, 93.91it/s] 
100%|██████████| 300/300 [00:04<00:00, 68.39it/s]]
100%|██████████| 300/300 [00:04<00:00, 71.04it/s]]
100%|██████████| 300/300 [00:04<00:00, 64.28it/s]
100%|██████████| 300/300 [00:04<00:00, 63.02it/s]]
100%|██████████| 300/300 [00:04<00:00, 68.74it/s]]
100%|██████████| 300/300 [00:03<00:00, 83.25it/s]
100%|██████████| 300/300 [00:04<00:00, 74.99it/s]]
100%|██████████| 300/300 [00:04<00:00, 63.71it/s]]
100%|██████████| 300/300 [00:02<00:00, 102.02it/s]
100%|██████████| 300/300 [00:04<00:00, 73.56it/s]
100%|██████████| 300/300 [00:02<00:00, 100.73it/s]
100%|██████████| 300/300 [00:03<00:00, 78.60it/s]]
100%|██████████| 300/300 [00:04<00:00, 63.99it/s]]
100%|██████████| 300/300 [00:04<00:00, 71.03it/s]]
100%|██████████| 300/300 [00:04<00:00, 68.48it/s]]
100%|██████████| 300/300 [00:03<00:00, 93.70it/s] 
100%|██████████| 300/300 [00:03<00:00, 81.53it/s]]
100%|██████████| 300/300 [00:04<00:00, 65.06it/s]]
100%|██████████| 300/300 [00:03<00:00, 98.45it/s] 
100%|██████████| 300/300 [00:04<00:00, 63.52it/s]
100%|██████████| 300/300 [00:03<00:00, 79.33it/s]
100%|██████████| 300/300 [00:04<00:00, 64.02it/s]
100%|██████████| 300/300 [00:03<00:00, 75.63it/s]
100%|██████████| 300/300 [00:04<00:00, 72.18it/s]
100%|██████████| 300/300 [00:04<00:00, 64.60it/s]
100%|██████████| 300/300 [00:03<00:00, 80.39it/s]
100%|██████████| 300/300 [00:04<00:00, 66.54it/s]
100%|██████████| 300/300 [00:03<00:00, 85.89it/s]
100%|██████████| 300/300 [00:04<00:00, 68.59it/s]
100%|██████████| 300/300 [00:03<00:00, 85.04it/s]
100%|██████████| 300/300 [00:04<00:00, 68.27it/s]
100%|██████████| 300/300 [00:04<00:00, 65.35it/s]
100%|██████████| 300/300 [00:04<00:00, 71.81it/s]
100%|██████████| 300/300 [00:04<00:00, 63.69it/s]]
100%|██████████| 300/300 [00:03<00:00, 81.73it/s]]
100%|██████████| 300/300 [00:04<00:00, 69.54it/s]]
100%|██████████| 300/300 [00:04<00:00, 73.17it/s]
100%|██████████| 300/300 [00:04<00:00, 72.93it/s]]
100%|██████████| 300/300 [00:03<00:00, 92.38it/s] 
100%|██████████| 300/300 [00:03<00:00, 76.77it/s]
100%|██████████| 300/300 [00:03<00:00, 87.45it/s]
100%|██████████| 300/300 [00:04<00:00, 73.37it/s]
100%|██████████| 300/300 [00:04<00:00, 72.14it/s]
100%|██████████| 300/300 [00:03<00:00, 82.27it/s]
100%|██████████| 300/300 [00:04<00:00, 65.50it/s]
100%|██████████| 300/300 [00:04<00:00, 69.66it/s]
100%|██████████| 300/300 [00:04<00:00, 72.59it/s]
100%|██████████| 300/300 [00:03<00:00, 75.61it/s]
100%|██████████| 300/300 [00:04<00:00, 63.71it/s]
100%|██████████| 300/300 [00:04<00:00, 67.93it/s]
[Parallel(n_jobs=20)]: Done 100 out of 100 | elapsed:   23.1s finished
[Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers.
Training completes.

 Performing ensemble training in parallel with 100 model configurations...
100%|██████████| 300/300 [00:02<00:00, 100.32it/s]
100%|██████████| 300/300 [00:02<00:00, 100.22it/s]
100%|██████████| 300/300 [00:03<00:00, 98.96it/s] 
100%|██████████| 300/300 [00:03<00:00, 99.55it/s] 
100%|██████████| 300/300 [00:03<00:00, 96.81it/s] 
100%|██████████| 300/300 [00:03<00:00, 98.77it/s] 
100%|██████████| 300/300 [00:03<00:00, 84.73it/s] 
100%|██████████| 300/300 [00:03<00:00, 84.13it/s] 
100%|██████████| 300/300 [00:03<00:00, 83.98it/s]
100%|██████████| 300/300 [00:03<00:00, 83.60it/s]
  3%|▎         | 10/300 [00:00<00:18, 15.83it/s][Parallel(n_jobs=20)]: Done  10 tasks      | elapsed:    4.1s
100%|██████████| 300/300 [00:04<00:00, 73.63it/s]
100%|██████████| 300/300 [00:04<00:00, 72.93it/s]
100%|██████████| 300/300 [00:04<00:00, 69.77it/s]]
100%|██████████| 300/300 [00:04<00:00, 70.11it/s]
100%|██████████| 300/300 [00:04<00:00, 69.17it/s]
100%|██████████| 300/300 [00:04<00:00, 68.57it/s]
100%|██████████| 300/300 [00:04<00:00, 67.80it/s]]
100%|██████████| 300/300 [00:04<00:00, 68.79it/s]
100%|██████████| 300/300 [00:04<00:00, 63.33it/s]]
100%|██████████| 300/300 [00:04<00:00, 63.08it/s]
100%|██████████| 300/300 [00:02<00:00, 101.87it/s]
100%|██████████| 300/300 [00:02<00:00, 100.55it/s]
100%|██████████| 300/300 [00:03<00:00, 86.34it/s] 
100%|██████████| 300/300 [00:04<00:00, 73.68it/s]]
100%|██████████| 300/300 [00:04<00:00, 69.06it/s]]
100%|██████████| 300/300 [00:04<00:00, 69.21it/s]]
100%|██████████| 300/300 [00:04<00:00, 73.28it/s]]
100%|██████████| 300/300 [00:02<00:00, 101.85it/s]
100%|██████████| 300/300 [00:03<00:00, 85.26it/s] 
100%|██████████| 300/300 [00:04<00:00, 66.06it/s]]
100%|██████████| 300/300 [00:03<00:00, 84.85it/s] 
100%|██████████| 300/300 [00:04<00:00, 69.03it/s]
100%|██████████| 300/300 [00:03<00:00, 93.67it/s] 
100%|██████████| 300/300 [00:03<00:00, 94.61it/s] 
100%|██████████| 300/300 [00:04<00:00, 70.16it/s]
100%|██████████| 300/300 [00:04<00:00, 69.99it/s]
100%|██████████| 300/300 [00:04<00:00, 73.80it/s]
100%|██████████| 300/300 [00:04<00:00, 71.13it/s]]
100%|██████████| 300/300 [00:04<00:00, 65.34it/s]]
100%|██████████| 300/300 [00:04<00:00, 62.74it/s]]
100%|██████████| 300/300 [00:03<00:00, 84.61it/s]]
100%|██████████| 300/300 [00:02<00:00, 103.01it/s]
100%|██████████| 300/300 [00:03<00:00, 81.49it/s] 
100%|██████████| 300/300 [00:03<00:00, 95.36it/s] 
100%|██████████| 300/300 [00:03<00:00, 85.79it/s] 
100%|██████████| 300/300 [00:03<00:00, 99.08it/s] 
100%|██████████| 300/300 [00:03<00:00, 80.88it/s]]
100%|██████████| 300/300 [00:04<00:00, 73.83it/s]]
100%|██████████| 300/300 [00:03<00:00, 94.59it/s] 
100%|██████████| 300/300 [00:04<00:00, 64.46it/s]]
100%|██████████| 300/300 [00:04<00:00, 69.48it/s]]
100%|██████████| 300/300 [00:04<00:00, 74.73it/s]]
100%|██████████| 300/300 [00:04<00:00, 67.75it/s]]
100%|██████████| 300/300 [00:04<00:00, 73.26it/s]]
100%|██████████| 300/300 [00:03<00:00, 81.49it/s] 
100%|██████████| 300/300 [00:04<00:00, 74.06it/s]]
100%|██████████| 300/300 [00:04<00:00, 60.71it/s]]
100%|██████████| 300/300 [00:04<00:00, 65.69it/s]]
100%|██████████| 300/300 [00:04<00:00, 60.75it/s]]
100%|██████████| 300/300 [00:02<00:00, 102.15it/s]
100%|██████████| 300/300 [00:04<00:00, 71.99it/s]]
100%|██████████| 300/300 [00:02<00:00, 100.31it/s]
100%|██████████| 300/300 [00:04<00:00, 73.79it/s]]
100%|██████████| 300/300 [00:03<00:00, 80.72it/s]]
100%|██████████| 300/300 [00:02<00:00, 100.95it/s]
100%|██████████| 300/300 [00:04<00:00, 68.11it/s]]
100%|██████████| 300/300 [00:03<00:00, 85.01it/s] 
100%|██████████| 300/300 [00:04<00:00, 67.52it/s]]
100%|██████████| 300/300 [00:03<00:00, 81.10it/s]]
100%|██████████| 300/300 [00:04<00:00, 74.67it/s]]
100%|██████████| 300/300 [00:02<00:00, 101.03it/s]
100%|██████████| 300/300 [00:04<00:00, 61.37it/s]]
100%|██████████| 300/300 [00:03<00:00, 79.88it/s]]
100%|██████████| 300/300 [00:04<00:00, 65.03it/s]
100%|██████████| 300/300 [00:03<00:00, 86.14it/s] 
100%|██████████| 300/300 [00:04<00:00, 63.08it/s]
100%|██████████| 300/300 [00:04<00:00, 61.96it/s]
100%|██████████| 300/300 [00:03<00:00, 85.36it/s]
100%|██████████| 300/300 [00:03<00:00, 81.69it/s]
100%|██████████| 300/300 [00:04<00:00, 68.86it/s]
100%|██████████| 300/300 [00:04<00:00, 65.09it/s]
100%|██████████| 300/300 [00:04<00:00, 69.71it/s]
100%|██████████| 300/300 [00:04<00:00, 73.22it/s]
100%|██████████| 300/300 [00:03<00:00, 81.89it/s] 
100%|██████████| 300/300 [00:04<00:00, 61.10it/s]]
100%|██████████| 300/300 [00:04<00:00, 70.48it/s]
100%|██████████| 300/300 [00:04<00:00, 73.46it/s]]
100%|██████████| 300/300 [00:04<00:00, 64.78it/s]]
100%|██████████| 300/300 [00:02<00:00, 101.58it/s]
100%|██████████| 300/300 [00:03<00:00, 80.82it/s]]
100%|██████████| 300/300 [00:03<00:00, 93.71it/s] 
100%|██████████| 300/300 [00:04<00:00, 74.32it/s]]
100%|██████████| 300/300 [00:04<00:00, 73.83it/s]
100%|██████████| 300/300 [00:03<00:00, 80.26it/s]]
100%|██████████| 300/300 [00:03<00:00, 85.64it/s] 
100%|██████████| 300/300 [00:04<00:00, 70.25it/s]
100%|██████████| 300/300 [00:04<00:00, 65.27it/s]
100%|██████████| 300/300 [00:04<00:00, 71.15it/s]
100%|██████████| 300/300 [00:04<00:00, 65.82it/s]
100%|██████████| 300/300 [00:04<00:00, 65.30it/s]
[Parallel(n_jobs=20)]: Done 100 out of 100 | elapsed:   22.3s finished
[Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers.
Training completes.

 Performing ensemble training in parallel with 100 model configurations...
100%|██████████| 300/300 [00:03<00:00, 99.90it/s] 
100%|██████████| 300/300 [00:03<00:00, 98.12it/s] 
100%|██████████| 300/300 [00:03<00:00, 95.87it/s] 
100%|██████████| 300/300 [00:03<00:00, 94.29it/s] 
100%|██████████| 300/300 [00:03<00:00, 93.40it/s] 
100%|██████████| 300/300 [00:03<00:00, 93.39it/s] 
100%|██████████| 300/300 [00:03<00:00, 84.53it/s] 
100%|██████████| 300/300 [00:03<00:00, 84.25it/s]
100%|██████████| 300/300 [00:03<00:00, 82.34it/s]
100%|██████████| 300/300 [00:03<00:00, 80.26it/s]
 86%|████████▌ | 257/300 [00:04<00:00, 81.91it/s][Parallel(n_jobs=20)]: Done  10 tasks      | elapsed:    4.3s
100%|██████████| 300/300 [00:04<00:00, 73.34it/s]
100%|██████████| 300/300 [00:04<00:00, 73.15it/s]
100%|██████████| 300/300 [00:04<00:00, 70.63it/s]
100%|██████████| 300/300 [00:04<00:00, 68.42it/s]
100%|██████████| 300/300 [00:04<00:00, 68.11it/s]
100%|██████████| 300/300 [00:04<00:00, 66.48it/s]
100%|██████████| 300/300 [00:04<00:00, 65.92it/s]
100%|██████████| 300/300 [00:04<00:00, 65.96it/s]
100%|██████████| 300/300 [00:04<00:00, 62.62it/s]]
100%|██████████| 300/300 [00:05<00:00, 59.12it/s]]
100%|██████████| 300/300 [00:02<00:00, 100.03it/s]
100%|██████████| 300/300 [00:02<00:00, 100.96it/s]
100%|██████████| 300/300 [00:03<00:00, 85.82it/s] 
100%|██████████| 300/300 [00:04<00:00, 69.03it/s]]
100%|██████████| 300/300 [00:04<00:00, 73.56it/s]]
100%|██████████| 300/300 [00:04<00:00, 68.20it/s]
100%|██████████| 300/300 [00:04<00:00, 72.45it/s]]
100%|██████████| 300/300 [00:03<00:00, 99.40it/s] 
100%|██████████| 300/300 [00:03<00:00, 85.26it/s] 
100%|██████████| 300/300 [00:04<00:00, 64.43it/s]]
100%|██████████| 300/300 [00:03<00:00, 93.20it/s] 
100%|██████████| 300/300 [00:04<00:00, 68.40it/s]
100%|██████████| 300/300 [00:03<00:00, 94.53it/s] 
100%|██████████| 300/300 [00:03<00:00, 83.19it/s]
100%|██████████| 300/300 [00:04<00:00, 67.78it/s]
100%|██████████| 300/300 [00:04<00:00, 70.76it/s]]
100%|██████████| 300/300 [00:04<00:00, 66.12it/s]
100%|██████████| 300/300 [00:04<00:00, 70.06it/s]]
100%|██████████| 300/300 [00:04<00:00, 65.32it/s]]
100%|██████████| 300/300 [00:04<00:00, 62.67it/s]]
100%|██████████| 300/300 [00:03<00:00, 85.09it/s] 
100%|██████████| 300/300 [00:03<00:00, 86.61it/s] 
100%|██████████| 300/300 [00:02<00:00, 101.62it/s]
100%|██████████| 300/300 [00:03<00:00, 86.89it/s] 
100%|██████████| 300/300 [00:03<00:00, 95.09it/s] 
100%|██████████| 300/300 [00:03<00:00, 97.63it/s] 
100%|██████████| 300/300 [00:03<00:00, 80.10it/s]]
100%|██████████| 300/300 [00:04<00:00, 71.46it/s]]
100%|██████████| 300/300 [00:04<00:00, 68.75it/s]]
100%|██████████| 300/300 [00:03<00:00, 93.34it/s] 
100%|██████████| 300/300 [00:04<00:00, 66.44it/s]]
100%|██████████| 300/300 [00:04<00:00, 67.81it/s]]
100%|██████████| 300/300 [00:04<00:00, 72.66it/s]]
100%|██████████| 300/300 [00:04<00:00, 71.04it/s]
100%|██████████| 300/300 [00:03<00:00, 84.89it/s]]
100%|██████████| 300/300 [00:04<00:00, 63.30it/s]]
100%|██████████| 300/300 [00:04<00:00, 63.87it/s]]
100%|██████████| 300/300 [00:04<00:00, 71.03it/s]]
100%|██████████| 300/300 [00:02<00:00, 101.66it/s]
100%|██████████| 300/300 [00:04<00:00, 66.96it/s]
100%|██████████| 300/300 [00:04<00:00, 72.31it/s]]
100%|██████████| 300/300 [00:02<00:00, 102.83it/s]
100%|██████████| 300/300 [00:03<00:00, 80.42it/s]]
100%|██████████| 300/300 [00:04<00:00, 71.86it/s]]
100%|██████████| 300/300 [00:03<00:00, 98.29it/s] 
100%|██████████| 300/300 [00:03<00:00, 83.97it/s]]
100%|██████████| 300/300 [00:04<00:00, 69.57it/s]]
100%|██████████| 300/300 [00:04<00:00, 69.02it/s]]
 50%|█████     | 151/300 [00:02<00:01, 90.78it/s]/global/cfs/cdirs/m1800/peishi/.conda/envs/kim/lib/python3.12/site-packages/joblib/externals/loky/process_executor.py:752: UserWarning: A worker stopped while some jobs were given to the executor. This can be caused by a too short worker timeout or by a memory leak.
  warnings.warn(
/global/cfs/cdirs/m1800/peishi/.conda/envs/kim/lib/python3.12/site-packages/joblib/externals/loky/backend/fork_exec.py:38: RuntimeWarning: os.fork() was called. os.fork() is incompatible with multithreaded code, and JAX is multithreaded, so this will likely lead to a deadlock.
  pid = os.fork()
100%|██████████| 300/300 [00:02<00:00, 101.13it/s]
100%|██████████| 300/300 [00:04<00:00, 64.54it/s]
100%|██████████| 300/300 [00:03<00:00, 76.30it/s]]
100%|██████████| 300/300 [00:03<00:00, 76.87it/s]]
100%|██████████| 300/300 [00:04<00:00, 73.21it/s]
100%|██████████| 300/300 [00:04<00:00, 68.86it/s]]
100%|██████████| 300/300 [00:04<00:00, 64.24it/s]
100%|██████████| 300/300 [00:04<00:00, 64.74it/s]
100%|██████████| 300/300 [00:04<00:00, 69.36it/s]]
100%|██████████| 300/300 [00:03<00:00, 83.56it/s]]
100%|██████████| 300/300 [00:03<00:00, 85.47it/s] 
100%|██████████| 300/300 [00:03<00:00, 80.06it/s]
100%|██████████| 300/300 [00:04<00:00, 69.11it/s]
100%|██████████| 300/300 [00:04<00:00, 65.33it/s]
100%|██████████| 300/300 [00:04<00:00, 74.02it/s]
100%|██████████| 300/300 [00:03<00:00, 82.84it/s]]
100%|██████████| 300/300 [00:04<00:00, 64.06it/s]]
100%|██████████| 300/300 [00:04<00:00, 68.34it/s]]
100%|██████████| 300/300 [00:04<00:00, 71.84it/s]]
100%|██████████| 300/300 [00:03<00:00, 98.18it/s] 
100%|██████████| 300/300 [00:03<00:00, 92.54it/s] 
100%|██████████| 300/300 [00:03<00:00, 77.45it/s]
100%|██████████| 300/300 [00:04<00:00, 70.41it/s]
100%|██████████| 300/300 [00:04<00:00, 71.39it/s]
100%|██████████| 300/300 [00:03<00:00, 78.43it/s]
100%|██████████| 300/300 [00:04<00:00, 72.47it/s]
100%|██████████| 300/300 [00:04<00:00, 69.34it/s]
100%|██████████| 300/300 [00:04<00:00, 73.39it/s]
100%|██████████| 300/300 [00:04<00:00, 64.80it/s]
100%|██████████| 300/300 [00:04<00:00, 63.37it/s]
100%|██████████| 300/300 [00:04<00:00, 65.92it/s]
100%|██████████| 300/300 [00:03<00:00, 79.65it/s]
Training completes.

 Performing ensemble training in parallel with 100 model configurations...
[Parallel(n_jobs=20)]: Done 100 out of 100 | elapsed:   44.8s finished
[Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers.
100%|██████████| 300/300 [00:03<00:00, 98.24it/s] 
100%|██████████| 300/300 [00:03<00:00, 98.80it/s] 
100%|██████████| 300/300 [00:03<00:00, 98.59it/s] 
100%|██████████| 300/300 [00:03<00:00, 87.73it/s] 
100%|██████████| 300/300 [00:04<00:00, 72.98it/s]
100%|██████████| 300/300 [00:04<00:00, 72.85it/s]
100%|██████████| 300/300 [00:04<00:00, 70.92it/s]
100%|██████████| 300/300 [00:04<00:00, 69.81it/s]
100%|██████████| 300/300 [00:04<00:00, 68.48it/s]
100%|██████████| 300/300 [00:04<00:00, 72.20it/s]
100%|██████████| 300/300 [00:04<00:00, 64.56it/s]
 75%|███████▌  | 226/300 [00:03<00:00, 86.19it/s][Parallel(n_jobs=20)]: Done  10 tasks      | elapsed:    7.1s
100%|██████████| 300/300 [00:04<00:00, 69.45it/s]
100%|██████████| 300/300 [00:04<00:00, 67.90it/s]
100%|██████████| 300/300 [00:04<00:00, 71.22it/s]
100%|██████████| 300/300 [00:04<00:00, 69.56it/s]
100%|██████████| 300/300 [00:04<00:00, 64.15it/s]
100%|██████████| 300/300 [00:03<00:00, 96.95it/s] 
100%|██████████| 300/300 [00:03<00:00, 84.04it/s] 
100%|██████████| 300/300 [00:04<00:00, 67.16it/s]]
100%|██████████| 300/300 [00:03<00:00, 95.57it/s] 
100%|██████████| 300/300 [00:03<00:00, 89.25it/s] 
100%|██████████| 300/300 [00:03<00:00, 87.85it/s] 
100%|██████████| 300/300 [00:03<00:00, 80.52it/s] 
100%|██████████| 300/300 [00:03<00:00, 75.30it/s]
100%|██████████| 300/300 [00:03<00:00, 75.15it/s]
100%|██████████| 300/300 [00:04<00:00, 66.65it/s]]
100%|██████████| 300/300 [00:04<00:00, 65.49it/s]]
100%|██████████| 300/300 [00:04<00:00, 62.78it/s]
100%|██████████| 300/300 [00:03<00:00, 91.58it/s] 
100%|██████████| 300/300 [00:03<00:00, 97.69it/s] 
100%|██████████| 300/300 [00:03<00:00, 94.46it/s] 
100%|██████████| 300/300 [00:03<00:00, 85.18it/s] 
100%|██████████| 300/300 [00:03<00:00, 87.01it/s] 
100%|██████████| 300/300 [00:04<00:00, 67.81it/s]]
100%|██████████| 300/300 [00:02<00:00, 102.61it/s]
100%|██████████| 300/300 [00:03<00:00, 85.03it/s] 
100%|██████████| 300/300 [00:03<00:00, 96.11it/s] 
100%|██████████| 300/300 [00:03<00:00, 90.58it/s] 
100%|██████████| 300/300 [00:04<00:00, 69.87it/s]]
100%|██████████| 300/300 [00:03<00:00, 82.55it/s] 
100%|██████████| 300/300 [00:03<00:00, 82.37it/s] 
100%|██████████| 300/300 [00:04<00:00, 69.34it/s]]
100%|██████████| 300/300 [00:03<00:00, 96.57it/s] 
100%|██████████| 300/300 [00:04<00:00, 69.13it/s]]
100%|██████████| 300/300 [00:04<00:00, 66.64it/s]]
100%|██████████| 300/300 [00:02<00:00, 102.98it/s]
100%|██████████| 300/300 [00:04<00:00, 70.56it/s]
100%|██████████| 300/300 [00:04<00:00, 67.40it/s]]
100%|██████████| 300/300 [00:04<00:00, 73.20it/s]]
100%|██████████| 300/300 [00:04<00:00, 74.84it/s]]
100%|██████████| 300/300 [00:04<00:00, 65.86it/s]]
100%|██████████| 300/300 [00:03<00:00, 75.75it/s]]
100%|██████████| 300/300 [00:04<00:00, 72.55it/s]
100%|██████████| 300/300 [00:03<00:00, 83.82it/s] 
100%|██████████| 300/300 [00:04<00:00, 67.49it/s]]
100%|██████████| 300/300 [00:03<00:00, 82.10it/s] 
100%|██████████| 300/300 [00:03<00:00, 76.09it/s]]
100%|██████████| 300/300 [00:03<00:00, 86.35it/s] 
100%|██████████| 300/300 [00:02<00:00, 103.65it/s]
100%|██████████| 300/300 [00:04<00:00, 65.03it/s]]
100%|██████████| 300/300 [00:04<00:00, 74.79it/s]
100%|██████████| 300/300 [00:02<00:00, 107.47it/s]
100%|██████████| 300/300 [00:02<00:00, 104.79it/s]
100%|██████████| 300/300 [00:03<00:00, 87.06it/s] 
100%|██████████| 300/300 [00:04<00:00, 74.64it/s]]
100%|██████████| 300/300 [00:04<00:00, 70.58it/s]]
100%|██████████| 300/300 [00:04<00:00, 65.39it/s]]
100%|██████████| 300/300 [00:02<00:00, 107.42it/s]
100%|██████████| 300/300 [00:04<00:00, 68.10it/s]]
100%|██████████| 300/300 [00:03<00:00, 85.02it/s] 
100%|██████████| 300/300 [00:04<00:00, 67.22it/s]]
100%|██████████| 300/300 [00:03<00:00, 75.82it/s]]
100%|██████████| 300/300 [00:04<00:00, 66.35it/s]]
100%|██████████| 300/300 [00:04<00:00, 70.62it/s]]
100%|██████████| 300/300 [00:03<00:00, 88.27it/s] 
100%|██████████| 300/300 [00:03<00:00, 82.88it/s]]
100%|██████████| 300/300 [00:04<00:00, 71.92it/s]]
100%|██████████| 300/300 [00:03<00:00, 90.45it/s] 
100%|██████████| 300/300 [00:04<00:00, 69.86it/s]]
100%|██████████| 300/300 [00:03<00:00, 86.32it/s] 
100%|██████████| 300/300 [00:04<00:00, 72.26it/s]]
100%|██████████| 300/300 [00:04<00:00, 68.14it/s]
100%|██████████| 300/300 [00:03<00:00, 88.69it/s] 
100%|██████████| 300/300 [00:04<00:00, 73.42it/s]]
100%|██████████| 300/300 [00:04<00:00, 66.55it/s]]
100%|██████████| 300/300 [00:02<00:00, 102.17it/s]
100%|██████████| 300/300 [00:03<00:00, 86.28it/s] 
100%|██████████| 300/300 [00:04<00:00, 70.07it/s]
100%|██████████| 300/300 [00:02<00:00, 100.22it/s]
100%|██████████| 300/300 [00:03<00:00, 77.64it/s]]
100%|██████████| 300/300 [00:04<00:00, 73.44it/s]
100%|██████████| 300/300 [00:03<00:00, 75.75it/s]
100%|██████████| 300/300 [00:03<00:00, 86.90it/s] 
100%|██████████| 300/300 [00:04<00:00, 74.77it/s]]
100%|██████████| 300/300 [00:04<00:00, 74.33it/s]
100%|██████████| 300/300 [00:03<00:00, 76.31it/s]]
100%|██████████| 300/300 [00:04<00:00, 70.38it/s]
100%|██████████| 300/300 [00:04<00:00, 68.53it/s]]
100%|██████████| 300/300 [00:03<00:00, 88.34it/s] 
 93%|█████████▎| 279/300 [00:03<00:00, 89.78it/s]
Training completes.
100%|██████████| 300/300 [00:04<00:00, 71.18it/s]
[Parallel(n_jobs=20)]: Done 100 out of 100 | elapsed:   47.7s finished

Save all the results to disk#

# Preliminary analysis results
data.save(f_data_save)

# Inverse mapping results
kim1.save(f_kim_save1)
kim2.save(f_kim_save2)
kim3.save(f_kim_save3)