2017-10-11 6 views
1

Quelle que soit la méthode ('cv', 'OOB' or 'test') nous choisissons, le nombre d'arbres dans l'objet GBM équipé est toujours 3*n.trees pour jeu de données iris . Est-ce parce que l'ensemble de données iris a une variable catégorielle cible avec 3 niveaux. Si oui et que la variable cible a les valeurs A, B et C, est le premier arbre pour A, le deuxième arbre pour B, le troisième arbre pour C et le quatrième arbre pour A à nouveau?

Si le n.trees est défini sur 100, les 100 premiers arbres sont pour A, les 100 premiers arbres pour B et les 100 derniers pour C?

fit = gbm(data=iris, Species ~., shrinkage = 0.2, n.trees = 50, cv.folds = 2) 

best.iter = gbm.perf(fit, method = 'cv') 

fit = gbm(data=iris, Species ~., shrinkage = 0.2, n.trees = 40, train.fraction = 0.8) 

best.iter = gbm.perf(fit, method = 'test') 

fit = gbm(data=iris, Species ~., shrinkage = 0.2, n.trees = 50) 

best.iter = gbm.perf(fit, method = 'OOB') 

Répondre

1

Vous avez raison que le nombre d'arbres est 3 fois à cause du facteur sur le côté gauche de la formule que vous essayez d'adapter. R divisera cela en 3 variables distinctes sur le côté gauche de votre formule et vous obtiendrez 3 ajustements séparés.

Si vous filtrez les données pour n'obtenir que deux niveaux du facteur, vous finirez avec 2 * n.trees à la place.

library(gbm) 
iris.sub <- iris[iris$Species != "setosa", ] 
iris.sub$Species <- factor(as.character(iris.sub$Species)) 
levels(iris.sub$Species) 
fit = gbm(data=iris.sub, Species ~., shrinkage = 0.2, n.trees = 50, cv.folds = 2, distribution = "multinomial") 
length(fit$trees) 

En ce qui concerne la façon dont les données sont organisées dans le gbm.object, je ne pouvais pas comprendre quel ordre les arbres sont.

+0

J'ai aussi trouvé que si le 'distribution' est choisi comme' Bernoulli ', alors ce n'est que 1 * n.trees et la réponse doit être recodée à 0s et 1s. – John