shantanu pathak
shantanu pathak

Reputation: 2167

how we can assign labels to data using self organizing map clustering? (minisom package) python

I am using minisom package for doing som clustering.

After train_batch() how can i use trained model to assign cluster number to data points?

Upvotes: 1

Views: 1470

Answers (2)

Hakun
Hakun

Reputation: 503

I labeled my clusters as this: SOM Cluster is cluster=(0,0) So i did cluster[0]*10 + cluster[1] and got my labels

Edit - Code Example

I've used this function that i found here: https://www.kaggle.com/code/izzettunc/introduction-to-time-series-clustering/notebook

They select the cluster from SOM as cluster = (x,y)

You can see cluster_number = xsom_y+y+1 I got the same result by doing cluster_number = x10 + y

def plot_som_series_dba_center(som_x, som_y, win_map):
    fig, axs = plt.subplots(som_x,som_y,figsize=(25,25))
    fig.suptitle('Clusters')
    for x in range(som_x):
        for y in range(som_y):
            cluster = (x,y)
            if cluster in win_map.keys():
                for series in win_map[cluster]:
                    axs[cluster].plot(series,c="gray",alpha=0.5) 
                axs[cluster].plot(dtw_barycenter_averaging(np.vstack(win_map[cluster])),c="red") # I changed this part
            cluster_number = x*som_y+y+1
            axs[cluster].set_title(f"Cluster {cluster_number}")

    plt.show()

Upvotes: 0

felice
felice

Reputation: 1363

I can provide you the code for the SUSI package which also includes an unsupervised SOM for clustering and visualization. You can install it with pip3 install susi. Here is a code example (you find more in the examples of the repository):

import susi

# TODO get your data X here
X = ...

# train your SOM
som = susi.SOMClustering()
som.fit(X)

# get clusters
clusters = som.get_clusters(X)

# get u-matrix
u_matrix = som.get_u_matrix()

Upvotes: 0

Related Questions