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?

È stato utile?

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".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top