首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R为什么fit$trees的长度总是数据集虹膜的n.trees的3倍

R为什么fit$trees的长度总是数据集虹膜的n.trees的3倍
EN

Stack Overflow用户
提问于 2017-10-11 10:45:36
回答 1查看 67关注 0票数 1

无论我们选择哪种方法('cv', 'OOB' or 'test'),对于数据集iris,拟合的gbm对象中的树的数量始终是3*n.trees

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

如果是这样,并且目标变量有值A,B和C,那么第一棵树是A,第二棵树是B,第三棵树是C,第四棵树是A?

或者,如果n.trees设置为100,则前100棵树用于A,后100棵树用于B,最后100棵树用于C?

代码语言:javascript
复制
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')
EN

回答 1

Stack Overflow用户

发布于 2017-10-11 11:57:15

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

如果您对数据进行过滤以仅获得两个级别的因子,那么您最终将得到2*n.trees。

代码语言:javascript
复制
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中是如何组织的,我无法确定树的顺序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46678966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档