2016-07-06 6 views
3

Ich habe einen Datensatz aus 54 000 Zeilen und ein paar Spalten (7). Meine Werte sind sowohl numerische als auch alphanumerische (qualitative und quantitative Variablen). Ich möchte Cluster es Funktion hclust in R. mitCluster ein großer Datensatz (quantitative/qualitative Werte)

Lassen Sie uns ein Beispiel:

X <- data.frame(rnorm(54000, sd = 0.3), 
       rnorm(54000, mean = 1, sd = 0.3), 
       sample(LETTERS[1:24], 54000, replace=TRUE), 
       sample(letters[1:10], 54000, replace=TRUE), 
       round(rnorm(54000,mean=25, sd=3)), 
       round(runif(n = 54000,min = 1000,max = 25000)), 
       round(runif(54000,0,200000))) 
colnames(X) <- c("A","B","C","D","E","F","G") 

Wenn ich die hclust Funktion wie folgt verwendet werden:

hclust(dist(X), method = "ward.D") 

ich diese Fehlermeldung:

Error: cannot allocate vector of size 10.9 Gb 

Was ist das Problem? Ich versuche eine 54k * 54k Matrix zu erstellen, die zu groß ist, um von meinem PC berechnet zu werden (4Go RAM). Ich habe gelesen, dass seit R3.0.0 die Software jetzt in 64 Bits ist (in der Lage, mit einer 2.916e + 09 Matrix zu arbeiten, wie in meinem Beispiel), also sind Einschränkungen von meinem Computer. Ich habe es mit hclust in stats/fastcluster/flashClust probiert und bekomme das gleiche Problem.

In diesen Paketen hclust sind so beschrieben:

hclust(d, method="complete", members=NULL) 
flashClust(d, method = "complete", members=NULL) 

d a dissimilarity structure as produced by dist. 

Wir brauchen immer eine dist Matrix diese Funktion funktioniert. Ich habe auch versucht höher die Grenzen meines Computers für R-Sitzung setzen mit dieser:

memory.limit(size = 4014) 
memory.size(max = TRUE) 

Frage:

Ist es möglich, eine hierarchische Clustering zu verwenden (oder eine ähnliche Art und Weise Cluster-Daten) ohne Verwendung dieser dist() Matrix für einen quantitativen/qualitativen Datensatz mit R?

Edit:

über k-means:

Verfahren k-Mittel funktioniert gut für eine große Datenmenge von numerischen Werten zusammengesetzt. In meinem Beispiel habe ich sowohl numerische als auch alphanumerische Werte erhalten. Ich habe versucht, meine qualitativen Variablen in binäre numerische Variablen tranform den Prozess des k-Mittel zu tun:

Ersten Datenrahmen (Beispiel):

Col1  Col2 Col3 
1 12 43.93145 Alpha 
2 45 44.76081 Beta 
3 48 45.09708 Gamma 
4 31 45.42278 Alpha 
5 12 46.53709 Delta 
6 7 39.07841 Beta 
7 78 49.60947 Alpha 

Wenn ich diese in binäre Variablen umwandeln, bekomme ich dies :

Col1  Col2 Alpha Beta Gamma Delta 
1 12 44.29369  1 0  0  0 
2 45 43.90610  0 1  0  0 
3 48 44.82659  0 0  1  0 
4 31 43.09096  1 0  0  0 
5 12 42.71190  0 0  0  1 
6 7 43.71710  0 1  0  0 
7 78 42.24293  1 0  0  0 

Es ist in Ordnung, wenn ich nur ein paar Modalitäten bekam aber in einem realen Datensatz konnten wir über 10.000 Modalitäten für eine 50k Reihen Basis erhalten. Ich glaube nicht, dass k-means die Lösung für diese Art von Problem ist.

+0

ich in diesem Fall die einzige Möglichkeit glauben, AFAIK, zu verwenden ist 'kmeans' entweder direkt oder innerhalb der' FactorMineR :: HCPC' Funktion als beantwortet [hier ] (http://stackoverflow.com/questions/27269555/r-issue-with-hierarchical-clustering-after-a-multiple-correspondence-analysis) – cdeterman

+0

@cedeterman: Danke, ich danke Ihnen für Ihre Hilfe. Ich habe 2 neue Modelle mit k-means ausprobiert, aber es passt nicht gut, um mein Problem zu lösen. –

Antwort

1

Aus Ihrer Frage zu lesen, so scheint es, gibt es zwei Probleme:

1. You have a fairly large amount of observations for clustering 
2. The categorical variables have high cardinality 

Mein Rat:

1) Sie können eine Probe nur nehmen und fastcluster::hclust verwenden oder clara verwenden. Wahrscheinlich nach dem Aussortieren 2) können Sie mehr Beobachtungen verwenden, in jedem Fall ist es möglicherweise in Ordnung, eine Probe zu verwenden. Versuchen Sie eine geschichtete Stichprobe der Kategorien zu nehmen.

2) Sie müssen diese Kategorien im Wesentlichen in einem numerischen Format darstellen, ohne 10000 Spalten mehr zu haben. Sie könnten PCA oder eine Diskrete Version davon verwenden. Ein paar Fragen beschäftigen sich mit diesem Problem: q1, q2

+1

Danke für Ihre Zeit, schätzen Sie es. Ich werde etwas mit Ihrem Rat versuchen, und ich poste meinen Code später als Antwort. –

Verwandte Themen