4

Vos commentaires, suggestions ou solutions sont/seront grandement appréciés, merci. J'utilise le paquet fpc dans R pour faire une analyse dbscan de données très denses (3 séries de 40 000 points entre -3 et 6).Résultats graphiques de dbscan dans R

J'ai trouvé quelques clusters, et j'ai besoin de représenter graphiquement les plus significatifs. Le problème est que j'ai un seul cluster (le premier) avec environ 39 000 points. J'ai besoin de tracer toutes les autres grappes mais celle-ci.

Le dbscan() crée un type de données spécial dans lequel stocker toutes ces données de cluster. Il n'est pas indexé comme le serait une trame de données (mais peut-être existe-t-il un moyen de le représenter?).

Je peux représenter graphiquement le type dbscan en utilisant un appel de base plot(). Mais, comme je l'ai dit, cela représentera graphiquement les 39 000 points non pertinents.

tl; dr: Comment graver uniquement des clusters spécifiques d'un type de données dbscan?

Répondre

0

Sans connaître les détails de dbscan, je peux vous recommander de regarder la fonction smoothScatter. C'est très utile pour examiner les motifs principaux dans un nuage de points lorsque vous auriez trop de points pour donner un sens aux données.

5

Si vous regardez la page d'aide (?dbscan) il est organisé comme tous les autres dans les sections intitulées Description, Utilisation, Arguments, Détails et Valeur. La section Valeur décrit la fonction renvoyée par la fonction dbscan. Dans ce cas, il s'agit simplement d'une liste (un type de données R standard) avec quelques composants.

Le composant cluster est simplement un vecteur entier dont la longueur est égale au nombre de lignes de vos données qui indique à quel groupe appartient chaque observation. Vous pouvez donc utiliser ce vecteur pour subdiviser vos données afin d'extraire uniquement les grappes que vous souhaitez et ensuite tracer uniquement ces points de données.

Par exemple, si nous utilisons le premier exemple de la page d'aide:

set.seed(665544) 
n <- 600 
x <- cbind(runif(10, 0, 10)+rnorm(n, sd=0.2), runif(10, 0, 10)+rnorm(n, 
    sd=0.2)) 
ds <- dbscan(x, 0.2) 

nous pouvons utiliser le résultat, ds à tracer uniquement les points en grappes 1-3:

#Plot only clusters 1, 2 and 3 
plot(x[ds$cluster %in% 1:3,]) 
+0

Cela m'a aidé, merci. – droops

+0

@droops - Content de l'entendre! Si cela résout vraiment votre problème, pensez à cliquer sur la coche à côté de celui-ci. Cela aidera les personnes qui trouveront cette question à l'avenir à savoir que cette réponse était utile et ajoute généralement à la valeur de StackOverflow. – joran

0

La manière probablement la plus sensée de tracer les résultats DBSCAN consiste à utiliser des formes alpha, avec le rayon défini sur la valeur epsilon. Les formes alpha sont étroitement liées aux coques convexes, mais elles ne sont pas nécessairement convexes. Le rayon alpha contrôle la quantité de non-convexité autorisée.

Ceci est assez étroitement lié au modèle de cluster DBSCAN d'objets connectés de densité, et en tant que tel vous donnera une interprétation utile de l'ensemble.

Comme je n'utilise pas R, je ne connais pas les capacités de forme alpha de R. Il est censé être un paquet appelé alphahull, à partir d'un contrôle rapide sur Google.

Questions connexes