2016-09-20 4 views
0

(F38 < 2.5)(コード行2及び6)理解xgb.dump

結果の出力は次のようになります

xgb.dump(model_2,with.stats=T) 
    [1] "booster[0]" 
    [2] "0:[f38<2.5] yes=1,no=2,missing=1,gain=173.793,cover=6317" 
    [3] "1:leaf=-0.0366182,cover=3279.75" 
    [4] "2:leaf=-0.0466305,cover=3037.25" 
    [5] "booster[1]" 
    [6] "0:[f38<2.5] yes=1,no=2,missing=1,gain=163.887,cover=6314.25" 
    [7] "1:leaf=-0.035532,cover=3278.65" 
    [8] "2:leaf=-0.0452568,cover=3035.6" 

は、F38の最初の使用の間の差とF38の第二の使用は、単に起こって残留フィッティングか?最初はそれは私にはおかしいと思って、ここで何が起こっているのかを正確に理解しようとしました!

ありがとうございます!

+0

は2行ではなく、6行は2種類のブースター用ですか? – abhiieor

+0

はい、2及び6は、2つの異なるブースターのためのものです。私は基本的に2回目のブースターは今、まったく同じ分割して第1の昇圧の残留をフィッティングされ、ここで起こっているかを理解しようとしていましたか? – Jeff

+0

あなたは何をしているのかを理解するためにコードを出していますか?いくつかのサンプルデータと共に非常に便利です – abhiieor

答えて

1

は、F38の最初の使用及びF38の二次利用の違いが起こって、単純に残留フィッティングですか?

最も可能性が高いそう - その最初のラウンドの後に勾配を更新し、あなたの例では、スプリットポイントと

を同じ機能を見つけるここで再現性の例です。私は2番目の例では学習率を下げ、その3つのすべてのラウンドのために再度同じ機能、同じスプリットポイントを見つける方法

は注意してください。最初の例では、3つのラウンドすべてで異なる機能を使用しています。

require(xgboost) 
data(agaricus.train, package='xgboost') 
train <- agaricus.train 
dtrain <- xgb.DMatrix(data = train$data, label=train$label) 

#high learning rate, finds different first split feature (f55,f28,f66) in each tree 
bst <- xgboost(data = train$data, label = train$label, max_depth = 2, eta = 1, nrounds = 3,nthread = 2, objective = "binary:logistic") 
xgb.dump(model = bst) 
# [1] "booster[0]"         "0:[f28<-9.53674e-07] yes=1,no=2,missing=1" 
# [3] "1:[f55<-9.53674e-07] yes=3,no=4,missing=3" "3:leaf=1.71218"        
# [5] "4:leaf=-1.70044"       "2:[f108<-9.53674e-07] yes=5,no=6,missing=5" 
# [7] "5:leaf=-1.94071"       "6:leaf=1.85965"        
# [9] "booster[1]"         "0:[f59<-9.53674e-07] yes=1,no=2,missing=1" 
# [11] "1:[f28<-9.53674e-07] yes=3,no=4,missing=3" "3:leaf=0.784718"       
# [13] "4:leaf=-0.96853"       "2:leaf=-6.23624"       
# [15] "booster[2]"         "0:[f101<-9.53674e-07] yes=1,no=2,missing=1" 
# [17] "1:[f66<-9.53674e-07] yes=3,no=4,missing=3" "3:leaf=0.658725"       
# [19] "4:leaf=5.77229"        "2:[f110<-9.53674e-07] yes=5,no=6,missing=5" 
# [21] "5:leaf=-0.791407"       "6:leaf=-9.42142"  

## changed eta to lower learning rate, finds same feature(f55) in first split of each tree 
bst2 <- xgboost(data = train$data, label = train$label, max_depth = 2, eta = .01, nrounds = 3,nthread = 2, objective = "binary:logistic") 
xgb.dump(model = bst2) 
# [1] "booster[0]"         "0:[f28<-9.53674e-07] yes=1,no=2,missing=1" 
# [3] "1:[f55<-9.53674e-07] yes=3,no=4,missing=3" "3:leaf=0.0171218"       
# [5] "4:leaf=-0.0170044"       "2:[f108<-9.53674e-07] yes=5,no=6,missing=5" 
# [7] "5:leaf=-0.0194071"       "6:leaf=0.0185965"       
# [9] "booster[1]"         "0:[f28<-9.53674e-07] yes=1,no=2,missing=1" 
# [11] "1:[f55<-9.53674e-07] yes=3,no=4,missing=3" "3:leaf=0.016952"       
# [13] "4:leaf=-0.0168371"       "2:[f108<-9.53674e-07] yes=5,no=6,missing=5" 
# [15] "5:leaf=-0.0192151"       "6:leaf=0.0184251"       
# [17] "booster[2]"         "0:[f28<-9.53674e-07] yes=1,no=2,missing=1" 
# [19] "1:[f55<-9.53674e-07] yes=3,no=4,missing=3" "3:leaf=0.0167863"       
# [21] "4:leaf=-0.0166737"       "2:[f108<-9.53674e-07] yes=5,no=6,missing=5" 
# [23] "5:leaf=-0.0190286"       "6:leaf=0.0182581"