2010-01-12 6 views
7

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

Inspection le graphique de dispersion visuellement, il est assez évident que les points de données forment deux «groupes», avec des points aléatoires qui n'appartiennent évidemment pas à l'un ou l'autre.

Je suis à la recherche d'un algorithme, qui me permettrait de:

  • départ avec un ensemble de données de deux dimensions ou plus.
  • détecter de tels groupes de l'ensemble de données sans connaissance préalable sur le nombre (ou le cas échéant) est peut-être une fois ont été détectés les groupes, il
  • , « demander » le modèle des groupes, si un nouveau point d'échantillonnage semble correspondre à l'un des groupes

Répondre

5

Il y a beaucoup de choix, mais si vous êtes intéressé par la probabilité qu'un nouveau point de données appartienne à un mélange particulier, j'utiliserais une approche probabiliste telle que la modélisation de mélange gaussienne estimée par maximum de vraisemblance ou Bayes.

Estimation du maximum de vraisemblance de mixtures models is implemented in Matlab.

Votre exigence que 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 à l'estimer par une méthode bayésienne. Par exemple, voir this paper on infinite Gaussian mixture models. Le modèle de mélange DP vous donnera une inférence sur le nombre de composants et les composants de chaque élément, ce qui est exactement ce que vous voulez. Vous pouvez également effectuer une sélection de modèle sur le nombre de composants, mais cela est généralement moins élégant.

Il existe de nombreuses implémentations de modèles de modèles de mélange DP, mais elles peuvent ne pas être aussi pratiques. Par exemple, voici un Matlab implementation.

Votre graphique suggère que vous êtes un utilisateur de R. Dans ce cas, si vous cherchez des solutions préemballées, la réponse à votre question se trouve sur ce Task View for cluster analysis.

3

Je pense que vous cherchez quelque chose le long d'un k-means clustering algorithm.

Vous devriez pouvoir trouver des implémentations adéquates dans la plupart des langues générales.

2

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

  1. vous spécifiez nombre de groupes (clusters) - 2 clusters dans votre exemple
  2. algorithme tentent de deviner le nombre correct de clusters par lui-même

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

Si vous voulez un algorithme de 2ème type, vous avez probablement besoin d'un algorithme de clustering hiérarchique. Je n'ai jamais mis en œuvre aucun d'entre eux. Mais je vois un moyen facile d'améliorer K-means de telle sorte qu'il ne sera pas nécessaire de spécifier le nombre de clusters.

Questions connexes