6

XGboost を使用してカスタム目的関数を実装しようとしています (R では、Python も使用しているため、Python に関するフィードバックも良いです)。

勾配とヘシアンを吐き出す関数を作成しました (正しく動作します) が、xgb.train を実行しようとすると動作しません。次に、ラウンドごとに、予測、勾配、およびヘシアンをこの特定の順序で出力することにしました。これは出力です(実行している限り繰り返します):

[1] 0 0 0 0 0 0 0 0 0

[1] -0.034106908 -0.017049339 -0.034106908 -0.034106908 -0.034106908 -0.034106908 -0.034106908 -0.004256162 -0.034106908 -0.008520554

[1] 0.003836107 0.004272548 0.003836107 0.003836107 0.003836107 0.003836107 0.003836107 0.004408935 0.003836107 0.004381​​658

[0] トレーニングスコア:0 バリュースコア:0

[1] 0 0 0 0 0 0 0 0 0

[1] -0.034106908 -0.017049339 -0.034106908 -0.034106908 -0.034106908 -0.034106908 -0.034106908 -0.004256162 -0.034106908 -0.008520554

[1] 0.003836107 0.004272548 0.003836107 0.003836107 0.003836107 0.003836107 0.003836107 0.004408935 0.003836107 0.004381​​658

[1] train-score:0 val-score:0

勾配とヘシアンが問題ないように見えても、各ラウンドの予測は変わらないことがわかります!! なぜそうなのかわかりません。誰かが同じ問題に遭遇した場合、またはアイデアを共有してください。

私が使用するコードは次のとおりですが、あまり役に立たないと思います。

reg <- xgb.train(data        = xgb.DMatrix(data.matrix(train[1:10,feature.names]),label=train$Response[1:10]),
             nrounds     = 1000,
             obj = custom_obj,
             feval = evalerror,
             early.stop.round = 20,
             maximize = TRUE,
             watchlist = list(train = xgb.DMatrix(data.matrix(train[1:10,feature.names]),label=train$Response[1:10]),
                               val = xgb.DMatrix(data.matrix(cv[,feature.names]),label=cv$Response)),
             param = list(eta         = 0.5,
                          max_depth   = 10,
                          colsample_bytree=0.7,
                          min_child_weight=50,
                          subsample=0.7,
                          base_score = 4))
4

0 に答える 0