2017-10-11 95 views
1

无论我们选择什么方法('cv', 'OOB' or 'test'),我们选择合适的gbm对象中树的数量始终为3*n.trees数据集irisR gbm为什么fit tree的长度始终是数据集iris的n.trees的3倍

是因为iris数据集有一个3级目标分类变量。

如果是与目标变量具有值A,B和C,为所述第一树,第二树B,第三树C和第四树甲再次?

或者如果n.trees设置为100,则前100棵树用于A,第2 100棵树用于B,最后100棵用于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') 

回答

1

你说得对,树的数量是3倍,因为你试图适合的公式的左边的因子。 R会将其分解为公式左侧的3个独立变量,您将得到3个单独的拟合。

如果您筛选数据以只得到两个层面的因素,你将最终获得2个* n.trees代替。

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) 

至于数据是如何在gbm.object内举办,我无法找出哪些责令树木英寸

+0

我还发现,如果'distribution'被选为'伯努利',那么它只有1 * n.trees,并且响应必须被重新编码为0和1。 – John

相关问题