露光付きポアソンxgboost


8

露出が不均一なカウント依存変数をモデル化しようとしていました。古典的なglmsはオフセットとしてlog(exposure)を使用しますが、gbmも使用しますが、xgboostは今までオフセットを許可していません...

この例をクロスバリデーション(オフセットはポアソン/負の二項回帰でどこに行くのか)で欠点を見つけようとすると、露出による重み付けのカウントの代わりに頻度(実数)をモデル化するように提案されました。

データに同じメソッドを適用するためにいくつかのxgboostコードに沿って作業しようとしましたが、失敗しました...コードの下に設定しました:

library(MASS)
data(Insurance)
library(xgboost)
options(contrasts=c("contr.treatment","contr.treatment")) #fissa i 

Insurance$freq<-with(Insurance, Claims/Holders )
library(caret)

temp<-dplyr::select(Insurance,District, Group, Age,freq)
temp2= dummyVars(freq ~ ., data = temp, fullRank = TRUE) %>% predict(temp)

xgbMatrix <- xgb.DMatrix(as.matrix(temp2), 
                     label = Insurance$freq, 
                     weight = Insurance$Holders)

bst = xgboost(data=xgbMatrix, label = Insurance$freq,    objective='count:poisson',nrounds=5)
#In xgb.get.DMatrix(data, label) : xgboost: label will be ignored. 
#strange warning

Insurance$predFreq<-predict(bst, xgbMatrix)

with(Insurance, sum(Claims)) #3151
with(Insurance, sum(predFreq*Holders)) #7127 fails

誰か助けてもらえますか?また、キャレットの電車を使ってすべて走れるのかと思っていました...

回答:



4

コードは問題なく機能します。目的の結果を得るには、パラメーターnroundを増やす必要があります。ブースティングモデルは、最初の反復では収束しません。

xgbMatrix <- xgb.DMatrix(as.matrix(temp2), 
                         label = Insurance$freq,
                         weight = Insurance$Holders)

bst = xgboost(data=xgbMatrix, objective='count:poisson', nrounds=500, verbose = 0)

Insurance$predFreq<-predict(bst, xgbMatrix)

with(Insurance, sum(Claims)) #3151
with(Insurance, sum(predFreq*Holders)) #same
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.