R gbm.more()函数不适用于所有发行版?

时间:2014-06-15 20:33:26

标签: r gbm

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

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)

1 个答案:

答案 0 :(得分: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)

没有错误。

我建议您使用软件包维护者提交错误报告。这个问题似乎特定于&#34; multinomial&#34;分配。请随意添加此问题的链接。