0

Ich habe einen ziemlich großen Datensatz mit rein kategorischen Daten. Anzahl der Datenzeilen (Stichproben) beträgt über 30.000.000. Attribute wurden auf 4 (Spalten) reduziert und alle von ihnen (Attribute) sind kategorisch, wobei einer von ihnen fast 50.000 Level hat!Clara_Medoids mit großem Datensatz von kategorialen Daten mit vielen Ebenen in R

Ich versuche, meine Daten vor der weiteren Verarbeitung zu clustern. Aufgrund der großen Datenmenge ist es jedoch nicht möglich, die meisten Clustering-Algorithmen zu verwenden. Ich habe Clara_Medoids vom ClusterR-Paket verwendet, um das Clustering zu testen. Das Problem, vor dem ich stehe, ist, dass das Ausführen des Codes mir einen Fehler gibt, den ich nicht lösen kann.

Code:

Cmediods_5 <- ClusterR::Clara_Medoids(MyData, clusters = 5, samples = 3, sample_size = 0.0005, distance_metric = "simple_matching_coefficient") 

und das ist der Fehler, den ich erhalten:

Fehler in check_NaN_Inf (Daten): Nicht mit angeforderten Typ kompatibel: [type = Charakter; Ziel = doppelt].

Ich habe das Gefühl, dieser Fehler aufgrund der Tatsache ist, dass ich den „simple_matching_coefficient“ Distanzmetrik bin mit aber ich sehe keine andere praktikable Option, da meine Daten rein kategorische ist. Gibt es sowieso eine Umgehung des Problems mit dem Datentyp, damit dieser Algorithmus ordnungsgemäß funktioniert? Offensichtlich möchte ich keine Dummy-Variablen erstellen, denn wie ich bereits erwähnt habe, hat eines der Attribute ungefähr 50.000 Stufen!

Die Optionen für Clara_Medoids Funktion Abstandsmetriken sind: euklidischen, manhattan, Tschebyscheff, canberra, braycurtis, pearson_correlation, simple_matching_coefficient, Minkowski, Hamming, jaccard_coefficient, Rao_coefficient, Mahalanobis

Leider ist es nicht gower Abstand hat sonst wäre das meine Wahl gewesen.

+0

Zuerst mit einem * Sample * arbeiten und dann vergrößern. Mit Umarmungsdaten zu arbeiten, nur um herauszufinden, was nicht funktioniert, ist Zeitverschwendung. –

Antwort

1

Die Paketvignette (http://mlampros.github.io/2016/09/12/clusterR_package/) hat ein Beispiel dafür.

Verwenden der mushroom Daten von der Vignette als den Faktor Variablen einer Verwendung Ergebnisse in dem gleichen Fehler wie Sie haben:

library(ClusterR) 


cl_f = Clara_Medoids(mushroom[-1], clusters = 2, distance_metric = 'hamming', 
    samples = 5, sample_size = 0.2, swap_phase = TRUE, verbose = F, threads = 1) 

# Error in check_NaN_Inf(data) : 
# Not compatible with requested type: [type=character; target=double]. 

die Vignette schlägt die Hamming-Distanz unter Verwendung (der die Anzahl der Nichtübereinstimmungen zählt Variablen) und die Spalten numerische Umwandlung:

dta <- as.data.frame(lapply(mushroom[-1], as.integer)) 

cl_f = Clara_Medoids(dta, clusters = 2, distance_metric = 'hamming', 
    samples = 5, sample_size = 0.2, swap_phase = TRUE, verbose = F, threads = 1) 

die Vignette gibt auch ein Beispiel des gower Abstand verwenden, aber dies beinhaltet die Distanzmatrix zu berechnen, die wahrscheinlich nicht eine Option, mit der Datenmenge ist.

+0

Danke @Jan van der Laan, das ist hilfreich. Obwohl ich nicht ganz sicher bin, ob die Hamming-Unähnlichkeitsmaßnahme für meine Daten relevant ist, werde ich es versuchen und herausfinden, ob ich die Cluster basierend auf dieser Maßnahme relevant finde. – Ankhnesmerira

+0

Also dachte ich mir, dass ich Hamming-Distanz versucht habe und das Clustering scheint leider nicht relevant zu sein. – Ankhnesmerira

+0

@Ankhnesmerira Das ist schade. Wie Anony-Mousse vorgeschlagen, versuchen Sie z.B. die Entfernung der Schaufel mit einer Probe Ihrer Daten. Ich vermute, das wird nicht viel helfen. Sie haben nur 4 kategorische Variablen. Der Vergleich zweier Datensätze ergibt vier 0/1. Jedes Distanzmaß ist wahrscheinlich nur eine gewichtete Summe der Einsen. –

0

Ich habe nicht genug Ruf sonst hätte ich nur einen Kommentar hinzugefügt.

Meiner Meinung nach hätte die Angabe eines Beispiels Ihrer Daten zur Lösung Ihres Problems beigetragen, ohne Annahmen zu treffen.

Da @ Jan van der Laan erwähnte Ihre Daten müssen vom Typ numerisch sein (erforderlich für die Distanz-Matrix), was nicht der Fall ist, deshalb erhalten Sie den Fehler.

Sie sollten auch wissen, dass die simple_matching_coefficient nur für Binärdaten funktioniert.

Wenn Ihre Daten nur aus kategorialen Variablen bestehen, ist der Hamming-Abstand angemessen. Der Abstand ist gut, wenn die Daten einen gemischten Datentyp haben (numerisch, Faktor usw.). Schauen Sie auch in die gowdis function of the FD package oder in die daisy function of the cluster package.

In der Paketbeschreibung habe ich auch eine link hinzugefügt für den Fall, dass jemand ein Problem auftritt.

Verwandte Themen