Voici mon scénario. Considérons un ensemble d'événements qui se produisent à différents endroits et heures - à titre d'exemple, considérer une personne au-dessus de l'enregistrement des coups de foudre dans une ville au cours d'une tempête. Pour mon but, sont instantanés et des éclairs ne peuvent frapper certains endroits (comme les immeubles de grande hauteur). Imaginez également chaque coup de foudre a un identifiant unique, donc on peut faire référence à la grève plus tard. Il y a environ 100 000 de ces endroits dans cette ville (comme vous le devinez, c'est une analogie que mon employeur actuel est sensible au sujet du problème réel). P>
Pour la phase 1, mon entrée est l'ensemble de (id grève, le temps de grève, le lieu de grève) tuples. La sortie désirée est l'ensemble des grappes de cas supérieur à 1 qui a frappé le même emplacement dans un court laps de temps. Le nombre de grappes ne sait pas à l'avance (si k-means est pas utile ici). Ce qui est considéré comme « court » pourrait être prédéfinie pour une tentative de regroupement donné. C'est, je peux le mettre, disons, 3 minutes, que l'algorithme exécuter; essayez plus tard avec 4 minutes ou 10 minutes. Peut-être une touche agréable serait pour l'algorithme pour déterminer une « force » du regroupement et recommande que soit obtenu une entrée donnée, le plus regroupement compact en utilisant une valeur particulière pour « court », mais ce n'est pas nécessaire au départ. p>
Pour la phase 2, je voudrais prendre en considération l'amplitude de la grève (à savoir un nombre réel) et rechercher des clusters qui sont à la fois dans un court laps de temps et avec des amplitudes similaires. P>
Je googlé et vérifié les réponses ici sur le clustering de données. L'information est un ahurissant de bits (ci-dessous la liste des liens que je trouvais utile). Autant que je sache, k-means et algorithmes associés ne serait pas utile, car ils nécessitent le nombre de grappes à préciser apriori. Je ne demande pas quelqu'un pour résoudre mon problème (je aime résoudre), mais une certaine orientation dans le grand monde des algorithmes de clustering données seraient utiles pour gagner du temps. Plus précisément, quels algorithmes sont appropriés pour le regroupement lorsque le nombre de clusters est inconnu. P>
Edit: j'ai réalisé l'emplacement est hors de propos, en ce sens que, même si les événements se produisent tout le temps, je ne dois les regrouper par emplacement i>. Donc, chaque endroit a sa propre série chronologique d'événements qui peuvent ainsi être analysés indépendamment. P>
Quelques détails techniques:
- comme l'ensemble de données est pas grande, il peut convenir à tous en mémoire
.
- le traitement parallèle est agréable d'avoir, mais pas indispensable. J'ai seulement une machine 4-core et MapReduce et Hadoop serait trop.
- la langue que je suis familier avec la plupart du temps est Java. Je ne l'ai pas encore utilisé R et la courbe d'apprentissage pour ce serait probablement trop pour quelle heure on m'a donné. Je vais jeter un coup d'oeil de toute façon dans mon temps libre.
- pour l'instant, l'utilisation d'outils pour exécuter l'analyse est ok, je n'ai pas à produire du code juste. Je mentionne cela parce que probablement Weka sera proposée.
- visualisation serait utile. Comme l'ensemble de données est assez grand pour qu'il ne rentre pas dans la mémoire, la visualisation doit supporter au moins zoom et de panoramique. Et de préciser: Je ne ai pas besoin de construire une interface graphique de visualisation, il est juste une capacité de agréable à utiliser pour vérifier les résultats obtenus avec un outil. P>
Merci. Les questions que je trouve utiles sont: Comment trouver le centre de clusters de nombres? problème statistique , Clustering Algorithm for Boys papier , Java Clustering Library , Comment les objets cluster (sans coordonnées) , Algorithm pour détecter des "grappes" de points p>
3 Réponses :
Je vous suggérerais de regarder Majeur moyenne Regroupement . L'idée de base derrière le clustering MAND SHIFT consiste à prendre les données et à effectuer un estimation de la densité de noyau , puis Trouvez les modes de l'estimation de la densité, les régions de convergence des points de données vers des modes définissent les grappes. P>
La bonne chose à propos de la regroupement des changements moyen est que le nombre de clusters ne doit pas être spécifié à l'avance. P>
Je n'ai pas utilisé Weka, alors je ne suis donc pas sûr s'il a une cluster de changement de vitesse. Toutefois, si vous utilisez MATLAB, voici une boîte à outils ( Boîte à outils KDE A >) Pour le faire. Espère que cela aide. P>
Merci, je vais lire ces papiers et penserai. Je prévoyais d'utiliser Matlab initialement, mais rien n'empêche d'essayer d'essayer d'octave.
ne pouvez-vous pas simplement utiliser clustering hiérarchique avec la différence de fois des grèves dans la mesure où de la mesure de distance? P>
C'est une excellente suggestion et semble beaucoup être la réponse. De ce que j'ai lu dans quelques minutes, la variante monocollante de cet algorithme est la mieux adaptée. Il y a une tonne d'informations sur cet algorithme (j'ai trouvé un Lecture vidéo aussi) donc je vais lire et être de retour demain. Merci!
Il est trop tard, mais je l'ajouterais toujours: p>
in r, il existe un package FPC code> et il a une méthode
pamk () code> qui vous fournit les clusters. Utilisation de
PAMK () CODE>, vous n'avez pas besoin de mentionner le nombre de grappes inticulalement. Il calcule le nombre de grappes dans les données d'entrée. P>
Juste pour être certain: le paramètre de clustering est-il la taille du voisinage contenant les points (par opposition à la distance maximale entre points de données)? Un point de données peut-il être membre de plusieurs clusters? Par exemple, avec un paramètre de cluster de 3 minutes, si la foudre a frappé l'Empire State trois fois, avec deux minutes entre les grèves, quelles sont les grappes?
Le paramètre de clustering est la distance maximale entre les événements adjacents. Combien d'entre eux se produisent dans un cluster dépend; En fait, l'objectif principal de cette analyse est d'identifier quels événements sont ceux qui se sont déroulés ensemble (dans l'affaire du monde réel, les grèves qui étaient plus proches que les autres doivent être analysées davantage). Un point de données ne peut faire partie que 1 cluster (flou floue n'est pas applicable). Avec la précision ci-dessus, un paramètre de cluster est la distance maximale entre les points adjacents, une valeur de 3 minutes met toutes ces frappes dans 1 cluster.
Après plus de googling, j'ai découvert (Rapidminer) [ RapidMiner.com] qui a un certain nombre d'algorithmes de regroupement (Pour les curieux, ils sont: k-moyens, k-moyens k-moyens (noyau), k-mech -des, dbscan, augmentation de la grappe de maximisation, clustering de vecteur de support, clustering aléatoire, clustering agglomératif, clustering de haut en bas, clustering aplusée, prototypes de grappes d'extraction) De plus, plusieurs autres ont soutenu via le plugin Weka (Weka: W-Cope, W-COBWeb, W-EM, W-FarthestFirst, W-hierarchicalClusterner, W-SimpleKMEANS, W-XMEANS, W-SIB). Je ne suis pas familier avec la plupart aussi besoin de prendre un café et d'apprendre.