J'utilise gc()
pour libérer de la RAM entre les opérations. Voici un exemple de comment je l'utilise dans une boucle, mais consultez ici pour une discussion plus détaillée sur gc()
et ici pour plus d'informations sur la gestion de la mémoire pendant une session R.
# charger la bibliothèque
library(topicmodels)
# obtenir des données
data("AssociatedPress")
# définir le nombre de sujets pour commencer
k <- 20
# définir les options du modèle
control_LDA_VEM <-
list(estimate.alpha = TRUE, alpha = 50/k, estimate.beta = TRUE,
verbose = 0, prefix = tempfile(), save = 0, keep = 0,
seed = as.integer(100), nstart = 1, best = TRUE,
var = list(iter.max = 10, tol = 10^-6),
em = list(iter.max = 10, tol = 10^-4),
initialize = "random")
# créer la séquence qui stocke le nombre de sujets à
# itérer
sequ <- seq(20, 300, by = 20)
# boucle de base pour itérer sur différents nombres de sujets avec gc
# après chaque exécution pour vider la RAM
lda <- vector(mode='list', length = length(sequ))
for(k in sequ) {
lda[[k]] <- LDA(AssociatedPress[1:20,], k, method= "VEM", control = control_LDA_VEM)
gc() # c'est ici que je mets la collecte des déchets pour libérer la mémoire avant le prochain tour de la boucle
}
# convertir la sortie de la liste en dataframe (des suggestions pour une méthode plus simple sont les bienvenues !)
best.model.logLik <- data.frame(logLik = as.matrix(lapply(lda[sequ], logLik)), ntopic = sequ)
# tracé
with(best.model.logLik, plot(ntopic, logLik, type = 'l', xlab="Nombre de sujets", ylab="Log-vraisemblance"))
# imprimer le dataframe ordonné pour voir quel nombre de sujets a la log-vraisemblance la plus élevée
(best.model.logLik.sort <- best.model.logLik[order(-as.numeric(best.model.logLik$logLik)), ])
logLik ntopic
2 -17904.12 40
3 -18105.48 60
1 -18181.84 20
4 -18569.7 80
5 -19736.94 100
6 -21919.6 120
7 -23785.08 140
8 -24914.23 160
9 -25493.76 180
10 -25837.64 200
11 -25964.23 220
12 -26061.01 240
13 -26117.92 260
14 -26149.44 280
15 -26168.91 300