4

J'utilise sklearn DBSCAN pour regrouper mes données comme suit.Récupère la taille du cluster dans sklearn en python

#Apply DBSCAN (sims == my data as list of lists) 
db1 = DBSCAN(min_samples=1, metric='precomputed').fit(sims) 

db1_labels = db1.labels_ 
db1n_clusters_ = len(set(db1_labels)) - (1 if -1 in db1_labels else 0) 
#Returns the number of clusters (E.g., 10 clusters) 
print('Estimated number of clusters: %d' % db1n_clusters_) 

Maintenant, je veux obtenir le top 3 des grappes triées de la taille (nombre de points de données dans chaque groupe). S'il vous plaît laissez-moi savoir comment obtenir la taille de la grappe dans sklearn?

+1

Qu'est-ce 'db1n_clusters_', sinon le nombre de grappes? –

+0

Je veux obtenir la taille (nombre de données) de chaque cluster :) Par exemple, disons que j'obtiens 10 clusters. Je veux obtenir les trois groupes, ce qui comprend le plus grand nombre de données. –

+1

Pouvez-vous s'il vous plaît faire clair dans votre question (ce n'est pas ...) –

Répondre

0

Une autre option serait d'utiliser numpy.unique:

db1_labels = db1.labels_ 
labels, counts = np.unique(db1_labels[db1_labels>=0], return_counts=True) 
print labels[np.argsort(-counts)[:3]] 
2

Eh bien, vous pouvez Bincount Function in Numpy pour obtenir les fréquences des étiquettes. Par exemple, nous utiliserons le example for DBSCAN en utilisant scikit-learn:

#Store the labels 
labels = db.labels_ 

#Then get the frequency count of the non-negative labels 
counts = np.bincount(labels[labels>=0]) 

print counts 
#Output : [243 244 245] 

ensuite pour obtenir les 3 premières valeurs utilisent argsort in numpy. Dans notre exemple, car il n'y a que trois groupes, je vais extraire les 2 premières valeurs:

top_labels = np.argsort(-counts)[:2] 

print top_labels 
#Output : [2 1] 

#To get their respective frequencies 
print counts[top_labels] 
+0

Merci pour votre réponse très utile. S'il vous plaît laissez-moi savoir comment obtenir les étiquettes de cluster des clusters 245 et 244? –

+1

'La variable top_label contiendra les étiquettes des clusters 245 et 244 respectivement dans cet ordre. Aussi, si vous avez trouvé ma réponse utile, pouvez-vous s'il vous plaît la marquer comme la bonne :-) –