Xgboost: [рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛] рд╡реГрдХреНрд╖ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдмрд╛рдзрд╛рдПрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдЕрдЧре░ 2016  ┬╖  46рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dmlc/xgboost

рдореБрдЭреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреБрд░реЛрдз рдорд┐рд▓реЗ,

рдпрд╛рдиреА рдЬрдм рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рддрдп рдХреА рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЛ рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдВред рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реБрдЪрд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ рдЕрдЧрд░ рдЗрд╕ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реБрдЪрд┐ рд╣реИ,

рдореБрдЭреЗ рд╕рдореБрджрд╛рдп рдХреЗ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рд╕реЗ рдмреАрдЯрд╛ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорджрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдВ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ Sklearn api рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж!

рд╕рднреА 46 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдВрд╕реНрдХрд░рдг https://github.com/dmlc/xgboost/pull/1516 рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ https://github.com/tqchen/xgboost ,

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ (рд╕рдВрднрд╡рддрдГ рдЕрдЬрдЧрд░, рдЖрд░ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╡ рд╣реИ)

monotone_constraints = "(0,1,1,0)"

рджреЛ рддрд░реНрдХ рд╣реИрдВ

  • monotone_constraints рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд▓рдВрдмрд╛рдИ рдореЗрдВ рдПрдХ рд╕реВрдЪреА рд╣реИ, 1 рдореЛрдиреЛрдЯреЛрдирд┐рдХ рд╡реГрджреНрдзрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, - 1 рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрдо рд╣реЛрдирд╛, 0 рдХрд╛ рдЕрд░реНрде рдХреЛрдИ рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХрдо рд╣реИ, рддреЛ 0 рдХреЛ рдЧрджреНрджреЗрджрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

    • рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдЕрдЬрдЧрд░ рдХреЗ рдЯрдкрд▓ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЖрдк r . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЗрдВ

  • [x] рдореВрд▓ рдЯреНрд░реА рдмреВрд╕реНрдЯрд░ рдХреА рдЧрддрд┐ рдзреАрдореА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ (рдореИрдВрдиреЗ рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдЙрдиреНрд╣реЗрдВ рдЗрдирд▓рд╛рдЗрди рдХрд░ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)
  • [x] рдореЛрдиреЛрдЯреЛрдирд┐рдХ рд░рд┐рдЧреНрд░реЗрд╢рди рдХреА рдЧрддрд┐ рдФрд░ рд╢реБрджреНрдзрддрд╛
  • [x] рдЗрд╕ рдмрд╛рдзрд╛ рдХреЛ рдкреЗрд╢ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рди

рдЬреНрдЮрд╛рдд рд╕реАрдорд╛рдПрдВ

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдмрд╣реБ-рдХреЛрд░ рдкрд░ рд╕рдЯреАрдХ рд▓рд╛рд▓рдЪреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рд╣реИред рд╡рд┐рддрд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ

@tqchen рдореБрдЭреЗ рдХреБрдЫ рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдмрдирд╛рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдореЛрдиреЛрдЯреЛрди рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЬреАрдмреАрдПрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЬ рдХрд╛рдо рдкрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рдорд┐рд▓рд╛ред рдпрд╣ рдПрдХ рдЯреНрд╡реАрдбреА рд╡рд┐рдЪрд▓рди рд╣рд╛рдирд┐ рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рдХрд╕реНрдЯрдо рд╣рд╛рдирд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдЬ рд╣реИред

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдореМрдХрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдмрд╛рдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░, GBM(R Package) рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдПрдХрд░рд╕рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ XGBoost рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ?
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ XGBoost рд╡реИрд╢реНрд╡рд┐рдХ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХреЗред

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдпрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рдмрд╛рдзрд╛ рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдЧрд▓рдд рд▓рд┐рдВрдХ рдкреЗрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣рд╛рдВ рд╕рд╣реА рд╣реИ (рд▓рд┐рдВрдХ)
рдкреНрд░рддреНрдпреЗрдХ рдкреЗрдбрд╝ рдХреЗрд╡рд▓ рд░реБрдЪрд┐ рд╡рд╛рд▓реЗ рдлреАрдЪрд░ рдХреЗ рдХреБрдЫ рд╕рдмрд╕реЗрдЯ рдореЗрдВ рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдмрд╛рдзрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдХрдИ рдкреЗрдбрд╝ рдПрдХ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЙрд╕ рдлреАрдЪрд░ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рд╕рдордЧреНрд░ рдПрдХрд░рд╕рддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░ рд╕рдХреЗрдВред

