So gruppieren Sie Objekte (ohne Koordinaten)

8

Ich habe eine Liste von undurchsichtigen Objekten. Ich kann nur den Abstand zwischen ihnen berechnen (nicht wahr, nur die Bedingungen für das Problem festlegen):

%Vor%

Ich möchte diese Objekte gruppieren. Ich möchte die Anzahl der Cluster steuern und möchte, dass sich "close" -Objekte im selben Cluster befinden:

%Vor%

Kann jemand einige Clustering-Algorithmen (je einfacher, desto besser!) oder Bibliotheken, die mir helfen können, vorschlagen (und verlinken?)?

Erläuterung Die meisten Clustering-Algorithmen erfordern, dass die Objekte in einem N-dimensionalen Raum angeordnet werden. Dieser Raum wird verwendet, um "Zentroide" von Clustern zu finden. In meinem Fall weiß ich weder, was N ist, noch weiß ich, wie man ein Koordinatensystem aus den Objekten extrahiert. Ich weiß nur, wie weit 2 Objekte entfernt sind. Ich würde gerne einen guten Cluster-Algorithmus finden, der nur diese Informationen verwendet.

Stellen Sie sich vor, Sie gruppieren sich basierend auf dem "Geruch" eines Objekts. Sie wissen nicht, wie Sie auf einer 2D-Ebene "riechen", aber Sie wissen, ob zwei Gerüche ähnlich sind oder nicht.

    
Frank Krueger 28.03.2009, 00:54
quelle

5 Antworten

6

Ich glaube, Sie suchen K-Medoids . Es ist wie K-bedeutet, dass Sie die Anzahl der Cluster, K , im Voraus angeben, aber es ist nicht erforderlich, dass Sie die Objekte, die Sie gruppieren, wie K- bedeutet das.

Stattdessen hat jeder Cluster ein repräsentatives Medoid , das das Mitglied des Clusters ist, das der Mitte am nächsten ist. Man könnte es sich als eine Version von K vorstellen, die "Mediane" statt "Mittel" findet. Alles, was Sie brauchen, ist eine Entfernungsmetrik, um Dinge zusammenzufassen, und ich habe diese in einigen meiner eigenen Arbeiten aus genau den gleichen Gründen verwendet, die Sie angeben.

Naive K-medoids ist nicht der schnellste Algorithmus, aber es gibt schnelle Varianten, die wahrscheinlich gut genug für Ihre Zwecke sind. Hier sind Beschreibungen der Algorithmen und Links zur Dokumentation ihrer Implementierungen in R :

  1. PAM ist die grundlegende O (n ^ 2) -Implementierung von K-Medoiden.
  2. CLARA ist eine viel schnellere, gesampelte Version von PAM. Er funktioniert, indem er zufällig ausgewählte Teilmengen von Objekten mit PAM gruppiert und den gesamten Satz von Objekten basierend auf der Teilmenge gruppiert. Sie sollten trotzdem in der Lage sein, sehr gute Clusterings zu erhalten.

Wenn Sie weitere Informationen benötigen, hier ist ein Papier , das einen Überblick über diese und andere gibt K-Medoids Methoden.

    
tgamblin 04.04.2009, 21:21
quelle
3

Hier ist ein Überblick für einen Clustering-Algorithmus, der nicht die K-means-Anforderung zum Auffinden eines Schwerpunkts hat.

  1. Bestimmen Sie den Abstand zwischen allen Objekten. Zeichne die n meisten separaten Objekte auf.
    [ findet die Wurzeln unserer Cluster, Zeit O (n ^ 2) ]
  2. Weisen Sie jeden dieser n zufälligen Punkte n neuen unterschiedlichen Clustern zu.
  3. Für jedes andere Objekt:
    [ Objekte zu Clustern zuordnen, Zeit O (n ^ 2) ]
    1. Für jeden Cluster:
      1. Berechnen Sie die durchschnittliche Entfernung von einem Cluster zu diesem Objekt, indem Sie den Abstand jedes Objekts im Cluster zum Objekt mitteln.
    2. Weisen Sie das Objekt dem nächsten Cluster zu.

