web-dev-qa-db-fra.com

Regroupement de tableaux de nombres 1D

Duplicata possible:
Cluster les données unidimensionnelles de manière optimale?

Disons que j'ai un tableau comme celui-ci:

[1,1,2,3,10,11,13,67,71]

Existe-t-il un moyen pratique de partitionner le tableau en quelque chose comme ça?

[[1,1,2,3],[10,11,13],[67,71]]

J'ai regardé des questions similaires, mais la plupart des gens ont suggéré d'utiliser k-means pour regrouper les points, comme scipy , ce qui est assez déroutant à utiliser pour un débutant comme moi. Je pense aussi que k-means est plus approprié pour un regroupement bidimensionnel ou plus, non? Existe-t-il des moyens de partitionner un tableau de nombres N en plusieurs partitions/clustering en fonction des nombres?

Certaines personnes suggèrent également un partitionnement de plage rigide, mais il ne rend pas toujours les résultats comme prévu

59
E.H.

N'utilisez pas d'algorithmes de regroupement multidimensionnel pour un problème unidimensionnel. Une seule dimension est beaucoup plus spéciale que vous ne le pensez naïvement, car vous pouvez réellement trier, ce qui rend les choses beaucoup plus faciles.

En fait, ce n'est généralement même pas appelé clustering, mais par ex. segmentation ou optimisation des pauses naturelles.

Vous voudrez peut-être regarder Jenks Natural Breaks Optimization et des méthodes statistiques similaires. Estimation de la densité du noya est également une bonne méthode à examiner, avec un solide bagage statistique. Les minima locaux de densité sont de bons endroits pour diviser les données en grappes, avec des raisons statistiques de le faire. KDE est peut-être la méthode la plus efficace pour regrouper des données unidimensionnelles.

Avec KDE, il devient à nouveau évident que les données unidimensionnelles se comportent beaucoup mieux. Dans 1D, vous avez des minima locaux; mais en 2D, vous pouvez avoir des points de selle et de tels points de division "peut-être". Voir ceci illustration Wikipedia d'un point de selle , comme comment un tel point peut ou non être approprié pour diviser des clusters.

94
Anony-Mousse

Vous pouvez rechercher des algorithmes de discrétisation. Le problème de discrétisation 1D est très similaire à ce que vous demandez. Ils décident des points de coupure, en fonction de la fréquence, de la stratégie de binning, etc.

weka utilise les algorithmes suivants dans son processus de discrétisation.

weka.filters.supervised.attribute.Discretize

utilise la méthode MDL de Fayyad & Irani ou le critère MDL de Kononeko

weka.filters.unsupervised.attribute.Discretize

utilise un binning simple

4
Atilla Ozgur