рдареАрдХ рд╣реИ, рдореЗрд░реА рд╕рдордЭ рдореЗрдВ, рдЗрд╕реЗ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рдЖрдЬрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдПрдХ рдЕрд╡рд┐рднрд╛рдЬреНрдп рдкреНрд░рддрд┐рдЧрдорди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХрд░рд╕рддрд╛ рдмрд╛рдзрд╛ рдХреЗ рдХреБрдЫ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдПред рдЖрдк рдпрд╣рд╛рдВ рдХреЛрдб рдФрд░ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

https://github.com/XiaoxiaoWang87/xgboost_mono_test/blob/master/xgb_monotonicity_constraint_testing1-univariate.ipynb

рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд▓реЛрдХрди:

  • рдПрдХрд▓ рдЪрд░ рдкреНрд░рддрд┐рдЧрдорди рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП, рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдмрд╛рдзрд╛ = +1 рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ
  • рдПрдХ рдПрдХрд▓ рдЪрд░ рдкреНрд░рддрд┐рдЧрдорди рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдмрд╛рдзрд╛ = -1 рдПрдХ рдиреАрд░рд╕ рд░реВрдк рд╕реЗ рдШрдЯрддреЗ рдХрд╛рд░реНрдп рдХреЛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдмрд▓реНрдХрд┐, рдпрд╣ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╛рдзреНрдпрддрд╛ рдХреЛ рдордЬрдмреВрд░ рдХрд░рддреЗ рд╕рдордп рд╕реБрдзрд╛рд░ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рддрд┐рдпрд╛рдирдХреА рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдлрд╝реНрд▓рд┐рдк рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдмрд╛рдзрд╛ рдХреЛ +1 рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ)ред
  • рдмрд╛рдзрд╛ рдЬреЛрдбрд╝рдирд╛ (рд╕рд╣реА рдврдВрдЧ рд╕реЗ) рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдУрд╡рд░рдлрд┐рдЯрд┐рдВрдЧ рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рди/рд╡реНрдпрд╛рдЦреНрдпрд╛ рд▓рд╛рдн рд▓рд╛ рд╕рдХрддрд╛ рд╣реИред

рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореИрдВ рдмрд╛рдзрд╛ = -1 рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдмрдЧ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдПрдХ рдлрд┐рдХреНрд╕ рдХреЛ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛, рдХреГрдкрдпрд╛ рджреЗрдЦреЗрдВ рдХрд┐ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдХреГрдкрдпрд╛ рдпрд╣ рднреА рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХрдИ рдмрд╛рдзрд╛рдПрдВ рд╣реЛрдВ

@tqchen рдореИрдВрдиреЗ

xgboost-no-constraint
xgboost-with-constraint

рдЖрдЗрдП рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдХреБрдЫ рдорд╛рдирдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдо рдЧрддрд┐ рдШрдЯ рд░рд╣реА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

@tqchen рдореИрдВрдиреЗ рджреЛ рдЪрд░ рдореЙрдбрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдПрдХ рдмрдврд╝рддреА рд╣реБрдИ рдмрд╛рдзрд╛ рдХреЗ рд╕рд╛рде рдФрд░ рдПрдХ рдШрдЯрддреЗ рд╣реБрдП:

params_constrained = params.copy()
params_constrained['updater'] = "grow_monotone_colmaker,prune"
params_constrained['monotone_constraints'] = "(1,-1)"

рдкрд░рд┐рдгрд╛рдо рдЕрдЪреНрдЫреЗ рд╣реИрдВ

xgboost-two-vars-increasing
xgboost-two-vars-decreasing

рдореИрдВ рдЖрдЬ рджреЛрдкрд╣рд░ рдХреБрдЫ рд╕рдордп рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдореИрдВрдиреЗ рдореЛрдирдЯреЛрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд╣рдЪрд╛рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП #1516 рдореЗрдВ рдПрдХ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЗрд╡рд▓ monotone_constraints = "(0,1,1,0)" рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдпрджрд┐ рдЧрддрд┐ рдкрд░реАрдХреНрд╖рдг рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░ рджреВрдВрдЧрд╛, рдФрд░ рд╣рдо рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ

@madrury @XiaoxiaoWang87

рдпрд╣рд╛рдБ рдмрд╣реБрднрд┐рдиреНрдирд░реВрдкреА рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝реЗ рдЧрдП рдкрд░реАрдХреНрд╖рдг:

