Big.matrix as Data.frame in r
-
25-10-2019 - |
Frage
Ich habe kürzlich R für die Datenanalyse verwendet. Jetzt habe ich ein Problem bei der Rangliste eines großen Abfrage -Datensatzes (~ 1 GB im ASCII -Modus, über den 4 GB RAM meines Laptops im Binärmodus). Verwendung bigmemory::big.matrix
Für diesen Datensatz ist eine schöne Lösung, aber eine solche Matrix 'm' in der gbm()
oder randomForest()
Algorithmen verursachen den Fehler:
cannot coerce class 'structure("big.matrix", package = "bigmemory")' into a data.frame
Klasse (m) gibt das Listen aus:
[1] "big.matrix"
attr(,"package")
[1] "bigmemory"
Gibt es eine Möglichkeit, a korrekt zu bestehen? big.matrix
Instanz in diese Algorithmen?
Lösung
Ich kann dies offensichtlich nicht mit Daten Ihrer Skala testen, aber ich kann Ihre Fehler mithilfe der Formelschnittstelle jeder Funktion reproduzieren:
require(bigmemory)
m <- matrix(sample(0:1,5000,replace = TRUE),1000,5)
colnames(m) <- paste("V",1:5,sep = "")
bm <- as.big.matrix(m,type = "integer")
require(gbm)
require(randomForest)
#Throws error you describe
rs <- randomForest(V1~.,data = bm)
#Runs without error (with a warning about the response only having two values)
rs <- randomForest(x = bm[,-1],y = bm[,1])
#Throws error you describe
rs <- gbm(V1~.,data = bm)
#Runs without error
rs <- gbm.fit(x = bm[,-1],y = bm[,1])
Verwenden Sie nicht die Formelschnittstelle für randomForest
ist ein ziemlich häufiger Rat für große Datensätze; Es kann ziemlich ineffizient sein. Wenn Sie lesen ?gbm
, Sie werden eine ähnliche Empfehlung sehen, die Sie steuert gbm.fit
für große Daten auch.
Andere Tipps
Es ist häufig der Fall, dass der von numerische Objekte besetzte Speicher mehr als der Speicherplatz ist. Jedes "doppelte" Element in einem Vektor oder einer Matrix erfordert 8 Bytes. Wenn Sie ein Objekt für einen Daten erzwingen. Sie sollten es vermeiden, Funktionen und Datenstrukturen zu verwenden, die außerhalb der von der BigMemory/Big *** -Suite von Paketen unterstützt werden. "Biglm" ist verfügbar, aber ich bezweifle, dass Sie erwarten können, dass GBM () oder Randomforest () die Einrichtungen in der "Big" -Familie erkennen und nutzen.