我會說在gbm
有一個錯誤。如果你看看gbm.fit
函數,他們會在將多項數據發送到底層的「gbm」C函數之前對其進行一系列轉換。這些轉換在返回結果之前「撤消」,並且在gbm.more
函數中不會再次執行。
一個這樣的轉換是要確保數據中的第一個值與您的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)
沒有錯誤。
我建議你向軟件包維護人員提交一個錯誤報告。這個問題似乎特定於「多項」分配。隨意包含此問題的鏈接。
具體而言,會輸出以下錯誤:gbm.more中的錯誤(iris.mod,100,verbose = FALSE): 觀察結果不正確。 gbm()無法爲設計矩陣構建索引。可能是gbm中的錯誤或數據中的異常數據類型。 – user3742790
我的問題是否過於具體,或者我是否將其發佈在錯誤的地方? – user3742790