https://github.com/XiaoxiaoWang87/xgboost_mono_test/blob/master/xgb_monotonicity_constraint_testing2-multivariate.ipynb

  • рдореИрдВ рдЕрдм рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рджреЛрдиреЛрдВ рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдмрд╛рдзрд╛ = 1 рдФрд░ = -1 рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
  • рдПрдХрд░рд╕рддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдЧрддрд┐ * рдЧрд┐рд░рд╛рд╡рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ
    *рдЧрддрд┐ = рдФрд╕рдд [рдЬрд▓реНрджреА рд░реБрдХрдиреЗ рддрдХ рдХрд╛ рд╕рдордп/рдЬрд▓реНрджреА рд░реБрдХрдиреЗ рддрдХ рдмреВрд╕реНрдЯрд┐рдВрдЧ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛]

no constraint: 964.9 microseconds per iteration
with constraint: 861.7 microseconds per iteration

(рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧрддрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ)

  • рдЧреИрд░-рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рджрд┐рд╢рд╛ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ рдЖ рд╕рдХрддреА рд╣реИред
  • рд╡рд┐рднрд┐рдиреНрди рд╣рд╛рдЗрдкрд░-рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЦреЗрд▓рддреЗ рд╕рдордп Check failed: (wleft) <= (wright) рдХрд╛рд░рдг рдХреЛрдб рдХреНрд░реИрд╢ рджреЗрдЦрдирд╛ред

рдореИрдВрдиреЗ рдЬреНрдпреВрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рдкреНрд░рдпреЛрдЧ рдЪрд▓рд╛рдПред

рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг: рдХреБрдЫ рд╕рд░рд▓ рдирдХрд▓реА рдбреЗрдЯрд╛ред рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рдПрдХ рдмрдврд╝рддреА рдФрд░ рдПрдХ рдШрдЯрддреА, рд▓реЗрдХрд┐рди рдПрдХ рдЫреЛрдЯреА рд╕рд╛рдЗрдирд╕реЙрдЗрдбрд▓ рддрд░рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрд░реЛрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХрд░рд╕ рди рд╣реЛ

X = np.random.random(size=(N, K))
y = (5*X[:, 0] + np.sin(5*2*pi*X[:, 0])
     - 5*X[:, 1] - np.cos(5*2*pi*X[:, 1])
     + np.random.normal(loc=0.0, scale=0.01, size=N))

рдореЛрдиреЛрдЯреЛрди рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ xgboosts рдХреЗ рд╕рдордп рдкрд░рд┐рдгрд╛рдо рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВред рдореИрдВрдиреЗ рдЬрд▓реНрджреА рд░реБрдХрдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрдврд╝рд╛рдпрд╛ред

рдореЛрдиреЛрдЯреЛрди рдмрд╛рдзрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдкрд╣рд▓рд╛:

%%timeit -n 100
model_no_constraints = xgb.train(params, dtrain, 
                                 num_boost_round = 2500, 
                                 verbose_eval = False)

100 loops, best of 3: 246 ms per loop

рдФрд░ рдпрд╣рд╛рдБ рдПрдХрд░рд╕рддрд╛ рдХреА рдХрдореА рдХреЗ рд╕рд╛рде

%%timeit -n 100
model_with_constraints = xgb.train(params_constrained, dtrain, 
                                 num_boost_round = 2500, 
                                 verbose_eval = False)

100 loops, best of 3: 196 ms per loop

рджреВрд╕рд░рд╛ рдкрд░реАрдХреНрд╖рдг: рдХреИрд▓рд┐рдлрд╝реЛрд░реНрдирд┐рдпрд╛ рдПрдЪрд╣рд╛рдЙрд╕рд┐рдВрдЧ рдбреЗрдЯрд╛ рд╕реНрдХреЗрд▓реЗрд░ рд╕реЗред рдмрд╛рдзрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛

%%timeit -n 10
model_no_constraints = xgb.train(params, dtrain, 
                                 num_boost_round = 2500, 
                                 verbose_eval = False)

10 loops, best of 3: 5.9 s per loop

рдпрд╣рд╛рдВ рд╡реЗ рдмрд╛рдзрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ

print(params_constrained['monotone_constraints'])

(1,1,1,0,0,1,0,0)

рдФрд░ рд╡рд┐рд╡рд╢ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рд╕рдордп

