Question

J'ai récemment commencé à utiliser R pour l'analyse des données. Maintenant, j'ai un problème dans le classement d'un grand ensemble de données de requête (~ 1 Go en mode ASCII, sur 4 Go de RAM de mon ordinateur portable en mode binaire). Utilisant bigmemory::big.matrix pour cet ensemble de données est une belle solution, mais offrant une telle matrice «M» dans le gbm() ou randomForest() Les algorithmes provoquent l'erreur:

cannot coerce class 'structure("big.matrix", package = "bigmemory")' into a data.frame

La classe (M) sortit la folie:

[1] "big.matrix"
attr(,"package")
[1] "bigmemory"

Existe-t-il un moyen de passer correctement un big.matrix Instance dans ces algorithmes?

Était-ce utile?

La solution

Je ne peux évidemment pas tester cela en utilisant les données de votre échelle, mais je peux reproduire vos erreurs en utilisant l'interface de formule de chaque fonction:

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])

N'utilisant pas l'interface de formule pour randomForest est un conseil assez courant pour les grands ensembles de données; Cela peut être assez inefficace. Si vous lisez ?gbm, vous verrez une recommandation similaire vous diriger vers gbm.fit Pour les grandes données également.

Autres conseils

Il est souvent vrai que la mémoire occupée par des objets numériques est plus que l'espace disque. Chaque élément "double" dans un vecteur ou une matrice prend 8 octets. Lorsque vous contraignez un objet à un data.frame, il peut devoir être copié dans RAM. Vous devez éviter d'essayer d'utiliser des fonctions et des structures de données qui sont en dehors de celles prises en charge par la suite BigMemory / Big *** de packages. "Biglm" est disponible, mais je doute que vous puissiez vous attendre à ce que GBM () ou RandomForest () reconnaissent et utilisent les installations de la "grande".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top