我会说gbm
. 如果您查看该gbm.fit
函数,他们会在将多项数据发送到底层的“gbm”C 函数之前对多项数据进行一系列转换。这些转换在返回结果之前“撤消”,并且不会在gbm.more
函数中再次完成。
一种这样的转换是确保数据中的第一个值与变量n
的每个n
因子水平中的一个相关联。y
解决它以确保您的数据在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)
没有错误。
我建议你向包维护者提交一份错误报告。这个问题似乎特定于“多项式”分布。随意包含此问题的链接。