%%timeit -n 10
model_no_constraints = xgb.train(params, dtrain, 
                                 num_boost_round = 2500, 
                                 verbose_eval = False)

10 loops, best of 3: 6.08 s per loop

@ XiaoxiaoWang87 рдореИрдВрдиреЗ рдПрдХ рдФрд░ рдкреАрдЖрд░ рдХреЛ рд╡реЗрд▓реЗ рдФрд░ рд░рд╛рдЗрдЯ рдкрд░ рдЪреЗрдХ рдХреЛ рдвреАрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@madrury рдХреНрдпрд╛ рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрд╛рдзрд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ XGBoost рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@tqchen рдЬрд╝рд░реВрд░ред рдХреНрдпрд╛ рдЖрдк рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИрд╢ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдореБрдЭреЗ рдореЛрдиреЛрдЯреЛрди рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╣рд╛рдБ рдкрд┐рдЫрд▓рд╛ рд╡рд╛рд▓рд╛ рдХрд░реЗрдЧрд╛

@tqchen рдЕрджреНрдпрддрди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдкрд░, рдореБрдЭреЗ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓ рд░рд╣реА рд╣реИрдВ рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдереАрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрд╛рд░рдг рдЖрдк рдкрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреВрджрддрд╛ рд╣реИред

рдпрджрд┐ рдореИрдВ рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рд╣реА рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЕрдкрд╡рд╛рдж рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рдпрд╣рд╛рдВ рдкреВрд░реНрдг рдЯреНрд░реЗрд╕рдмреИрдХ рд╣реИ:

XGBoostError                              Traceback (most recent call last)
<ipython-input-14-63a9f6e16c9a> in <module>()
      8    model_with_constraints = xgb.train(params, dtrain, 
      9                                        num_boost_round = 1000, evals = evallist,
---> 10                                    early_stopping_rounds = 10)  

/Users/matthewdrury/anaconda/lib/python2.7/site-packages/xgboost-0.6-py2.7.egg/xgboost/training.pyc in train(params, dtrain, num_boost_round, evals, obj, feval, maximize, early_stopping_rounds, evals_result, verbose_eval, learning_rates, xgb_model, callbacks)
    201                            evals=evals,
    202                            obj=obj, feval=feval,
--> 203                            xgb_model=xgb_model, callbacks=callbacks)
    204 
    205 

/Users/matthewdrury/anaconda/lib/python2.7/site-packages/xgboost-0.6-py2.7.egg/xgboost/training.pyc in _train_internal(params, dtrain, num_boost_round, evals, obj, feval, xgb_model, callbacks)
     72         # Skip the first update if it is a recovery step.
     73         if version % 2 == 0:
---> 74             bst.update(dtrain, i, obj)
     75             bst.save_rabit_checkpoint()
     76             version += 1

/Users/matthewdrury/anaconda/lib/python2.7/site-packages/xgboost-0.6-py2.7.egg/xgboost/core.pyc in update(self, dtrain, iteration, fobj)
    804 
    805         if fobj is None:
--> 806             _check_call(_LIB.XGBoosterUpdateOneIter(self.handle, iteration, dtrain.handle))
    807         else:
    808             pred = self.predict(dtrain)

