我尝试在R中使用gbm.more函数,为了清晰起见,我使用了规范的虹膜数据。当我指定高斯“distribution=”时,下面的代码不工作,但当我指定高斯“distribution=”时,代码可以工作。这是有原因的,还是仅仅是函数的问题?
data(iris)
iris.mod=gbm(Species ~ ., distribution="multinomial", data=iris,
n.trees=200, shrinkage=0.01, verbose=FALSE, n.cores=1)
iris.mod1=gbm.more(iris.mod,100,verbose=FALSE)发布于 2014-06-16 10:00:33
我想说的是gbm中有一个bug。如果您查看gbm.fit函数,在将多项式数据发送到底层的"gbm“C函数之前,它们会对多项式数据执行一系列转换。这些转换在返回结果之前被“撤消”,并且不会在gbm.more函数中再次执行。
一种这样的转换是确保数据中的第一个n值与您的y变量的每个n因子级别之一相关联。一种解决方法是确保您的数据在调用gbm之前是正确的格式。下面是我们如何转换虹膜数据的方法。
first.row <- tapply(1:nrow(miris), iris$Species, head,1)
miris <- rbind(miris[first.row,], miris[-first.row,])我们看到,前三行对于数据中的每个不同物种都有一个值
#head(miris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
51 7.0 3.2 4.7 1.4 versicolor
101 6.3 3.3 6.0 2.5 virginica
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa然后,您可以将数据与
iris.mod=gbm(Species ~ ., distribution="multinomial", data=miris,
n.trees=200, shrinkage=0.01, verbose=FALSE, n.cores=1)然后运行
iris.mod1=gbm.more(iris.mod,100,verbose=FALSE)没有错误。
我建议你向包的维护者提交一份错误报告。这个问题似乎是“多项式”分布特有的。请随时添加此问题的链接。
https://stackoverflow.com/questions/24233865
复制相似问题