рдореБрдЭреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреБрд░реЛрдз рдорд┐рд▓реЗ,
рдпрд╛рдиреА рдЬрдм рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рддрдп рдХреА рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЛ рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдВред рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реБрдЪрд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ рдЕрдЧрд░ рдЗрд╕ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реБрдЪрд┐ рд╣реИ,
рдореБрдЭреЗ рд╕рдореБрджрд╛рдп рдХреЗ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рд╕реЗ рдмреАрдЯрд╛ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорджрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдВ
рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдВрд╕реНрдХрд░рдг https://github.com/dmlc/xgboost/pull/1516 рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ https://github.com/tqchen/xgboost ,
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ (рд╕рдВрднрд╡рддрдГ рдЕрдЬрдЧрд░, рдЖрд░ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╡ рд╣реИ)
monotone_constraints = "(0,1,1,0)"
рджреЛ рддрд░реНрдХ рд╣реИрдВ
monotone_constraints
рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд▓рдВрдмрд╛рдИ рдореЗрдВ рдПрдХ рд╕реВрдЪреА рд╣реИ, 1 рдореЛрдиреЛрдЯреЛрдирд┐рдХ рд╡реГрджреНрдзрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, - 1 рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрдо рд╣реЛрдирд╛, 0 рдХрд╛ рдЕрд░реНрде рдХреЛрдИ рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХрдо рд╣реИ, рддреЛ 0 рдХреЛ рдЧрджреНрджреЗрджрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдмрд╣реБ-рдХреЛрд░ рдкрд░ рд╕рдЯреАрдХ рд▓рд╛рд▓рдЪреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рд╣реИред рд╡рд┐рддрд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
@tqchen рдореБрдЭреЗ рдХреБрдЫ рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдмрдирд╛рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдореЛрдиреЛрдЯреЛрди рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЬреАрдмреАрдПрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЬ рдХрд╛рдо рдкрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рдорд┐рд▓рд╛ред рдпрд╣ рдПрдХ рдЯреНрд╡реАрдбреА рд╡рд┐рдЪрд▓рди рд╣рд╛рдирд┐ рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рдХрд╕реНрдЯрдо рд╣рд╛рдирд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдЬ рд╣реИред
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдореМрдХрд╛ рд▓рдЧрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдмрд╛рдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░, GBM(R Package) рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдПрдХрд░рд╕рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ XGBoost рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ?
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ XGBoost рд╡реИрд╢реНрд╡рд┐рдХ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХреЗред
рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдпрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рдмрд╛рдзрд╛ рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдЧрд▓рдд рд▓рд┐рдВрдХ рдкреЗрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣рд╛рдВ рд╕рд╣реА рд╣реИ (рд▓рд┐рдВрдХ)
рдкреНрд░рддреНрдпреЗрдХ рдкреЗрдбрд╝ рдХреЗрд╡рд▓ рд░реБрдЪрд┐ рд╡рд╛рд▓реЗ рдлреАрдЪрд░ рдХреЗ рдХреБрдЫ рд╕рдмрд╕реЗрдЯ рдореЗрдВ рдореЛрдиреЛрдЯреЛрдирд┐рдХ рдмрд╛рдзрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдХрдИ рдкреЗрдбрд╝ рдПрдХ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЙрд╕ рдлреАрдЪрд░ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рд╕рдордЧреНрд░ рдПрдХрд░рд╕рддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░ рд╕рдХреЗрдВред
рдареАрдХ рд╣реИ, рдореЗрд░реА рд╕рдордЭ рдореЗрдВ, рдЗрд╕реЗ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рдЖрдЬрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдПрдХ рдЕрд╡рд┐рднрд╛рдЬреНрдп рдкреНрд░рддрд┐рдЧрдорди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХрд░рд╕рддрд╛ рдмрд╛рдзрд╛ рдХреЗ рдХреБрдЫ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдПред рдЖрдк рдпрд╣рд╛рдВ рдХреЛрдб рдФрд░ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд▓реЛрдХрди:
рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореИрдВ рдмрд╛рдзрд╛ = -1 рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдмрдЧ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдПрдХ рдлрд┐рдХреНрд╕ рдХреЛ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛, рдХреГрдкрдпрд╛ рджреЗрдЦреЗрдВ рдХрд┐ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдХреГрдкрдпрд╛ рдпрд╣ рднреА рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХрдИ рдмрд╛рдзрд╛рдПрдВ рд╣реЛрдВ
@tqchen рдореИрдВрдиреЗ
рдЖрдЗрдП рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдХреБрдЫ рдорд╛рдирдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдо рдЧрддрд┐ рдШрдЯ рд░рд╣реА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
@tqchen рдореИрдВрдиреЗ рджреЛ рдЪрд░ рдореЙрдбрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдПрдХ рдмрдврд╝рддреА рд╣реБрдИ рдмрд╛рдзрд╛ рдХреЗ рд╕рд╛рде рдФрд░ рдПрдХ рдШрдЯрддреЗ рд╣реБрдП:
params_constrained = params.copy()
params_constrained['updater'] = "grow_monotone_colmaker,prune"
params_constrained['monotone_constraints'] = "(1,-1)"
рдкрд░рд┐рдгрд╛рдо рдЕрдЪреНрдЫреЗ рд╣реИрдВ
рдореИрдВ рдЖрдЬ рджреЛрдкрд╣рд░ рдХреБрдЫ рд╕рдордп рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
рдореИрдВрдиреЗ рдореЛрдирдЯреЛрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд╣рдЪрд╛рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП #1516 рдореЗрдВ рдПрдХ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЗрд╡рд▓ monotone_constraints = "(0,1,1,0)"
рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдпрджрд┐ рдЧрддрд┐ рдкрд░реАрдХреНрд╖рдг рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░ рджреВрдВрдЧрд╛, рдФрд░ рд╣рдо рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ
@madrury @XiaoxiaoWang87
рдпрд╣рд╛рдБ рдмрд╣реБрднрд┐рдиреНрдирд░реВрдкреА рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝реЗ рдЧрдП рдкрд░реАрдХреНрд╖рдг:
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ред рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░реВрдВрдЧрд╛ред рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдФрд░ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред
рдореИрдВ рдХрд▓ рдЗрд╕реЗ рдмрдврд╝рд╛рдКрдВрдЧрд╛ред рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд░рдгреА рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реА ++ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВред
рдореИрдВ рдЖрд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рджреЛ-рдЪрд░ рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐
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)
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)
рдмрд╛рдзрд╛ рдЖрдВрд╢рд┐рдХ рдЖрджреЗрд╢ рдкрд░ рдХреА рдЧрдИ рдереАред рддреЛ рдмрд╛рдзрд╛ рддрднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ рдЬрдм рд╣рдо рдЕрдиреНрдп рдЕрдХреНрд╖ рдХреЛ рд╕реНрдерд┐рд░ рд░рдЦрддреЗ рд╣реБрдП рдореЛрдирдЯреЛрди рдЕрдХреНрд╖ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛ рд░рд╣реЗ рд╣реЛрдВ
@ 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)
рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдВрд╢рд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рднреВрдЦрдВрдб рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реВрдВ (рдПрдХ рдордирдорд╛рдирд╛ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП):
рдХреЛрдб:
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)
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)
@ 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 - "рдордзреНрдп" рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ Sklearn api рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж!