Question

Supposons un groupe de points de données, comme celui tracé ici (ce graphique n'est pas spécifique à mon problème, mais juste utilisé comme exemple approprié):

Inspectant visuellement le graphique de dispersion, il est assez évident que les points de données forment deux «groupes», avec des points aléatoires qui n'appartiennent évidemment pas non plus.

Je recherche un algorithme, qui me permettrait de:

  • Commencez par un ensemble de données de deux ou plusieurs dimensions.
  • détecter ces groupes à partir de l'ensemble de données sans connaissance préalable sur le nombre (ou le cas échéant)
  • Une fois les groupes détectés, «demandez» le modèle de groupes, si un nouveau point d'échantillonnage semble s'adapter à l'un des groupes
Était-ce utile?

La solution

Il existe de nombreux choix, mais si vous êtes intéressé par la probabilité qu'un nouveau point de données appartient à un mélange particulier, j'utiliserais une approche probabiliste telle que la modélisation du mélange gaussien soit estimée par le maximum de vraisemblance ou Bayes.

Estimation maximale de vraisemblance de Les modèles de mélanges sont implémentés dans Matlab.

Votre exigence selon laquelle le nombre de composants est inconnu rend votre modèle plus complexe. L'approche probabiliste dominante consiste à placer un processus de Dirichlet avant la distribution du mélange et à estimer par une méthode bayésienne. Par exemple, voir Cet article sur des modèles de mélange gaussien infini. Le modèle de mélange DP vous donnera une inférence sur le nombre de composants et les composants auxquels chaque éléments appartiennent, ce qui est exactement ce que vous voulez. Alternativement, vous pouvez effectuer une sélection de modèles sur le nombre de composants, mais cela est généralement moins élégant.

Il existe de nombreuses modèles de modèles de mélange DP, mais ils peuvent ne pas être aussi pratiques. Par exemple, voici un Implémentation MATLAB.

Votre graphique suggère que vous êtes un utilisateur R. Dans ce cas, si vous recherchez des solutions préemballées, la réponse à votre question réside à ce sujet Vue de tâche pour l'analyse des cluster.

Autres conseils

Je pense que vous cherchez quelque chose dans le sens d'un algorithme de clustering k-means.

Vous devriez être en mesure de trouver des implémentations adéquates dans la plupart des langues à usage général.

Vous avez besoin d'un des algorithmes de clustering. Tous peuvent être dévoués en 2 groupes:

  1. Vous spécifiez le nombre de groupes (clusters) - 2 grappes dans votre exemple
  2. Algorithme Essayez de deviner le nombre correct de clusters seul

Si vous voulez un algorithme de 1er type, alors K-means est ce dont vous avez vraiment besoin.

Si vous voulez un algorithme de 2e type, vous avez probablement besoin d'un des algorithmes de clustering hiérarchiques. Je n'en ai jamais mis en œuvre. Mais je vois un moyen facile d'améliorer les k-means de telle manière qu'il ne sera pas nécessaire de spécifier le nombre de clusters.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top