Blunde1 / agtboost

Adaptive and automatic gradient boosting computations.
MIT License
66 stars 11 forks source link

NaN predictions #26

Open ldesreumaux opened 3 years ago

ldesreumaux commented 3 years ago

The following code:

library(agtboost)
data(caravan.train, package = "agtboost")
train <- caravan.train
gbt.train(train$y, train$x, loss_function="logloss", verbose=10, nrounds=500, learning_rate=0.1)

gives the following output:

it: 1  |  n-leaves: 167  |  tr loss: 0.1703  |  gen loss: 0.1686
it: 10  |  n-leaves: 80  |  tr loss: 0.1073  |  gen loss: 0.1041
it: 20  |  n-leaves: 6  |  tr loss: 0.05831  |  gen loss: 0.0536
it: 30  |  n-leaves: 432  |  tr loss: 0.0302  |  gen loss: 0.02553
it: 40  |  n-leaves: 411  |  tr loss: 0.01981  |  gen loss: 0.01515
it: 50  |  n-leaves: 433  |  tr loss: 0.01582  |  gen loss: 0.01117
it: 60  |  n-leaves: 30  |  tr loss: 0.01389  |  gen loss: 0.009244
it: 70  |  n-leaves: 434  |  tr loss: 0.01263  |  gen loss: 0.007985
it: 80  |  n-leaves: 4  |  tr loss: 0.01221  |  gen loss: 0.007566
it: 90  |  n-leaves: 2  |  tr loss: 0.01183  |  gen loss: 0.007186
it: 100  |  n-leaves: 217  |  tr loss: 0.01156  |  gen loss: 0.006912
it: 110  |  n-leaves: 473  |  tr loss: 0.01138  |  gen loss: 0.00674
it: 120  |  n-leaves: 496  |  tr loss: 0.01129  |  gen loss: 0.006649
it: 130  |  n-leaves: 252  |  tr loss: 0.01125  |  gen loss: 0.006602
it: 140  |  n-leaves: 475  |  tr loss: 0.01122  |  gen loss: 0.006576
it: 150  |  n-leaves: 485  |  tr loss: 0.01121  |  gen loss: 0.006563
it: 160  |  n-leaves: 276  |  tr loss: 0.0112  |  gen loss: 0.006554
it: 170  |  n-leaves: 276  |  tr loss: 0.01119  |  gen loss: 0.00655
it: 180  |  n-leaves: 276  |  tr loss: 0.01119  |  gen loss: 0.006547
it: 190  |  n-leaves: 276  |  tr loss: 0.01119  |  gen loss: 0.006546
it: 200  |  n-leaves: 281  |  tr loss: 0.01119  |  gen loss: 0.006545
it: 210  |  n-leaves: 281  |  tr loss: 0.01119  |  gen loss: 0.006545
it: 220  |  n-leaves: 281  |  tr loss: 0.01119  |  gen loss: 0.006544
it: 230  |  n-leaves: 281  |  tr loss: 0.01119  |  gen loss: 0.006544
it: 240  |  n-leaves: 281  |  tr loss: 0.01119  |  gen loss: 0.006544
it: 250  |  n-leaves: 281  |  tr loss: 0.01119  |  gen loss: 0.006544
it: 260  |  n-leaves: 281  |  tr loss: 0.01119  |  gen loss: 0.006544
it: 270  |  n-leaves: 281  |  tr loss: 0.01119  |  gen loss: 0.006544
it: 280  |  n-leaves: 281  |  tr loss: 0.01119  |  gen loss: 0.006544
it: 290  |  n-leaves: 282  |  tr loss: 0.01119  |  gen loss: 0.006544
it: 300  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 310  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 320  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 330  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 340  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 350  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 360  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 370  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 380  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 390  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 400  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 410  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 420  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 430  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 440  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 450  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 460  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 470  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 480  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 490  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan
it: 500  |  n-leaves: 1  |  tr loss: -nan  |  gen loss: -nan

And predict outputs NaN predictions.

Blunde1 commented 3 years ago

@ldesreumaux Thank you for raising the issue!

I am not able to reproduce the result that you are showing. With a fresh install from the developer version together with your code

devtools::install_github("Blunde1/agtboost/R-package")
library(agtboost)
data(caravan.train, package = "agtboost")
train <- caravan.train
gbt.train(train$y, train$x, loss_function="logloss", verbose=10, nrounds=500, learning_rate=0.1)

I got the following output

it: 1  |  n-leaves: 2  |  tr loss: 0.2143  |  gen loss: 0.2145
it: 10  |  n-leaves: 2  |  tr loss: 0.1969  |  gen loss: 0.201
it: 20  |  n-leaves: 2  |  tr loss: 0.1913  |  gen loss: 0.1981
it: 30  |  n-leaves: 2  |  tr loss: 0.1887  |  gen loss: 0.1977
C++ object <000001e8ce835610> of class 'ENSEMBLE' <000001e8cdeae5a0>

I obtained almost identical results at consecutive runs. May I ask which system/compiler you are using, or if you have worked on the internal C++ code? The tree-depths you obtain are vastly different from mine, so something strange is deffinitely going on here.

ldesreumaux commented 3 years ago

Indeed, the issue cannot be reproduced with the development version. I can only reproduce it when agtboost is installed with:

install.packages("agtboost")

And it does not seem to be platform-dependent: I reproduced it on Windows 10 and openSUSE 12.3 with R 4.0.5.

Blunde1 commented 3 years ago

Thank you, I was now able to reproduce it on R 4.0.5 (2021-03-31). Strangely CRAN and development version should be the same. I will look into it.

Blunde1 commented 2 years ago

Hoping this will be fixed in v0.9.2. Waiting for CRAN mirrors to be updated to test with docker