Dieser Algorithmus wird die Objekte sicher gruppieren. Aber seine Laufzeit ist O (n ^ 2) . Außerdem wird es von diesen ersten n Punkten ausgewählt.

Kann jemand dies verbessern (bessere Laufzeitperfektion, weniger abhängig von anfänglichen Entscheidungen)? Ich würde gerne deine Ideen sehen.

    
Frank Krueger 28.03.2009 19:54
quelle
2

Hier ist ein schneller Algorithmus.

%Vor%

Alternativ lesen Sie die Wikipedia-Seite . K-Means-Clustering ist eine gute Wahl:

  

Der K-Means-Algorithmus weist jeden Punkt dem Cluster zu, dessen Zentrum (auch Centroid genannt) am nächsten ist. Das Zentrum ist der Durchschnitt aller Punkte im Cluster - das heißt, seine Koordinaten sind das arithmetische Mittel für jede Dimension getrennt über alle Punkte im Cluster.

     

Die Algorithmusschritte sind:

%Vor%      

Die Hauptvorteile dieses Algorithmus   sind seine Einfachheit und Geschwindigkeit welche   erlaubt es, auf großen Datensätzen zu laufen.   Sein Nachteil ist, dass es nicht so ist   das gleiche Ergebnis mit jedem Lauf erzielen,   da die resultierenden Cluster davon abhängen   die anfänglichen zufälligen Zuordnungen. Es   minimiert die Varianz innerhalb des Clusters, aber   stellt nicht sicher, dass das Ergebnis a hat   globales Minimum der Varianz. Ein weiterer   Nachteil ist die Forderung nach   das Konzept eines Mittelwerts, um definierbar zu sein   was nicht immer der Fall ist. Für solch   Datasets die K-Medoids-Variante ist   angebracht.

    
rmmh 28.03.2009 00:59
quelle
1

Wie wäre es mit diesem Ansatz:

  1. Weisen Sie alle Objekte einem Cluster zu.
  2. Suchen Sie die beiden Objekte a und b , die sich innerhalb desselben Clusters befinden, k und die maximal voneinander entfernt sind. Um es klarzustellen, sollte es ein ein und b für das ganze Set geben, nicht ein ein und b für jedes Cluster.
  3. Teilen Sie den Cluster k in zwei Cluster, k1 und k2 , einen mit Objekt a und einen mit Objekt b .
  4. Fügen Sie für alle anderen Objekte im Cluster k entweder k1 oder k2 hinzu, indem Sie die minimale durchschnittliche Entfernung zu allen anderen Objekten in bestimmen dieser Cluster.
  5. Wiederholen Sie die Schritte 2-5, bis N Cluster gebildet sind.

Ich denke, dass dieser Algorithmus Ihnen ein ziemlich gutes Clustering geben sollte, obwohl die Effizienz ziemlich schlecht sein könnte. Um die Effizienz zu verbessern, können Sie Schritt 3 so ändern, dass Sie den Mindestabstand zu dem ursprünglichen Objekt, das den Cluster gestartet hat, und nicht den durchschnittlichen Abstand zu allen bereits im Cluster vorhandenen Objekten finden.

    
MahlerFive 28.03.2009 21:28
quelle
1

Bei der phylogenetischen DNA-Sequenzanalyse wird regelmäßig hierarchisches Clustering auf Textstrings mit [Ausrichtungs] -Abstandsmatrizen verwendet. Hier ist ein nettes R-Tutorial zum Clustering:

(Verknüpfung: Gehen Sie direkt zum Abschnitt "Hierarchische Agglomeration" ...)

Hier sind einige andere [Sprach-] Bibliotheken:

Dieser Ansatz könnte helfen zu bestimmen, wie viele [k] "natürliche" Cluster es gibt und welche Objekte als Wurzeln für die k-means verwendet werden.

    
bubaker 04.04.2009 20:36
quelle