J'utilise l'algorithme Birch du package scipy-learn Python pour regrouper un ensemble de points dans une petite ville en ensembles de 10.
J'utilise le code suivant:
no = len(list_of_points)/10
brc = Birch(branching_factor=50, n_clusters=no, threshold=0.05,compute_labels=True)
Dans mon idée, je me retrouverais toujours avec des ensembles de 10 points. Dans mon cas maintenant, j'ai 650 points à regrouper et n_clusters est 65.
Mais, mon problème est qu'avec un seuil trop bas, je me retrouve avec 1 adresse par cluster, juste un tout petit seuil plus grand - 40 adresses par cluster.
Qu'est-ce que je fais mal ici?
python
clustering
scipy.spatial
Kaboom
la source
la source
Réponses:
J'ai fait des recherches. J'ai pris quelques points dans deux systèmes de coordonnées non métriques (WGS84) et métriques (Pologne 1992).
J'ai utilisé ce code:
Ensuite, j'adapte notre modèle avec des données métriques:
Et tracez les résultats, où les croix étaient mes points et les cercles étaient mes sous-groupes:
Voici ce que j'ai obtenu:
Vous pouvez voir que cette valeur de seuil était trop petite, car elle a trouvé un sous-cluster en chaque point.
Définition du seuil:
Dans ce cas, nous devons donc augmenter cette valeur.
Pour:
c'était beaucoup mieux:
Et le WGS84 pointe pour le seuil 0,5:
Un seul sous-cluster, pas bon. Mais dans ce cas, nous devrions diminuer la valeur de seuil, donc pour 0,05:
Nous avons de bons résultats.
Conclusion:
CRS est important. Vous devez trouver une valeur de seuil appropriée, dépend de vos systèmes de coordonnées de données et de la distance entre les points. Si vous avez un CRS non métrique, le seuil doit être relativement plus petit qu'avec le système métrique. Il faut savoir la différence entre les mètres et les degrés, si la distance entre deux points est égale à 10000m, elle sera inférieure à 1 degré en WGS84. Vérifiez Google pour des valeurs plus précises.
Il y a également plus de points que la valeur n_clusters. C'est bon, il n'y a pas de centroïdes de clusters, mais des sous-clusters. Si vous essayez de prédire quelque chose ou d'imprimer des étiquettes, il classera votre point dans l'une des zones n_clusters (ou imprimera des points classés en 0,1,2, ..., n_clusters label).
Si vous ne voulez pas essayer différents paramètres, vous pouvez toujours prendre un autre algorithme. L'algorithme très simple et commun pour le clustering est l'algorithme K-means.
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
Il devrait trouver n clusters pour vos données sans se soucier des seuils, etc.
la source