/Users/matthewdrury/anaconda/lib/python2.7/site-packages/xgboost-0.6-py2.7.egg/xgboost/core.pyc in _check_call(ret)
    125     """
    126     if ret != 0:
--> 127         raise XGBoostError(_LIB.XGBGetLastError())
    128 
    129 

XGBoostError: [14:08:41] src/tree/tree_updater.cc:18: Unknown tree updater grow_monotone_colmaker

рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдХреАрд╡рд░реНрдб рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рднреА рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

TypeError                                 Traceback (most recent call last)
<ipython-input-15-ef7671f72925> in <module>()
      8                                    monotone_constraints="(1)",
      9                                    num_boost_round = 1000, evals = evallist,
---> 10                                    early_stopping_rounds = 10)  

TypeError: train() got an unexpected keyword argument 'monotone_constraints'

рдЕрджреНрдпрддрдирдХрд░реНрддрд╛ рддрд░реНрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдореЛрдиреЛрдЯреЛрди рдмрд╛рдзрд╛ рддрд░реНрдХреЛрдВ рдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд░рдЦреЗрдВ, рдЕрдм рдЬрдм рдореЛрдиреЛрдЯреЛрди рдмрд╛рдзрд╛рдПрдБ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ рддреЛ рдореЛрдиреЛрдЯреЛрди рдмрд╛рдзрд╛ рдЕрджреНрдпрддрдирдХрд░реНрддрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

@tqchen рдореЗрд░реЗ рджреЛрд╕реНрдд @amontz рдиреЗ рдореБрдЭреЗ рд╕рдВрджреЗрд╢ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреАред рдореИрдВрдиреЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ monotone_constraints рдХреЛ kwarg рдХреЗ рд░реВрдк рдореЗрдВ .train ред

рдпрд╣ рдЙрди рд╕рдорд╛рдпреЛрдЬрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рджред

@madrury рдХреНрдпрд╛ рдЖрдк рдЧрддрд┐ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ @madrury рдФрд░ @ XiaoxiaoWang87 рдЪреВрдВрдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрдм рд╡рд┐рд▓рдп рдХреЗ рдХрд░реАрдм рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордиреНрд╡рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо ipy рдиреЛрдЯрдмреБрдХ рдХреЛ рд╕реАрдзреЗ рдореБрдЦреНрдп рд░реЗрдкреЛ рдореЗрдВ рдирд╣реАрдВ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗред рд▓реЗрдХрд┐рди рдЫрд╡рд┐рдпреЛрдВ рдХреЛ https://github.com/dmlc/web-data/tree/master/xgboost рдкрд░ рдзрдХреЗрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореБрдЦреНрдп рд░реЗрдкреЛ рдкрд░ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рдореЗрдВ рдлреНрд░рдВрдЯ-рдПрдВрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рднреА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЗрдВрдЯ рдЯрдкрд▓ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯрдкрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬрд┐рд╕реЗ рдмреИрдХрдПрдВрдб рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

@ hetong007 R рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдФрд░ @slundberg рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП

@tqchen рдЬреВрд▓рд┐рдпрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ XGBoost рдХреЗ 0.4 рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓реА рдмрд╛рд░ рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╕рдордп рдЕрд▓рдЧ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдЧрд░ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИ рддреЛ рдореИрдВ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рджреВрдВрдЧрд╛ред рдЙрд╕ рд╕рдордп рдпрд╣ рдмрджрд▓рд╛рд╡ рднреА рдЬреБрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдмрд╛рдж рдореЗрдВ рдПрдХ рдореЛрдиреЛрдЯреЛрди рдмрд╛рдзрд╛ рдореЙрдбрд▓ _рдмрд┐рдирд╛_рдХреЗ рдмреАрдЪ рддреБрд▓рдирд╛ рдпрд╣рд╛рдВ рджреА рдЧрдИ рд╣реИред

рдкреНрд░рддрд┐рдмрджреНрдз 8cac37 : рдореЛрдиреЛрдЯреЛрди рдмрд╛рдзрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд╣рд▓реЗред'
рдирдХрд▓реА рдбреЗрдЯрд╛ : 100 loops, best of 3: 232 ms per loop
рдХреИрд▓рд┐рдлрд╝реЛрд░реНрдирд┐рдпрд╛ рдбреЗрдЯрд╛ : 10 loops, best of 3: 5.89 s per loop

рдкреНрд░рддрд┐рдмрджреНрдз b1c224 : рдореЛрдиреЛрдЯреЛрди рдмрд╛рдзрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рджред
рдирдХрд▓реА рдбреЗрдЯрд╛ : 100 loops, best of 3: 231 ms per loop
рдХреИрд▓рд┐рдлрд╝реЛрд░реНрдирд┐рдпрд╛ рдбреЗрдЯрд╛ : 10 loops, best of 3: 5.61 s per loop

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рдж рдХреИрд▓рд┐рдлрд╝реЛрд░реНрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЧрддрд┐ рдореБрдЭреЗ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рд╣рд░ рддрд░рд╣ рд╕реЗ рджреЛ рдмрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдпрд╣ рд╕реБрд╕рдВрдЧрдд рд╣реИред

рдореБрдЭреЗ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдПрдХ рд╢реЙрдЯ рд▓реЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдореИрдВ рдореМрдЬреВрджрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рджреЗрдЦреВрдВрдЧрд╛ рдФрд░ рдЕрдЧрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдХреБрдЫ рдПрдХ рд╕рд╛рде рд░рдЦреВрдВрдЧрд╛ред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдкреАрдЖрд░ рдХреЛ рдЕрдм рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ

рдзрдиреНрдпрд╡рд╛рдж @madruryред рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░реВрдВрдЧрд╛ред рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдФрд░ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред

рдореИрдВ рдХрд▓ рдЗрд╕реЗ рдмрдврд╝рд╛рдКрдВрдЧрд╛ред рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд░рдгреА рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реА ++ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВред

рдореИрдВ рдЖрд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рджреЛ-рдЪрд░ рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐

  1. xgboost рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЛ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  2. рдкреИрд░рд╛рдореАрдЯрд░ monotone_constraints рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдмрдирд╛рддрд╛ рд╣реИред

рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдпрджрд┐ рдореИрдВрдиреЗ рдХреЛрдИ рдЧрд▓рддреА рдХреА рд╣реИред

рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб ( рдирд╡реАрдирддрдо рдЬреАрдердм рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛, drat ):

set.seed(1024)
x1 = rnorm(1000, 10)
x2 = rnorm(1000, 10)
y = -1*x1 + rnorm(1000, 0.001) + 3*sin(x2)
train = cbind(x1, x2)

bst = xgboost(data = train, label = y, max_depth = 2,
                   eta = 0.1, nthread = 2, nrounds = 10,
                   monotone_constraints = '(1,-1)')

pred = predict(bst, train)
ind = order(train[,1])
pred.ord = pred[ind]
plot(train[,1], y, main = 'with constraint')
pred.ord = pred[order(train[,1])]
lines(pred.ord)

wc

bst = xgboost(data = train, label = y, max_depth = 2,
                   eta = 0.1, nthread = 2, nrounds = 10)

pred = predict(bst, train)
ind = order(train[,1])
pred.ord = pred[ind]
plot(train[,1], y, main = 'without constraint')
pred.ord = pred[order(train[,1])]
lines(pred.ord)

woc

рдмрд╛рдзрд╛ рдЖрдВрд╢рд┐рдХ рдЖрджреЗрд╢ рдкрд░ рдХреА рдЧрдИ рдереАред рддреЛ рдмрд╛рдзрд╛ рддрднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ рдЬрдм рд╣рдо рдЕрдиреНрдп рдЕрдХреНрд╖ рдХреЛ рд╕реНрдерд┐рд░ рд░рдЦрддреЗ рд╣реБрдП рдореЛрдирдЯреЛрди рдЕрдХреНрд╖ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛ рд░рд╣реЗ рд╣реЛрдВ

@ hetong007 рдореЗрд░реЗ рдкреНрд▓реЙрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП I

  • рдПрдХреНрд╕-рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЧреНрд░рд┐рдб рд╡рд╛рд▓реА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЙрд╕ рдЪрд░ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдлрд┐рд░ рд▓рд╛рдЗрди рдкреНрд▓реЙрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрд╣ рдЖрд░ рдореЗрдВ seq рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
  • рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдореЗрдВ рдЕрдиреНрдп рд╕рднреА рдЪрд░ рдХреЛ рдЙрдирдХреЗ рдФрд╕рдд рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдпрд╣ рдЖрд░ рдореЗрдВ colmeans рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдВ рдкрд╛рдЗрдерди рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдКрдкрд░ рд╢рд╛рдорд┐рд▓ рднреВрдЦрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордХрдХреНрд╖ рдЖрд░ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

def plot_one_feature_effect(model, X, y, idx=1):

    x_scan = np.linspace(0, 1, 100)    
    X_scan = np.empty((100, X.shape[1]))
    X_scan[:, idx] = x_scan

    left_feature_means = np.tile(X[:, :idx].mean(axis=0), (100, 1))
    right_feature_means = np.tile(X[:, (idx+1):].mean(axis=0), (100, 1))
    X_scan[:, :idx] = left_feature_means
    X_scan[:, (idx+1):] = right_feature_means

    X_plot = xgb.DMatrix(X_scan)
    y_plot = model.predict(X_plot, ntree_limit=bst.best_ntree_limit)

    plt.plot(x_scan, y_plot, color = 'black')
    plt.plot(X[:, idx], y, 'o', alpha = 0.25)

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдВрд╢рд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рднреВрдЦрдВрдб рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реВрдВ (рдПрдХ рдордирдорд╛рдирд╛ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП):

  • рдлрд╝реАрдЪрд░ X рдХреЗ рд▓рд┐рдП рдорд╛рдиреЛрдВ рдХрд╛ рдЧреНрд░рд┐рдб рд╕реНрдХреИрди рдХрд░реЗрдВред
  • рд╕реБрд╡рд┐рдзрд╛ X рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд┐рдб рдорд╛рди рдХреЗ рд▓рд┐рдП:

    • рдЗрд╕ рдорд╛рди рдкрд░ рд╕рдВрдкреВрд░реНрдг рд╕реБрд╡рд┐рдзрд╛ X рдХреЙрд▓рдо (рд╕рднреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ) рд╕реЗрдЯ рдХрд░реЗрдВред рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рддред

    • рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рдХрд░реЗрдВред

    • рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд╛ рдФрд╕рдд рд▓реЗрдВред

  • рдкрд░рд┐рдгрд╛рдореА (рдПрдХреНрд╕ рдлреАрдЪрд░ рд╡реИрд▓реНрдпреВ, рдФрд╕рдд рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА) рдЬреЛрдбрд╝реЗ рдЖрдкрдХреЛ рдПрдХреНрд╕ рдлреАрдЪрд░ рдЖрдВрд╢рд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рджреЗрддреЗ рд╣реИрдВред

рдХреЛрдб:

def plot_partial_dependency(bst, X, y, f_id):

    X_temp = X.copy()

    x_scan = np.linspace(np.percentile(X_temp[:, f_id], 0.1), np.percentile(X_temp[:, f_id], 99.5), 50)
    y_partial = []

    for point in x_scan:

        X_temp[:, f_id] = point

        dpartial = xgb.DMatrix(X_temp[:, feature_ids])
        y_partial.append(np.average(bst.predict(dpartial)))

    y_partial = np.array(y_partial)

    # Plot partial dependence

    fig, ax = plt.subplots()
    fig.set_size_inches(5, 5)
    plt.subplots_adjust(left = 0.17, right = 0.94, bottom = 0.15, top = 0.9)

    ax.plot(x_scan, y_partial, '-', color = 'black', linewidth = 1)
    ax.plot(X[:, f_id], y, 'o', color = 'blue', alpha = 0.02)

    ax.set_xlim(min(x_scan), max(x_scan))
    ax.set_xlabel('Feature X', fontsize = 10)    
    ax.set_ylabel('Partial Dependence', fontsize = 12)

рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ рд╕рд╛рдЬрд┐рд╢ рдореЗрдВ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдЧрд▓рддреА рдХреА рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЕрд╡рд┐рднрд╛рдЬреНрдп рдбреЗрдЯрд╛ рдкрд░ рдПрдХ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╣реИ, рдХрдерд╛рдирдХ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ:

set.seed(1024)
x = rnorm(1000, 10)
y = -1*x + rnorm(1000, 0.001) + 3*sin(x)
train = matrix(x, ncol = 1)

bst = xgboost(data = train, label = y, max_depth = 2,
               eta = 0.1, nthread = 2, nrounds = 100,
               monotone_constraints = '(-1)')
pred = predict(bst, train)
ind = order(train[,1])
pred.ord = pred[ind]
plot(train[,1], y, main = 'with constraint', pch=20)
lines(train[ind,1], pred.ord, col=2, lwd = 5)

rplot

bst = xgboost(data = train, label = y, max_depth = 2,
               eta = 0.1, nthread = 2, nrounds = 100)
pred = predict(bst, train)
ind = order(train[,1])
pred.ord = pred[ind]
plot(train[,1], y, main = 'without constraint', pch=20)
lines(train[ind,1], pred.ord, col=2, lwd = 5)

woc

@ hetong007 рддреЛ рдЖрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд▓рдХреНрд╖реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрд░ рд╕рд░рдгреА рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рдирд╛ рд╣реИ

monotone_constraints=c(1,-1)

рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдкреАрдЖрд░ рдХрдм рд╣реИрдВ

@ hetong007 r-blogger рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рднреА рд╕реНрд╡рд╛рдЧрдд рд╣реИ

@tqchen рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рджреЛрд╕реНрддреЛрдВ, рдореИрдВ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдпрд╛рддреНрд░рд╛ рдкрд░ рд╣реВрдВред

рдореИрдВрдиреЗ рдПрдХ рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдмрд╛рдзрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗред рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рдореИрдВ рдХрд┐рд╕реА рднреА рдЖрд▓реЛрдЪрдирд╛ рдпрд╛ рдЖрд▓реЛрдЪрдирд╛ рд╕реЗ рдЦреБрд╢ рд╣реВрдВред

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдпрд╣ рдкреВрдЫрдирд╛ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛: рдХреНрдпрд╛ рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрджрд┐ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп git clone --recursive https://github.com/dmlc/xgboost рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ?

рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдирдпрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж!

рд╣рд╛рдБ, рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд╡рд┐рд▓рдп рд╕реЗ рдкрд╣рд▓реЗ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдирдорд╕реНрддреЗ,

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдПрдХрд░реВрдкрддрд╛ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдПрдХрд░рд╕рддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рдПрдХрд░рд╕рддрд╛ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

`
df <- data.frame(y = c(2,rep(6,100),1,rep(11,100)),
x1= c(rep(1,101),rep(2,101)),x2 = c(1,rep(2,100),1,rep(2,100)))

рдкреБрд╕реНрддрдХрд╛рд▓рдп (xgboost)
рд╕реЗрдЯ.рдмреАрдЬ(0)
XGB <- xgboost(data=data.matrix(df[,-1]),label=df[,1],
рдЙрджреНрджреЗрд╢реНрдп = " рд░реЗрдЧ: рд░реИрдЦрд┐рдХ ",
рдмреИрдЧ.рдЕрдВрд╢ = 1, рдЪрд╛рд░реЛрдВ рдУрд░ = 100, monotone_constraints=c(10),
рдПрдЯрд╛ = 0.1 )

sans_corr <- data.frame(x1=c(1,2,1,2),x2=c(1,1,2,2))

sans_corr$prediction <- рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░реЗрдВ(XGB,data.matrix(sans_corr))
`

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдХреА рдореЗрд░реА рд╕рдордЭ рдФрд░ рдореЗрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ Sklearn api рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж!

рдПрдХ рдЪрд░ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдПрдХрд░рд╕рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐ рдЗрд╕реЗ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдШрдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

@davidADSP рдЖрдк рд╡рд╛рдВрдЫрд┐рдд рднрд╡рд┐рд╖реНрдпрд╡рдХреНрддрд╛ рдкрд░ рдПрдХ рд╕реНрдкреАрдпрд░рдореИрди рд╕рд╣рд╕рдВрдмрдВрдз рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрдврд╝рдирд╛ рдпрд╛ рдШрдЯрд╛рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрдорд╛рдиреНрдп рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдЬрдм 'tree_method':'hist'ред @tqchen рдХреЛрдИ рдорджрдж? рд╕рдмрдХреЛ рд╢реБрдХреНрд░реАрдпрд╛ред

mlogloss рдЬреИрд╕реЗ рдорд▓реНрдЯреАрдХреНрд▓рд╛рд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдмрд╛рдзрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ? рдХреНрдпрд╛ рдореЛрдиреЛрдЯреЛрдирд┐рд╕рд┐рдЯреА рдмрд╛рдзрд╛ рдорд▓реНрдЯреАрдХреНрд▓рд╛рд╕ рдиреБрдХрд╕рд╛рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред (рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЗрдбрд╝ рд╣реИ)

рдХреНрдпрд╛ XGBOOST рдореЗрдВ рд▓рд╛рдЧреВ рдореЛрдиреЛрд╕рд┐рдЯреА рдПрд▓реНрдЧреЛрд░рд┐рдердо рдкрд░ рдХреЛрдИ рд╢реНрд╡реЗрддрдкрддреНрд░ рд╣реИ? рдЧреНрд▓реЛрдмрд▓ рд╣реИ рдпрд╛ рд▓реЛрдХрд▓? рд╕реНрдерд╛рдиреАрдп рдорддрд▓рдм рдХреБрдЫ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЗрдХрд┐рди рдкреЗрдбрд╝ рдХреЗ рдЕрдиреНрдп рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдиреЛрдбреНрд╕ рд╕рдордЧреНрд░ рдПрдХрд░рд╕рддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдкреИрджрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ L412-417 рд▓рд╛рдЗрди рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпреЛрдВ "w" рдШрд┐рд░рд╛ рд╣реБрдЖ рд╣реИ- рдКрдкрд░реА рдФрд░ рдирд┐рдЪрд▓рд╛ред рдпрд╣ рдХреИрд╕реЗ рдПрдХрд░рд╕рддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдкрдВрдХреНрддрд┐ 457 - "рдордзреНрдп" рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

choushishi picture choushishi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

uasthana15 picture uasthana15  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

XiaoxiaoWang87 picture XiaoxiaoWang87  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

matthewmav picture matthewmav  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

FabHan picture FabHan  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