7
votes

Détection de groupe dans les ensembles de données

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

Inspection 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 pas évidemment non plus.

Je cherche un algorithme, cela me permettrait de:

  • Commencez par un ensemble de données de deux dimensions ou plus.
  • détecte de tels groupes de l'ensemble de données sans connaissances préalables sur le nombre (ou le cas échéant) pourraient être là
  • Une fois que les groupes ont été détectés, "Demandez" le modèle des groupes, si un nouveau point d'échantillon semble s'adapter à l'un des groupes

0 commentaires

3 Réponses :



5
votes

Il existe de nombreux 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 du mélange gaussien soit estimée par une probabilité maximale ou des baies.

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

Votre besoin 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'estimation par une méthode bayésienne. Par exemple, voir Cet article sur le mélange gaussien infini Modèles . Le modèle de mélange DP vous donnera une inférence sur le nombre de composants et les composants que chaque élément appartient, ce qui correspond exactement à ce que vous voulez. Sinon, vous pouvez 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 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 se situe sur ce Vue des tâches pour l'analyse de cluster .


0 commentaires

2
votes

Vous avez besoin d'un algorithme de clustering. Tous peuvent être dévidés en 2 groupes:

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

    Si vous voulez un algorithme du 1er type, alors k-moyen est ce dont vous avez vraiment besoin.

    Si vous souhaitez algorithme de 2e type, vous avez probablement besoin d'un algorithme de clustering hiérarchique. Je n'en ai jamais implémenté aucun d'entre eux. Mais je vois un moyen facile d'améliorer k-moyens de telle sorte qu'il sera inutile de spécifier le nombre de clusters.


0 commentaires