big.matrix comme data.frame en r
-
25-10-2019 - |
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?
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".