3

R で gbm.more 関数を使用しようとしています。わかりやすくするために、正規の虹彩データを使用しました。distribution="multinomial" を指定すると、以下のコードは機能しませんが、 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)
4

1 に答える 1

1

にバグがあると言えgbmます。関数を調べてみるとgbm.fit、多項式データを基になる "gbm" C 関数に送信する前に、一連の変換を行っています。これらの変換は、結果が返される前に「元に戻され」、gbm.more関数で再度実行されることはありません。

このような変換の 1 つは、データの最初の値が変数の各因子水準のn1 つに関連付けられていることを確認することです。最初に呼び出す前に、データが正しい形式であることを確認するための回避策があります。虹彩データを変換する方法は次のとおりです。nygbm

first.row <- tapply(1:nrow(miris), iris$Species, head,1)
miris <- rbind(miris[first.row,], miris[-first.row,])

最初の 3 行には、データ内の異なる Species ごとに値が含まれていることがわかります

#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 に答える