This example combines the PSI capabilities with Vertical Decision Tree protocols
to create a model across a subset of records found in three distinct datasets
owned by different organizations for classification and for regression examples.
The model is then used to perform an inference on test datasets distributed
across the data owners.

For classification, the three datasets contain a split of 120 columns of data,
40 in one dataset, 60 in the next, and 20 in the last. All three also contain a
unique identifier column used to join records found in each dataset into a
single logical record.  Finally, a target column is also contained in one of the
datasets.

For regression, the two datasets contain a split of 120 columns of data, 40 in
one dataset, 80 in the last.  Both also contain a unique identifier column used
to join records found in each dataset into a single logical record.  Finally, a
target column is also contained in one of the datasets.

The PSI securely performs the match of the identifiers across each dataset and
will filter the data, then a model is trained on top of this logical data. Under
the hood, this is done via decision trees.

The last step of this example sequence uses the trained model to perform an
inference using test data with a similar spread across the participants in the
training. Finally, the regression result is compared to a model trained
completely locally using Scikit_Learn's
DecisionTreeClassifier/DecisionTreeRegressor.

1a_train_classification.py and 2a_fed_classification_inference.py will
correspond with training a classification model while 1b_train_regression.py
and 2b_fed_regression_inference.py will show usage with regression datasets.
