L'implémentation randomForest ne permet pas l'échantillonnage au-delà du nombre d'observations, même lors d'un échantillonnage avec remplacement. Pourquoi est-ce?
Fonctionne bien:
rf <- randomForest(Species ~ ., iris, sampsize=c(1, 1, 1), replace=TRUE)
rf <- randomForest(Species ~ ., iris, sampsize=3, replace=TRUE)
Ce que je veux faire:
rf <- randomForest(Species ~ ., iris, sampsize=c(51, 1, 1), replace=TRUE)
Error in randomForest.default(m, y, ...) :
sampsize can not be larger than class frequency
Erreur similaire sans échantillon stratifié:
rf <- randomForest(Species ~ ., iris, sampsize=151, replace=TRUE)
Error in randomForest.default(m, y, ...) : sampsize too large
Étant donné que je m'attendais à ce que la méthode prenne des échantillons de bootstrap lorsque replace = TRUE est donné dans les deux cas, je ne m'attendais pas à cette limite.
Mon objectif est de l'utiliser avec l'option d'échantillonnage stratifié, afin de prélever un échantillon suffisamment important dans une classe relativement rare.
Réponses:
Cela ne répond pas pourquoi , mais pour contourner ce problème, on peut dupliquer les données de la classe rare dans les données de formation et prendre un échantillon stratifié du résultat.
Deux inconvénients à cette approche, par rapport à un suréchantillonnage "naturel":
mais cela permettra de construire la forêt avec les ratios de classe désirés.
la source
J'ai exactement la même question et je l'ai trouvée dans le changelog de randomForest :
Changements dans 4.1-0:
La définition manuelle de replace = TRUE ne semble pas non plus l'emporter.
la source
rf <- randomForest(Species ~ ., iris, sampsize=c(51, 1, 1), strata=iris$Species, replace=TRUE)