big.matrix come data.frame in r
-
25-10-2019 - |
Domanda
Di recente ho iniziato a utilizzare R per l'analisi dei dati. Ora ho un problema nella classificazione di un grande set di dati di query (~ 1 GB in modalità ASCII, sopra la RAM da 4 GB del mio laptop in modalità binaria). Usando bigmemory::big.matrix
Per questo set di dati è una buona soluzione, ma fornire una tale matrice m "in gbm()
o randomForest()
Gli algoritmi causano l'errore:
cannot coerce class 'structure("big.matrix", package = "bigmemory")' into a data.frame
Classe (M) emette il molo:
[1] "big.matrix"
attr(,"package")
[1] "bigmemory"
C'è un modo per passare correttamente a big.matrix
istanza in questi algoritmi?
Soluzione
Ovviamente non riesco a testare questo usando i dati della tua scala, ma posso riprodurre i tuoi errori usando l'interfaccia formula di ciascuna funzione:
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])
Non usando l'interfaccia formula per randomForest
è consulenza abbastanza comune per set di dati di grandi dimensioni; Può essere abbastanza inefficiente. Se leggi ?gbm
, vedrai una raccomandazione simile che ti guida gbm.fit
Anche per dati di grandi dimensioni.
Altri suggerimenti
Spesso è il caso che la memoria occupata da oggetti numerici sia più dello spazio su disco. Ogni elemento "doppio" in un vettore o in una matrice prende 8 byte. Quando si fonde un oggetto a un data.rame, potrebbe essere necessario copiare in RAM. Dovresti evitare di provare a utilizzare funzioni e strutture di dati al di fuori di quelle supportate dalla suite di pacchetti BigMemory/Big ***. "Biglm" è disponibile, ma dubito che puoi aspettarti GBM () o RandomForest () di riconoscere e utilizzare le strutture nella famiglie "Big".