Ich bin neu in der Datenwissenschaft und habe ein Problem beim Finden von Clustern in einem Datensatz mit 200.000 Zeilen und 50 Spalten in R.
Da die Daten sowohl numerische als auch nominale Variablen enthalten, erscheinen Methoden wie K-means, die das euklidische Distanzmaß verwenden, nicht als geeignete Wahl. Ich wende mich also PAM, Agnes und Hclust zu, die eine Distanzmatrix als Eingabe akzeptieren.
Die Daisy-Methode kann mit gemischten Daten arbeiten, aber die Distanzmatrix ist einfach zu groß: 200.000 mal 200.000 ist viel größer als 2 ^ 31-1 (die Vektorlängenbegrenzung vor R 3.0.0.)
Das gestern veröffentlichte neue R 3.0.0 unterstützt lange Vektoren mit einer Länge von mehr als 2 ^ 31-1. Für eine Doppelmatrix von 200.000 mal 200.000 ist jedoch ein kontinuierlicher Arbeitsspeicher von mehr als 16 GB erforderlich, der auf meinem Computer nicht möglich ist.
Ich lese über Parallel-Computing und Big-Memory-Pakete und bin nicht sicher, ob sie helfen werden: Wenn ich Daisy verwende, wird eine große Matrix generiert, die sowieso nicht in den Speicher passt.
Ich habe auch über den Beitrag über Sampling gelesen: Ist Sampling in der Zeit von 'Big Data' relevant?
Ist es in meinem Fall relevant, Stichproben für den Datensatz zu verwenden, die Stichprobe zu einem Cluster zusammenzufassen und dann auf die Struktur des gesamten Datensatzes zu schließen?
Können Sie mir bitte einen Vorschlag machen? Vielen Dank!
Über meine Maschine:
R Version 3.0.0 (2013-04-03)
Plattform: x86_64-w64-mingw32 / x64 (64-Bit)
Betriebssystem: Windows 7 64bit
RAM: 16,0 GB
quelle
Antworten:
Wie Sie bemerkt haben, funktioniert keine Methode, die eine Matrix über die gesamte Distanz erfordert. Der Speicher ist eine Sache, aber die andere ist die Laufzeit. Die typischen Implementierungen von hierarchischem Clustering sind in (ich weiß, dass ELKI SLINK hat, ein O ( n 2 ) -Algorithmus für Single-Link-Clustering). Dies ist für große Datenmengen einfach nicht skalierbar.O(n3) O(n2)
PAM selbst sollte keine vollständige Distanzmatrix erfordern, aber der Algorithmus ist dafür bekannt, dass er schlecht skaliert, da er dann alle paarweisen Abstände in jedem Cluster bei jeder Iteration (neu) berechnen muss, um die zentralsten Elemente zu finden. Dies ist viel weniger, wenn Sie eine große Anzahl von Clustern haben, aber dennoch ziemlich teuer!
Bei den meisten dieser Algorithmen müssen Sie jedoch zuerst sicherstellen, dass Ihre Distanzfunktion wirklich gut ist. Dann müssen Sie überlegen, wie Sie Abfragen mithilfe geeigneter Indizes beschleunigen können.
Beachten Sie auch, dass Sie in vielen Fällen - und dies kann für PAM durchaus zutreffen - den Algorithmus zuerst für ein Beispiel ausführen und dann nur für den gesamten Datensatz verfeinern können. Wenn Ihre Stichprobe repräsentativ ist, sollten Algorithmen wie k-means und PAM im Wesentlichen das gleiche Ergebnis liefern wie der gesamte Datensatz.
quelle
Probieren Sie die CLARA-Funktion aus dem Cluster-Paket in R aus. Sie implementiert einen pam-ähnlichen Algorithmus durch Unterabtastung Ihrer Daten. Es funktioniert besonders gut, wenn die Medioden in Ihren Daten durch eine kleine Stichprobe der Gesamtdaten dargestellt werden können (dh - der Datensatz enthält relativ weniger Cluster). Auf diese Weise können Sie mit einer kleinen Zufallsstichprobe effizient Cluster erstellen und der vorberechneten Clusterlösung Punkte hinzufügen.
http://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/CLARA
quelle
Sie können auch eine Mehrfachkorrespondenzanalyse auf Ihre qualitativen Variablen anwenden und Transformationen in eine numerische Variable durchführen.
quelle