3

我正在尝试在 R 中使用 gbm.more 函数。为了清楚起见,我使用了规范的虹膜数据。当我指定分布=“多项式”时,下面的代码不起作用,但是当我指定分布=“高斯”时,代码起作用。这是有原因的还是只是功能的问题?

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)
4

1 回答 1

1

我会说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)

没有错误。

我建议你向包维护者提交一份错误报告。这个问题似乎特定于“多项式”分布。随意包含此问题的链接。

于 2014-06-16T02:00:33.220 回答