Additional methods

Note

You can try this notebook in you browser: Binder

This notebooks provides an overview of built-in clustering performance evaluation, ways of accessing individual labels resulting from clustering and saving the object to disk.

Clustering performance evaluation

Clustergam includes handy wrappers around a selection of clustering performance metrics offered by scikit-learn. Data which were originally computed on GPU are converted to numpy on the fly.

Let’s load the data and fit clustergram on Palmer penguins dataset. See the Introduction for its overview.

import seaborn
from sklearn.preprocessing import scale
from clustergram import Clustergram

seaborn.set(style='whitegrid')

df = seaborn.load_dataset('penguins')
data = scale(df.drop(columns=['species', 'island', 'sex']).dropna())

cgram = Clustergram(range(1, 12), verbose=False)
cgram.fit(data)

Silhouette score

Compute the mean Silhouette Coefficient of all samples. See scikit-learn documentation for details.

cgram.silhouette_score()
2     0.531540
3     0.447219
4     0.399584
5     0.377720
6     0.368589
7     0.330913
8     0.290388
9     0.285650
10    0.284786
11    0.265383
Name: silhouette_score, dtype: float64

Once computed, resulting Series is available as cgram.silhouette. Calling the original method will recompute the score.

cgram.silhouette.plot()
<AxesSubplot:>
../_images/evaluation_5_1.png

Calinski and Harabasz score

Compute the Calinski and Harabasz score, also known as the Variance Ratio Criterion. See scikit-learn documentation for details.

cgram.calinski_harabasz_score()
2     482.191469
3     441.677075
4     400.410025
5     411.175066
6     382.553039
7     352.552704
8     332.879565
9     315.534247
10    300.278857
11    282.289653
Name: calinski_harabasz_score, dtype: float64

Once computed, resulting Series is available as cgram.calinski_harabasz. Calling the original method will recompute the score.

cgram.calinski_harabasz.plot()
<AxesSubplot:>
../_images/evaluation_9_1.png

Davies-Bouldin score

Compute the Davies-Bouldin score. See scikit-learn documentation for details.

cgram.davies_bouldin_score()
2     0.714064
3     0.943553
4     0.944215
5     0.973248
6     0.994136
7     1.074578
8     1.152467
9     1.239884
10    1.212467
11    1.246688
Name: davies_bouldin_score, dtype: float64

Once computed, resulting Series is available as cgram.davies_bouldin. Calling the original method will recompute the score.

cgram.davies_bouldin.plot()
<AxesSubplot:>
../_images/evaluation_13_1.png

Acessing labels

Clustergram stores resulting labels for each of the tested options, which can be accessed as:

cgram.labels
1 2 3 4 5 6 7 8 9 10 11
0 0 1 2 1 0 1 1 1 8 7 9
1 0 1 2 1 0 1 1 6 8 9 8
2 0 1 2 1 0 1 1 6 5 9 8
3 0 1 2 1 0 1 1 1 0 7 9
4 0 1 2 1 2 5 4 1 0 6 7
... ... ... ... ... ... ... ... ... ... ... ...
337 0 0 1 3 1 0 3 5 6 5 6
338 0 0 1 3 1 0 3 5 6 5 6
339 0 0 1 0 4 3 0 4 4 3 10
340 0 0 1 3 1 0 5 0 1 0 1
341 0 0 1 0 4 3 5 0 1 0 10

342 rows × 11 columns

Saving clustergram

If you want to save your computed clustergram.Clustergram object to a disk, you can use pickle library:

import pickle

with open('clustergram.pickle','wb') as f:
    pickle.dump(cgram, f)
with open('clustergram.pickle','rb') as f:
    loaded = pickle.load(f)