рдореИрдВ рдПрдХ-рдЪрд░рдг рд╡реГрджреНрдзрд┐рд╢реАрд▓ XGBoost рдкрд╣рдирд╛рд╡рд╛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЬрдм рдмреВрд╕реНрдЯрд░ xgboost.train рдлрд╝рдВрдХреНрд╢рди ( рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА ) рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрдм рдореИрдВ рдмреВрд╕реНрдЯрд░ рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдмреВрд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕ рддрд░рд╣ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
`` `рдкрд╛рдпрдерди
рдмреВрд╕реНрдЯрд░_ = xgboost.Booster({'рдЙрджреНрджреЗрд╢реНрдп': 'reg:linear'})
рдмреВрд╕реНрдЯрд░_.рдЕрдкрдбреЗрдЯ (рдбреАрдЯреНрд░реЗрди, 1)
the python process fails with a segmentation fault.
## Environment info
Operating System:
* **python 3.6** Mac OS X 10.10.5 (Darwin 14.5.0), Ubuntu 14.04.5 LTS (GNU/Linux 3.19.0-25-generic x86_64);
* **python 2.7** Mac OS X 10.10.6 (Darwin 15.6.0);
Compiler:
* **python 3.6** used `pip install xgboost`;
* **python 2.7** gcc (6.3.0 --without-multilib);
`xgboost` version used:
* **python 3.6** version 0.6 from pip;
* **python 2.7.13** git HEAD 4a63f4ab43480adaaf13bde2485d5bfedd952520;
## Steps to reproduce
```python
import xgboost
dtrain = xgboost.DMatrix(data=[[-1.0], [0.0], [1.0]], label=[0.0, -1.0, 1.0])
booster_ = xgboost.Booster({'objective': 'reg:linear', 'max_depth': 1})
booster_.update(dtrain, 1)
booster_.update(dtrain, 1)
рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рд╡рд┐рднрд╛рдЬрди рджреЛрд╖ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИред рдореИрдВ рдЕрдЬрдЧрд░ 2.7.13 рдХреЗ рд▓рд┐рдП рдХреНрд░реИрд╢ рд░рд┐рдкреЛрд░реНрдЯ рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛
рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реА рдЕрдкреЗрдХреНрд╖рд╛ рдЦрд╛рд▓реА рдмреВрд╕реНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдХреНрдпрд╛ рд╣реИ
booster_ = xgboost.Booster({'objective': 'reg:linear', 'max_depth': 1})
рд╕рд╛рдорд╛рдиреНрдп рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдмреВрд╕реНрдЯрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ DMatrix dtrain
рд╕рд╛рде рдПрдХ рдирдореВрдирд╛ (X, y) рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
booster_.update(dtrain, 1)
рдЦрд╛рд▓реА рдмреВрд╕реНрдЯрд░ рдпрд╛ рддреЛ f_0(x)
рдмрди рдЬрд╛рдПрдЧрд╛ - рдирд┐рд░рдВрддрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА, рдпрд╛ f_1(x)
- рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдмреВрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдПрдХ рдЪрд░рдг рдХреЗ рдмрд╛рдж рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ( рд╣рд╛рд╕реНрдЯреА, рддрд┐рдмреНрд╢реАрд░рд╛рдиреА, тАЛтАЛрдлреНрд░реАрдбрдореИрди рд╕реЗ; 2013 рдХрд╛ 10рд╡рд╛рдВ рд╕рдВрд╕реНрдХрд░рдг рдкреГрд╖реНрда 361)ред
рдореИрдВ рдПрдЪрдЯреАрдИ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдкреБрдирд░реБрддреНрдкрд╛рджрди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА RegTree::FVec.data
рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред booster_.update
рдкрд░ рджреВрд╕рд░реА рдХреЙрд▓ рдХрд╛ (рдореИрдиреБрдЕрд▓) рдЯреНрд░реЗрд╕ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
this->UpdateOneIter(...);
this->PredictRaw(train, &preds_);
gbm_->Predict(data, out_preds, ntree_limit=0);
PredLoopInternal<GBTree>(p_fmat, out_preds, 0, ntree_limit, true);
PredValue(inst, gid, info.GetRoot(ridx), &feats, tree_begin, tree_end);
int tid = trees[i]->GetLeafIndex(*p_feats, root_index);
рдпрд╣рд╛рдБ рд╡рд┐рдлрд▓:
рд╢рд╛рдорд┐рд▓/xgboost/tree_model.h:#L528
..., feat.fvalue(split_index), feat.is_missing(split_index), ...
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ feat.data.size() == 0
ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ .update()
рдкрд░ рдкрд╣рд▓реА рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдпрд╣ рд╡реЗрдХреНрдЯрд░ рдЕрднреА рднреА рдЦрд╛рд▓реА рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрд▓ рдХреЗ рдмрд╛рдж .train()
рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИред
рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрдбрд╝ рдХреНрдпрд╛ рдереАред рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХреЙрд▓ рдХрд░рдХреЗ рдПрдХ рдЦрд╛рд▓реА рдмреВрд╕реНрдЯрд░ рдмрдирд╛рдирд╛
booster_ = xgboost.Booster({'objective': 'reg:linear'})
рдХреЗрд╡рд▓ GBTree рдмреВрд╕реНрдЯрд░ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрд░рд╛рдореАрдЯрд░ num_feature
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 0 рдкрд░ рд╕реЗрдЯ .update()
рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдЙрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, num_feature
рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдорд╛рди рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рд╡рд┐рднрд╛рдЬрди рджреЛрд╖ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрддрд╛ рд╣реИ:
booster_ = xgboost.Booster({'objective': 'reg:linear', 'num_feature': dtrain.num_col()})
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ xgboost.Booster()
рдХреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдпрд╛ рддреЛ cache=()
рдЦрд╛рд▓реА рд╣реИ, рдпрд╛
'num_feature'
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ params
рддрд░реНрдХ рдореЗрдВ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрдбрд╝ рдХреНрдпрд╛ рдереАред рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХреЙрд▓ рдХрд░рдХреЗ рдПрдХ рдЦрд╛рд▓реА рдмреВрд╕реНрдЯрд░ рдмрдирд╛рдирд╛
рдХреЗрд╡рд▓ GBTree рдмреВрд╕реНрдЯрд░ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрд░рд╛рдореАрдЯрд░
num_feature
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 0 рдкрд░ рд╕реЗрдЯ
.update()
рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдЙрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ редрд╣рд╛рд▓рд╛рдВрдХрд┐,
num_feature
рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдорд╛рди рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рд╡рд┐рднрд╛рдЬрди рджреЛрд╖ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрддрд╛ рд╣реИ:рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐
xgboost.Booster()
рдХреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдпрд╛ рддреЛcache=()
рдЦрд╛рд▓реА рд╣реИ, рдпрд╛'num_feature'
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗparams
рддрд░реНрдХ рдореЗрдВ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред