J'ai d'énormes données d'entraînement pour la forêt aléatoire (dim: 47600811 * 9). Je veux prendre plusieurs (disons 1000) échantillon bootstrap de dimension 10000 * 9 (en prenant 9000 classes de classes négatives et 1000 classes de données positives dans chaque exécution) et générer itérativement des arbres pour chacun d'entre eux, puis combiner tous ces arbres en 1 forêt. Une idée approximative du code requis est donnée ci-dessous. Quelqu'un peut-il me guider comment puis-je générer un échantillon aléatoire avec remplacement de mes données de train réelles et générer de manière optimale des arbres pour eux de manière itérative? Ce sera une aide précieuse. MerciEntraînement par bootstrap aléatoire et génération de forêt
library(doSNOW)
library(randomForest)
cl <- makeCluster(8)
registerDoSNOW(cl)
for (i=1:1000){
B <- 1000
U <- 9000
dataB <- trainData[sample(which(trainData$class == "B"), B,replace=TRUE),]
dataU <- trainData[sample(which(trainData$class == "U"), U,replace=TRUE),]
subset <- rbind(dataB, dataU)
Je ne suis pas sûr que ce soit la meilleure façon de produire un sous-ensemble encore et encore (1000 fois) de trainData réelle.
rf <- foreach(ntree=rep(125, 8), .packages='randomForest') %dopar% {
randomForest(subset[,-1], subset$class, ntree=ntree)
}
}
crf <- do.call('combine', rf)
print(crf)
stopCluster(cl)
Avez-vous essayé de définir l'argument randomForest sampsize sur une valeur plus petite? Définir sampsize plus petit et ntree plus haut peut être similaire à ce que vous faites. –
@ steve-weston J'essaie de créer un sous-ensemble de données réelles par 'i = répliquer (3, {c (échantillon (qui (trainData $ class ==" B "), 50, remplacer = T), échantillon (qui (trainData $ class == "U"), 50, remplacez = T))}) ', puis appliquez foreach' rf <- foreach (ntree = rep (125, 8), .packages = 'randomForest')% dopar% {randomForest (trainData [i, -1], trainData [i,] classe $, ntree = ntree, sampsize = rep (2,2))} 'et plus tard combinent les arbres par' crf <- do.call ('combine' , rf) '. Ensuite, je reçois seulement 1000 arbres alors que mon 'i 'contient 3 sous-ensembles et pour chaque sous-ensemble je génère 1000 arbres alors je devrais obtenir 3000 arbres. Comment le corriger? – Newbie
Votre programme contient un bogue que je décris et corrige dans ma réponse. –