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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top