рдЗрди рдорд╛рдиреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди xgboost::xgb.train
рдмрд╛рдж рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
247367.2 258693.3 149572.2 201675.8 250493.9 292349.2 414828.0 296503.2 260851.9 190413.3
рдЗрди рдорд╛рдиреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рдкрд┐рдЫрд▓реЗ рдореЙрдбрд▓ рдХреЗ xgboost::xgb.save
рдФрд░ xgboost::xgb.load
рдХреЗ рдмрд╛рдж рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
247508.8 258658.2 149252.1 201692.6 250458.1 292313.4 414787.2 296462.5 260879.0 190430.1
рд╡реЗ рдХрд░реАрдм рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред рдЗрди рджреЛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдиреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ -1317.094
рд▓реЗрдХрд░ 1088.859
рддрдХ 25k рдирдореВрдиреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рд╕рдЪреНрдЪреЗ рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╕рдордп, рдЗрди рджреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпреЛрдВ рдХреЗ рдПрдордПрдИ/рдЖрд░рдПрдордПрд╕рдИ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓реЛрдб/рд╕реЗрд╡ рдХреЗ рджреМрд░рд╛рди рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдордПрдИ/рдЖрд░рдПрдордПрд╕рдИ рдЙрддрдирд╛ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рднреА, рдореБрдЭреЗ рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЙрдбрд▓ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд╛рдЗрдирд░реА рдХреЛ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдХреЛрдИ рд╕реБрд░рд╛рдЧ?
рдкреАрдПрд╕ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдореИрдВ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╛ рдмрд┐рдВрджреБ рдХреЛ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрдореА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдмрд╛рдЗрдирд░реА рдпрд╛ рдЬреЛрдВрд╕ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЧреЛрд▓ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдЖрдк рдбрд╛рд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рдирд╣реАрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реВрдБ:
params <- list(objective = 'reg:squarederror',
max_depth = 10, eta = 0.02, subsammple = 0.5,
base_score = median(xgboost::getinfo(xgb.train, 'label'))
)
xgboost::xgb.train(
params = params, data = xgb.train,
watchlist = list('train' = xgb.train, 'test' = xgb.test),
nrounds = 10000, verbose = TRUE, print_every_n = 25,
eval_metric = 'mae',
early_stopping_rounds = 3, maximize = FALSE)
рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ рдбрдореА рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ?
рдпрд╣рд╛рдБ рддреБрдо рдЬрд╛рдУ (рддреНрд╡рд░рд┐рдд рдФрд░ рдЧрдВрджрд╛):
N <- 100000
set.seed(2020)
X <- data.frame('X1' = rnorm(N), 'X2' = runif(N), 'X3' = rpois(N, lambda = 1))
Y <- with(X, X1 + X2 - X3 + X1*X2^2 - ifelse(X1 > 0, 2, X3))
params <- list(objective = 'reg:squarederror',
max_depth = 5, eta = 0.02, subsammple = 0.5,
base_score = median(Y)
)
dtrain <- xgboost::xgb.DMatrix(data = data.matrix(X), label = Y)
fit <- xgboost::xgb.train(
params = params, data = dtrain,
watchlist = list('train' = dtrain),
nrounds = 10000, verbose = TRUE, print_every_n = 25,
eval_metric = 'mae',
early_stopping_rounds = 3, maximize = FALSE
)
pred <- stats::predict(fit, newdata = dtrain)
xgboost::xgb.save(fit, 'booster.raw')
fit.loaded <- xgboost::xgb.load('booster.raw')
pred.loaded <- stats::predict(fit.loaded, newdata = dtrain)
identical(pred, pred.loaded)
pred[1:10]
pred.loaded[1:10]
sqrt(mean((Y - pred)^2))
sqrt(mean((Y - pred.loaded)^2))
рдореЗрд░реА рдорд╢реАрди рдкрд░, identical(pred, pred.loaded)
рдЧрд▓рдд рд╣реИ (рдпрд╛рдиреА рд╕рдЪ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдпрд╣рд╛рдБ рдЕрдВрддрд┐рдо рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:
> identical(pred, pred.loaded)
[1] FALSE
> pred[1:10]
[1] -4.7971768 -2.5070562 -0.8889422 -4.9199696 -4.4374819 -0.2739395 -0.9825708 0.4579227 1.3667605 -4.3333349
> pred.loaded[1:10]
[1] -4.7971768 -2.5070562 -0.8889424 -4.9199696 -4.4373770 -0.2739397 -0.9825710 0.4579227 1.3667605 -4.3333349
>
> sqrt(mean((Y - pred)^2))
[1] 0.02890702
> sqrt(mean((Y - pred.loaded)^2))
[1] 0.02890565
рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рдХрднреА-рдХрднреА рдереЛрдбрд╝реА рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ?
R рдФрд░ xgboost рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА:
> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.6.1 magrittr_1.5 Matrix_1.2-17 tools_3.6.1 yaml_2.2.0 xgboost_0.90.0.2 stringi_1.4.3 grid_3.6.1
[9] data.table_1.12.4 lattice_0.20-38
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐:
> identical(fit$raw, fit.loaded$raw)
[1] TRUE
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдмрд╕ рдПрдХ рдЕрдкрдбреЗрдЯ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЬреЗрд╕рди рдФрд░ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛:
xgboost::xgb.save(fit, 'booster.json')
fit.loaded <- xgboost::xgb.load('booster.json')
xgboost::xgb.save(fit.loaded, 'booster-1.json')
booster.json
рдФрд░ booster-1.json
рд╣реИрд╢ рдорд╛рди (via sha256sum ./booster.json
) рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рдХрд╛рд░рдг рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реИред
рдмрд┐рдирд╛ рдХрд╛рд░рдг рдЬрд╛рдиреЗ рдорд╛рдорд▓реЗ рдХреЛ рдмрдВрдж рдХреНрдпреЛрдВ рдХрд░реЗрдВ?
@рдЯреНрд░рд┐рд╡рд┐рдпрд▓рдлрд┐рд╕ рдХреНрдпрд╛ рдЖрдкрдХреЛ identical(pred, pred.loaded)
рд▓рд┐рдП рд╕рд╣реА рдорд┐рд▓рд╛? рдУрдкреА рдкреВрдЫ рд░рд╣рд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рдХреНрдпреЛрдВ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреАрдВ, рднрд▓реЗ рд╣реА рджреЛ рдореЙрдбрд▓реЛрдВ рдореЗрдВ рд╕рдорд╛рди рдмрд╛рдЗрдирд░реА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛрдВред
рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред
рдореБрдЭреЗ рдорд╛рдл рдХрд░реЗрдВред рдореБрдЭреЗ рдЬреЛ рдХрд╛рд░рдг рдорд┐рд▓рд╛ рд╡рд╣ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреИрд╢ рд╣реИред рдореЙрдбрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреИрд╢реНрдб рд╡реИрд▓реНрдпреВ рдХреЗ рдмрдЬрд╛рдп рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдорд╛рди рд╕рд╣реА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╕реЗ рдЖрддреЗ рд╣реИрдВ:
рддреЛ рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рдХрд╛рд░рдг рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реИред
рддреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреИрд╢ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рд╕рд╛рде рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рддрд░реАрдХреЗ рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИ?
@ hcho3 рдирдИ рдЕрдЪрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдореБрдЭреЗ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реАред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░рдореБрдЦ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рдкреЗрдбрд╝реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдШрдЯрд╛рдХрд░ 1000 рдХрд░ рджреЗрдВ (рдЬреЛ рдЕрднреА рднреА рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред
рдХреИрд╢ рдХреЛ рд░рд╛рд╕реНрддреЗ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╕реЗ рдкрд╣рд▓реЗ DMatrix рдХрд╛ рдкреБрди: рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ:
dtrain_2 <- xgboost::xgb.DMatrix(data = data.matrix(X), label = Y)
pred <- stats::predict(fit, newdata = dtrain_2)
рдпрд╣ identical
рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рдХрд░реЗрдЧрд╛ред рдЕрдиреНрдпрдерд╛ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдзрд┐рдХ рдкреЗрдбрд╝реЛрдВ рдореЗрдВ рд╕рдорд╛рди рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЕрднреА рднреА рдЫреЛрдЯреЗ рдЕрдВрддрд░ рд╣реИрдВ (2000 рдкреЗрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП 1e-7)ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдореЗрдВ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рднреА рдереЛрдбрд╝рд╛ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдЪреВрдВрдХрд┐ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдпреЛрдЧ рд╕рд╣рдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╣рдо рдЧрдгрдирд╛ рдХреЗ рдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдордЬрдмреВрдд рдЧрд╛рд░рдВрдЯреА рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЗрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрдд рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ (рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реЗрдЧреА рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реЛрдЧреА)ред рд╕реАрдкреАрдпреВ рдПрдлрдкреАрдпреВ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдПрдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдореЗрдВ рдЙрдЪреНрдЪ рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред (рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрдВрдЯрд░рдореАрдбрд┐рдпрд╛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, https://en.wikipedia.org/wiki/Extended_precision)ред рдореЗрд░рд╛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм 32 рдмрд┐рдЯ рдлреНрд▓реЛрдЯ рдХреЗ рднреАрддрд░ 1000 рдкреЗрдбрд╝реЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдмрд┐рд▓реНрдХреБрд▓ рдкреБрди: рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдмрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред
рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдпреЛрдЧ рд╕рд╣рдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╕реНрд╡рдпрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдКрдВрдЧрд╛ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЕрдВрддрд░ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реИред
рдЖрдо рддреМрд░ рдкрд░, рдореИрдВ рдЖрдорддреМрд░ рдкрд░ np.testing.assert_almost_equal
рд╕рд╛рде decimal=5
рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рджреЛ рдлреНрд▓реЛрдЯ рд╕рд░рдгреА рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред
рд╣рд╛рдБред рд╡рд┐рд╕реНрддреГрдд рдиреЛрдЯреНрд╕ рдХреЗ рдмрд┐рдирд╛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдпрд╛рдЪрдирд╛ред
@ hcho3 рдХреЛрдИ рдЕрдкрдбреЗрдЯ?
рдореИрдВ рдЕрднреА рддрдХ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рджреЛред
@рдЯреНрд░рд┐рд╡рд┐рдпрд▓рдлрд┐рд╕ рдореИрдВ рдмрдЧ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдореИрдВрдиреЗ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдпрд╛ рдФрд░ FALSE
рд▓рд┐рдП identical(pred, pred.loaded)
ред рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдирдпрд╛ DMatrix dtrain_2
рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рдЕрднреА рднреА рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП FALSE
рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред
@DavorJ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ:
[1] FALSE # identical(pred, pred.loaded)
[1] -4.7760534 -2.5083885 -0.8860036 -4.9163256 -4.4455137 -0.2548684
[7] -0.9745615 0.4646015 1.3602829 -4.3288369 # pred[1:10]
[1] -4.7760534 -2.5083888 -0.8860038 -4.9163256 -4.4454765 -0.2548686
[7] -0.9745617 0.4646015 1.3602829 -4.3288369 # pred.loaded[1:10]
[1] 0.02456085 # MSE on pred
[1] 0.02455945 # MSE on pred.loaded
dtrain_2 <- xgboost::xgb.DMatrix(data = data.matrix(X), label = Y)
рд╕рд╛рде рд╕рдВрд╢реЛрдзрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ:
[1] FALSE # identical(pred, pred.loaded)
[1] -4.7760534 -2.5083885 -0.8860036 -4.9163256 -4.4455137 -0.2548684
[7] -0.9745615 0.4646015 1.3602829 -4.3288369 # pred[1:10]
[1] -4.7760534 -2.5083888 -0.8860038 -4.9163256 -4.4454765 -0.2548686
[7] -0.9745617 0.4646015 1.3602829 -4.3288369 # pred.loaded[1:10]
[1] 0.02456085 # MSE on pred
[1] 0.02455945 # MSE on pred.loaded
рддреЛ рдХреБрдЫ рдФрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реЛрдЧрд╛ред
рдореИрдВрдиреЗ рд░рд╛рдЙрдВрдб-рдЯреНрд░рд┐рдк рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА:
xgboost::xgb.save(fit, 'booster.raw')
fit.loaded <- xgboost::xgb.load('booster.raw')
xgboost::xgb.save(fit.loaded, 'booster.raw.roundtrip')
рдФрд░ рджреЛ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓реЗрдВ booster.raw
рдФрд░ booster.raw.roundtrip
рд╕рдорд╛рди рдереАрдВред
pred
рдФрд░ pred.loaded
рдмреАрдЪ рдЕрдзрд┐рдХрддрдо рдЕрдВрддрд░ 0.0008370876 рд╣реИред
рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ:
library(xgboost)
N <- 5000
set.seed(2020)
X <- data.frame('X1' = rnorm(N), 'X2' = runif(N), 'X3' = rpois(N, lambda = 1))
Y <- with(X, X1 + X2 - X3 + X1*X2^2 - ifelse(X1 > 0, 2, X3))
params <- list(objective = 'reg:squarederror',
max_depth = 5, eta = 0.02, subsammple = 0.5,
base_score = median(Y)
)
dtrain <- xgboost::xgb.DMatrix(data = data.matrix(X), label = Y)
fit <- xgboost::xgb.train(
params = params, data = dtrain,
watchlist = list('train' = dtrain),
nrounds = 10000, verbose = TRUE, print_every_n = 25,
eval_metric = 'mae',
early_stopping_rounds = 3, maximize = FALSE
)
pred <- stats::predict(fit, newdata = dtrain)
invisible(xgboost::xgb.save(fit, 'booster.raw'))
fit.loaded <- xgboost::xgb.load('booster.raw')
invisible(xgboost::xgb.save(fit.loaded, 'booster.raw.roundtrip'))
pred.loaded <- stats::predict(fit.loaded, newdata = dtrain)
identical(pred, pred.loaded)
pred[1:10]
pred.loaded[1:10]
max(abs(pred - pred.loaded))
sqrt(mean((Y - pred)^2))
sqrt(mean((Y - pred.loaded)^2))
рдЖрдЙрдЯрдкреБрдЯ:
[1] FALSE
[1] -2.4875379 -0.9452241 -6.9658904 -2.9985323 -4.2192593 -0.8505422
[7] -0.3928839 -1.6886091 -1.3611379 -3.1278882
[1] -2.4875379 -0.9452239 -6.9658904 -2.9985323 -4.2192593 -0.8505420
[7] -0.3928837 -1.6886090 -1.3611377 -3.1278882
[1] 0.0001592636
[1] 0.01370754
[1] 0.01370706
рдмрд╕ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╛рдЙрдВрдб-рдЯреНрд░рд┐рдк рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдЕрдм рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рдФрд░ рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИрдВред
library(xgboost)
N <- 5000
set.seed(2020)
X <- data.frame('X1' = rnorm(N), 'X2' = runif(N), 'X3' = rpois(N, lambda = 1))
Y <- with(X, X1 + X2 - X3 + X1*X2^2 - ifelse(X1 > 0, 2, X3))
params <- list(objective = 'reg:squarederror',
max_depth = 5, eta = 0.02, subsammple = 0.5,
base_score = median(Y)
)
dtrain <- xgboost::xgb.DMatrix(data = data.matrix(X), label = Y)
fit <- xgboost::xgb.train(
params = params, data = dtrain,
watchlist = list('train' = dtrain),
nrounds = 10000, verbose = TRUE, print_every_n = 25,
eval_metric = 'mae',
early_stopping_rounds = 3, maximize = FALSE
)
pred <- stats::predict(fit, newdata = dtrain)
invisible(xgboost::xgb.save(fit, 'booster.raw'))
fit.loaded <- xgboost::xgb.load('booster.raw')
invisible(xgboost::xgb.save(fit.loaded, 'booster.raw.roundtrip'))
fit.loaded2 <- xgboost::xgb.load('booster.raw.roundtrip')
pred.loaded <- stats::predict(fit.loaded, newdata = dtrain)
pred.loaded2 <- stats::predict(fit.loaded2, newdata = dtrain)
identical(pred, pred.loaded)
identical(pred.loaded, pred.loaded2)
pred[1:10]
pred.loaded[1:10]
pred.loaded2[1:10]
max(abs(pred - pred.loaded))
max(abs(pred.loaded - pred.loaded2))
sqrt(mean((Y - pred)^2))
sqrt(mean((Y - pred.loaded)^2))
sqrt(mean((Y - pred.loaded2)^2))
рдирддреАрдЬрд╛:
[1] FALSE
[1] TRUE
[1] -2.4875379 -0.9452241 -6.9658904 -2.9985323 -4.2192593 -0.8505422
[7] -0.3928839 -1.6886091 -1.3611379 -3.1278882
[1] -2.4875379 -0.9452239 -6.9658904 -2.9985323 -4.2192593 -0.8505420
[7] -0.3928837 -1.6886090 -1.3611377 -3.1278882
[1] -2.4875379 -0.9452239 -6.9658904 -2.9985323 -4.2192593 -0.8505420
[7] -0.3928837 -1.6886090 -1.3611377 -3.1278882
[1] 0.0001592636
[1] 0
[1] 0.01370754
[1] 0.01370706
[1] 0.01370706
рддреЛ рд╢рд╛рдпрдж рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреИрд╢ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдореИрдВрдиреЗ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреИрд╢рд┐рдВрдЧ рдЕрдХреНрд╖рдо рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛:
diff --git a/src/predictor/cpu_predictor.cc b/src/predictor/cpu_predictor.cc
index ebc15128..c40309bc 100644
--- a/src/predictor/cpu_predictor.cc
+++ b/src/predictor/cpu_predictor.cc
@@ -259,7 +259,7 @@ class CPUPredictor : public Predictor {
// delta means {size of forest} * {number of newly accumulated layers}
uint32_t delta = end_version - beg_version;
CHECK_LE(delta, model.trees.size());
- predts->Update(delta);
+ //predts->Update(delta);
CHECK(out_preds->Size() == output_groups * dmat->Info().num_row_ ||
out_preds->Size() == dmat->Info().num_row_);
(рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреИрд╢рд┐рдВрдЧ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рд╕реЗ рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред)
рдЖрдЙрдЯрдкреБрдЯ:
[1] FALSE
[1] TRUE
[1] -2.4908853 -0.9507379 -6.9615889 -2.9935317 -4.2165089 -0.8543566
[7] -0.3940181 -1.6930715 -1.3572118 -3.1403396
[1] -2.4908853 -0.9507380 -6.9615889 -2.9935317 -4.2165089 -0.8543567
[7] -0.3940183 -1.6930716 -1.3572119 -3.1403399
[1] -2.4908853 -0.9507380 -6.9615889 -2.9935317 -4.2165089 -0.8543567
[7] -0.3940183 -1.6930716 -1.3572119 -3.1403399
[1] 0.0001471043
[1] 0
[1] 0.01284297
[1] 0.01284252
[1] 0.01284252
рддреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреИрд╢ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдмрдЧ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред
рдкрддреНрддрд╛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рднреА рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВ:
invisible(xgboost::xgb.save(fit, 'booster.raw'))
fit.loaded <- xgboost::xgb.load('booster.raw')
invisible(xgboost::xgb.save(fit.loaded, 'booster.raw.roundtrip'))
fit.loaded2 <- xgboost::xgb.load('booster.raw.roundtrip')
x <- predict(fit, newdata = dtrain2, predleaf = TRUE)
x2 <- predict(fit.loaded, newdata = dtrain2, predleaf = TRUE)
x3 <- predict(fit.loaded2, newdata = dtrain2, predleaf = TRUE)
identical(x, x2)
identical(x2, x3)
рдЖрдЙрдЯрдкреБрдЯ:
[1] FALSE
[1] TRUE
рд░рд╣рд╕реНрдп рд╕реБрд▓рдЭ рдЧрдпрд╛ред рдореИрдВрдиреЗ рд╕рд╣реА рдХрд╛рд░рдг рдХреА рдкрд╣рдЪрд╛рди рдХреАред рдЬрдм рдореЙрдбрд▓ рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЬрд▓реНрджреА рд░реБрдХрдиреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЫреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, XGBoost 6381 рдмреВрд╕реНрдЯрд┐рдВрдЧ рд░рд╛рдЙрдВрдб рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ 6378 рд░рд╛рдЙрдВрдб рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдореЙрдбрд▓ рдвреВрдВрдврддрд╛ рд╣реИред рдореЗрдореЛрд░реА рдореЗрдВ рдореЙрдбрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ 6381 рдкреЗрдбрд╝ рд╣реИрдВ, рди рдХрд┐ 6378 рдкреЗрдбрд╝, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдкреЗрдбрд╝ рдирд╣реАрдВ рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рд╣реИ best_iteration
рдЬреЛ рдпрд╛рдж рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдерд╛:
> fit$best_iteration
[1] 6378
рдЬрдм рд╣рдо рдореЙрдбрд▓ рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рдЪреБрдкрдЪрд╛рдк рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИред рддреЛ рдореВрд▓ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде predict()
6378 рдкреЗрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ predict()
рдмрд░рд╛рдордж рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде 6381 рдкреЗрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
> x <- predict(fit, newdata = dtrain2, predleaf = TRUE)
> x2 <- predict(fit.loaded, newdata = dtrain2, predleaf = TRUE)
> dim(x)
[1] 5000 6378
> dim(x2)
[1] 5000 6381
@рдЯреНрд░рд┐рд╡рд┐рдпрд▓рдлрд┐рд╕ рдореИрдВ рдкреЗрдбрд╝реЛрдВ рдХреЛ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рд╣реВрдВред рдпрджрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг 6381 рд░рд╛рдЙрдВрдб рдкрд░ рд░реБрдХ рдЧрдпрд╛ рдФрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ 6378 рд░рд╛рдЙрдВрдб рдкрд░ рдерд╛, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЕрдВрддрд┐рдо рдореЙрдбрд▓ рдореЗрдВ 6378 рдкреЗрдбрд╝ рд╣реЛрдВрдЧреЗред
@ hcho3 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ https://github.com/dmlc/xgboost/issues/4052 рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рд╣реИред
bset_iteration
рдХреЛ Learner::attributes_
рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ xgboost::xgb.attr
рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
@ hcho3 , рдЕрдЪреНрдЫрд╛ рдЦреЛрдЬ!
xgboost:::predict.xgb.Booster()
рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдВ:
рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭреВрдВ, рддреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ? рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рдкреЗрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред
@DavorJ рдЬрдм рдЕрд░реНрд▓реА рд╕реНрдЯреЙрдкрд┐рдВрдЧ рд╕рдХреНрд░рд┐рдп рд╣реЛрддреА рд╣реИ, рддреЛ predict()
рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП best_iteration
рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
рдкрд╛рдпрдерди рдкрдХреНрд╖ рдкрд░ @ рдЯреНрд░рд┐рд╡рд┐рдпрд▓рдлрд┐рд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ xgb.predict()
рдЬрд▓реНрджреА рд░реБрдХрдиреЗ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛:
import xgboost as xgb
import numpy as np
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
X, y = load_boston(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
params = {'objective': 'reg:squarederror'}
bst = xgb.train(params, dtrain, 100, [(dtrain, 'train'), (dtest, 'test')],
early_stopping_rounds=5)
x = bst.predict(dtrain, pred_leaf=True)
x2 = bst.predict(dtrain, pred_leaf=True, ntree_limit=bst.best_iteration)
print(x.shape)
print(x2.shape)
pred = bst.predict(dtrain)
pred2 = bst.predict(dtrain, ntree_limit=bst.best_iteration)
print(np.max(np.abs(pred - pred2)))
рдЖрдЙрдЯрдкреБрдЯ:
Will train until test-rmse hasn't improved in 5 rounds.
[1] train-rmse:12.50316 test-rmse:11.92709
...
[25] train-rmse:0.56720 test-rmse:2.56874
[26] train-rmse:0.54151 test-rmse:2.56722
[27] train-rmse:0.51842 test-rmse:2.56124
[28] train-rmse:0.47489 test-rmse:2.56640
[29] train-rmse:0.45489 test-rmse:2.58780
[30] train-rmse:0.43093 test-rmse:2.59385
[31] train-rmse:0.41865 test-rmse:2.59364
[32] train-rmse:0.40823 test-rmse:2.59465
Stopping. Best iteration:
[27] train-rmse:0.51842 test-rmse:2.56124
(404, 33)
(404, 27)
0.81269073
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓рд╛рдиреЗ рдХреА рдпрд╛рдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ bst.best_iteration
рдФрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд ntree_limit
рдЬрдм рдмреБрд▓рд╛ рддрд░реНрдХ predict()
ред рдпрд╣ рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рд╣реИ рдФрд░ рдПрдХ рдЕрдкреНрд░рд┐рдп рдЖрд╢реНрдЪрд░реНрдп рдмрдирд╛рддрд╛ рд╣реИред
рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
best_iteration
рдкрд╣рд▓реЗ рдХреЗ рдкреЗрдбрд╝реЛрдВ рдХреЛ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджреЗрдВредbest_iteration
рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рдП рд░рдЦреЗрдВ, рдФрд░ predict()
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред@ hcho3 рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЖрдзрд╛ рдмреЗрдХ рдХрд┐рдпрд╛ рд╣реБрдЖ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ process_type = update
рд╡рд┐рдХрд▓реНрдк, рдФрд░ рд╡рди рд╕реЗ рднреА рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
update
рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рдореБрджреНрджреЛрдВ рдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреБрдирд░реНрдХрдерди рдХреЗ рд▓рд┐рдП, рдпрджрд┐ num_boost_round
рд╕рд╛рде update
рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдкреЗрдбрд╝реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХрдо рд╣реИ, рддреЛ рд╡реЗ рдкреЗрдбрд╝ рдЬреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ .
рдлрд╝реЙрд░реЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп рдХреЗ рд▓рд┐рдП, best_iteration
рдлрд╝реЙрд░реЗрд╕реНрдЯ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ predict
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреЗрдбрд╝реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╛рдпрдерди рдкрд░ best_ntree_limit
рдирд╛рдордХ рдХреБрдЫ рд╣реИ , рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ntree_limit
рдХреЛ inplace_predict
рдореЗрдВ iteration_range
рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ред
рдореИрдВ slice
рдФрд░ concat
рд╡рд┐рдзрд┐ рдХреЛ booster
рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдкреЗрдбрд╝реЛрдВ рдХреЛ 2 рдореЙрдбрд▓реЛрдВ рдореЗрдВ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ 2 рдореЙрдбрд▓реЛрдВ рд╕реЗ рдкреЗрдбрд╝реЛрдВ рдХреЛ 1 рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпреЗ 2 рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ :
base_margin_
рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд╣реИредntree_limit
рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдХреЗрд╡рд▓ рдореЙрдбрд▓ рдХреЛ рд╕реНрд▓рд╛рдЗрд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд▓рд╛рдЗрд╕ рдкрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЪрд▓рд╛рддреЗ рд╣реИрдВредupdate
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рдмрд╕ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкреЗрдбрд╝реЛрдВ рдХреЛ рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, num_boost_rounds
редрдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рдмрд╣реБ рд▓рдХреНрд╖реНрдп рдкреЗрдбрд╝реЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред рдЬреИрд╕реЗ рдХрд┐ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдорд▓реНрдЯреА-рдХреНрд▓рд╛рд╕ рдорд▓реНрдЯреА-рдЯрд╛рд░рдЧреЗрдЯ рдЯреНрд░реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреЗрдбрд╝реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реЛрдВрдЧреЗ, рдЬреИрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП output_groups
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд▓рдХреНрд╖реНрдп, рдлреЙрд░реЗрд╕реНрдЯ рдФрд░ рд╡реЗрдХреНрдЯрд░ рд▓реАрдл рдХреЗ рд╕рд╛рде рдкреЗрдпрд░ рдХрд░рдирд╛ред ntree_limit
рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рд╕рд╛рде рд╣реА #5531.
рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдерд╛, рдЕрдм рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╣реИрдВ, рд╢рд╛рдпрдж рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
1.1 рд╕рдордпрд░реЗрдЦрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреНрдпрд╛ рд╣рдо рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдореЗрдВ рдЗрд╕ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреИрд╕реЗ рд╣реИ?
рдФрд░ рдЗрд╕реЗ рдЬрд╛рд░реА рдиреЛрдЯреЛрдВ рдореЗрдВ рдЬреНрдЮрд╛рдд рдореБрджреНрджреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ?
@ рдЯреНрд░рд┐рд╡рд┐рдпрд▓рдлрд┐рд╕ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ, рдЬрдм рддрдХ рд╣рдо рдРрд╕рд╛ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдФрд░ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
@ hcho3 рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рдореЙрдбрд▓ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреЗрдбрд╝реЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЖрдХрд░реНрд╖рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЙрдбрд▓ рд▓рдВрдмрд╛рдИ рдФрд░ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдореЙрдбрд▓ рд▓рдВрдмрд╛рдИ рд╣реЛрдиреЗ рд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд░рд╣рд╕реНрдп рд╕реБрд▓рдЭ рдЧрдпрд╛ред рдореИрдВрдиреЗ рд╕рд╣реА рдХрд╛рд░рдг рдХреА рдкрд╣рдЪрд╛рди рдХреАред рдЬрдм рдореЙрдбрд▓ рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЬрд▓реНрджреА рд░реБрдХрдиреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЫреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, XGBoost 6381 рдмреВрд╕реНрдЯрд┐рдВрдЧ рд░рд╛рдЙрдВрдб рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ 6378 рд░рд╛рдЙрдВрдб рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдореЙрдбрд▓ рдвреВрдВрдврддрд╛ рд╣реИред рдореЗрдореЛрд░реА рдореЗрдВ рдореЙрдбрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ 6381 рдкреЗрдбрд╝ рд╣реИрдВ, рди рдХрд┐ 6378 рдкреЗрдбрд╝, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдкреЗрдбрд╝ рдирд╣реАрдВ рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рд╣реИ
best_iteration
рдЬреЛ рдпрд╛рдж рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдерд╛:рдЬрдм рд╣рдо рдореЙрдбрд▓ рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рдЪреБрдкрдЪрд╛рдк рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИред рддреЛ рдореВрд▓ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде
predict()
6378 рдкреЗрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐predict()
рдмрд░рд╛рдордж рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде 6381 рдкреЗрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред