K-Means Clustering is an algorithm to partition data into k non-overlapping
subgroups (aka clusters) where each data point fits into only one of these
subgroups.  The algorithm attempts to partition so that the data of any single
cluster is as similar as possible.

This example illustrates performing k-means clustering on private datasets owned
by two different parties.  Before the clustering, a private set intersection
(PSI) is performed to select out common records from the two datasets.  During
the process, the actual content of the data is not exposed to the other party.
In the end only the cluster centers (means) are revealed along with an inertia
value which indicates how well the clusters fit the raw data, plus information
allowing the trainer to match their training input with the appropriate cluster
classification.  If data is normalized (the default), then column means and
standard deviations are also output.

The inference step illustrates applying the clustering to new data, categorizing
this data into the appropriate cluster discovered during training.

The last script in this example also illustrates performing this operation in a
centralized, non-private way for comparison.
