2017-05-23 1 views
0

J'essaie d'écrire un algorithme pour la mise en cluster, maintenant j'aime créer des cas de test 2D simples: J'aime générer des points dans [0, 1]x[0, 1] qui construisent des clusters.Python: Générer des points 2D/clusters

E.g. quelque chose comme ceci: enter image description here

Il serait préférable que les groupes aient des formes différentes (mais aléatoires), par ex. comme: enter image description here

Existe-t-il un moyen facile de faire cela avec python/numpy? Malheureusement, la génération doit être très efficace. J'ai écrit du code, mais les clusters ont toujours la même forme et ils sont souvent éloignés les uns des autres. Probablement déjà un bel algorithme existe?

Merci

+0

La génération "très efficace" est discutable. Vous pouvez créer des polygones aléatoires et générer des points uniquement à l'intérieur. Vous obtiendriez des grappes de forme aléatoire mais cela impliquerait des opérations plus lourdes que la simple génération de quelques nombres basés sur une distribution. Est-ce que c'est acceptable? – armatita

Répondre

1

Non, il n'y a pas un moyen emballé pour le faire. Cependant, les algorithmes de génération ne sont pas si difficiles à écrire. Le premier semble être une distribution gaussienne dans chaque dimension (X et Y), répétant la génération pour chacun des trois centroïdes. Alternativement, c'est peut-être une direction uniforme, avec une distance de «fonction de décroissance». La seconde est une paire d'ensembles: choisissez le rayon d'un gaussien avec une petite variance, alors que la direction est uniforme sur le cercle complet. Faites-le pour le rayon moyen 1 et le rayon moyen 3.

Est-ce que cela vous aide à bouger?

+0

Ça aide, merci :)! Mais le deuxième exemple devrait être plus général, les groupes devraient avoir des formes (pas seulement des cercles). Mais je pense que cela ne peut pas être facilement fait? –

+1

Non - il n'y a pas d'algorithme * pour "toutes les formes". Généraliser cela juste un peu: "Quelqu'un peut-il me donner l'algorithme pour me donner la sortie que je veux? Encore mieux, y at-il un paquet Python pour le faire?" La théorie de l'information prouve que cela est impossible en très peu d'étapes. :-) – Prune

+0

ok, merci;) probablement j'aurais dû remplacer "toute forme" par "autant de formes que possible avec un algorithme complexe minimal";) mais il semble que les clusters gaussiens simples produisent déjà des données de test raisonnables :) merci:)! –