Scikit-learn: GridSearchCV рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╕рдХреНрд╖рдо (рдпрд╛рдиреА w / n_jobs! = 1) рдХреЗ рд╕рд╛рде рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рдХреЗ рд▓рд┐рдП рдЬрдорд╛ рджреЗрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдЕрдЧре░ 2015  ┬╖  88рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: scikit-learn/scikit-learn

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ (рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ) рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдЧреНрд░рд┐рдбрд╢реНрд░реЛрдХрд╡ реи, реи. p, рей.рей, рдФрд░ рей.рек, рджреЛ рдиреМрдХрд░рд┐рдпреЛрдВ, рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореИрдХ рдУрдПрд╕рдПрдХреНрд╕ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ / рд▓реИрдкрдЯреЙрдк, рдФрд░ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВред рд╕реАрдЦреЗрдВ (рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрджреНрдпрддрди рд░рдЦрддрд╛ рд╣реВрдВ)ред

рдореИрдВрдиреЗ рдЗрди рд╕рднреА рд╕реБрдЭрд╛рд╡реЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

https://github.com/scikit-learn/scikit-learn/issues/3605 - рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реНрдЯрд╛рд░реНрдЯ рд╡рд┐рдзрд┐ рдХреЛ 'forkserver' рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛
https://github.com/scikit-learn/scikit-learn/issues/2889 - рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд╛рд╕ рд╣реЛрдиреЗ рдкрд░ рд╣реА рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ (рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рд╣реИ рдЬрд╣рд╛рдБ nidjobs рдХреЗ рд╕рд╛рде рд╡рд╣реА рдЧреНрд░рд┐рдбрд╕рд░реНрдЪрд╡реАрд╡реА рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ! = 1 рдлреНрд░реАрдЬ рдХреЗ рд╕рд╛рде рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд░ рд▓реЗрдХрд┐рди рдПрдХ рдХреЗ рдмрд┐рдирд╛ рдареАрдХ рд╣реИ)
https://github.com
рдЗрдирдкреБрдЯ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ n_jobs = 1 рдХреЗ рд╕рд╛рде рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ - рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЬрд┐рди рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдореИрдВ рдХрдИ рдереНрд░реЗрдб рдкрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡реЗ рдПрдХ рдереНрд░реЗрдб рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ

рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╣реЛрдиреЗ рдкрд░ рдкреЙрдк рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИ рдЬрдм рдореИрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реВрдВ, рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 100% рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдЧреНрд░рд┐рдбрд╕рд░реНрдЪрд╕реАрд╡реА рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдкрд░ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рднреА рд╕реНрдХреЗрд▓реЗрд░ рд╡рд┐рддрд░рдг рдореЗрдВ рдореИрдВ рдПрдХ рдкрд░ рд╣реВрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХреЛ Paralell рдореЗрдВ 'рдереНрд░реЗрдбрд┐рдВрдЧ' (рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп) рдореЗрдВ рдмреИрдХрдПрдВрдб рд╕реЗрдЯ рдХреЛ рдмрджрд▓рдирд╛ред

рдореИрдВрдиреЗ рдЙрд╕ рд╣реИрдХ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧ n_jobs = 1 рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ рдХрд┐ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдХреЗ рдереНрд░реЗрдбрд┐рдВрдЧ рдмреИрдХрдПрдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рд▓рд╛рдн рдХреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛рдП? рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЬрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рд╣реИред

btw рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореИрдВ рдкрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА:

  • рдореИрдХ рдУрдПрд╕ 10.9.5
  • рдкрд╛рдпрдерди 3.4.3 :: рдХреЙрдиреНрдЯрд┐рдирдо рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕, рдЗрдВрдХред
  • scikit рд╕реАрдЦрдиреЗ == 0.16.1
  • scipy == 0.16.0
  • numpy == 1.9.2
  • рдкрд╛рдВрдбрд╛ == 0.16.2
  • joblib == 0.8.4

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

@ рдПрд░рд┐рдХ-рдЪреЗрдХ рдпрджрд┐ рдЖрдк рдкрд╛рдпрдереЙрди 3.4 рдпрд╛ 3.5 рдХреЗ рдЕрдзреАрди рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдирд┐рдореНрди рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдЕрдкрдиреЗ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ:

export JOBLIB_START_METHOD="forkserver"

рдЬреИрд╕рд╛ рдХрд┐ joblib рдбреЙрдХреНрд╕ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред Forkserver рдореЛрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред

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

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЙрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ ??

рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ: рдХреБрдЫ рдЕрдиреБрдорд╛рдирдХ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛рдлреА рд▓рд╛рдн рджреЗрдЧреА, рд╡реЗ рдЬрд╣рд╛рдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рдо рдмрд┐рдирд╛ рдЬреАрдЖрдИрдПрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдпрд╛ рд╕рд╛рдЗрдерди рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; backend='threading' рдХрд╛рдлреА рд╣рд╛рд▓ рдХреА рдмрд╛рдд рд╣реИред

рдЕрд╕рд▓реА рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рд╣рдо рдФрд░ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЖрдкрдиреЗ рдХрд┐рди рдЖрдзрд╛рд░ рдЕрдиреБрдорд╛рдирдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ?

@jnothman рдордВрдЪ рд╕реЗ рдЖрдк OSX 10.9.5 рдХрд░рддреЗ рд╣реИрдВ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╣рд╛рдБ, рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдирд╣реАрдВ рд╣реИ рдЬрдм рдореБрдЭреЗ рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рд╣реБрдИ рд╣реИред

рд╕рдВрднрд╡рддрдГ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдпрд╣ рдерд╛ рдХрд┐ рдЬрдм рдореИрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рддреЛ рдореИрдВ рд╣рдореЗрд╢рд╛ IPython рдиреЛрдЯрдмреБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднрд░реА рд╣реБрдИ рдиреЛрдЯрдмреБрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд░реНрдиреЗрд▓ рд╣реИ, рдЬрд╣рд╛рдВ рдЕрдЧрд░ рдореИрдВ n_jobs рдХреЗ рд╕рд╛рде "рд╕реНрдХреЛрд░рд┐рдВрдЧ" рддрд░реНрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ! = 1 рддреЛ GridSearchCV рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдЧ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдореИрдВ рдЙрд╕ рддрд░реНрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рд╕рдм рдареАрдХ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдореИрдВ рдЬреЛ рд╕реНрдХреЛрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реВрдВ, рд╡рд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рд░рдВрддрд░ рдлреНрд▓реЛрдЯ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрднреА рднреА рдЬрдорд╛ рджреЗрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдк n_jobs = 1 рдХреЗ рд╕рд╛рде рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ)ред

рдкреБрди: рдпрд╣ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ GridSearchCV рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБред рдореИрдВ рдЖрдо рддреМрд░ рдкрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдЕрднреА рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХрд┐рд╕реА рднреА рдЕрдиреБрдорд╛рдирдХ рдХреЗ рд╕рд╛рде рдКрдкрд░ рдмрддрд╛рдИ рдЧрдИ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдореИрдВ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдереА) LogisticRegression, SGDClassifier, GBRT, рдФрд░ RF)ред

рдореИрдВ рдХреБрдЫ рднреА рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЬреЛ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЙрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЗрд╕ рд╕рдВрджрд░реНрдн рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ?

рдХреНрдпрд╛ рдЖрдк рдЧрддрд┐ рдХреЗ рдврд╛рдВрдЪреЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдЦрд╕рдЦрд╕ тАЛтАЛрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?

рдирд╣реАрдВ, рдЬрдм рддрдХ рдореИрдВ рдХреБрдЫ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо рдЧрддрд┐рдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рддреНрд╡рд░рд┐рдд рдкреИрдХреЗрдЬ рдореМрдЬреВрдж рд╣реЛрдЧрд╛:

(research3.4) рдИрдЪрд┐рдВрдЧ $ рдкрд╛рдЗрдк рдлреНрд░реАрдЬ | рдЬреАрдЖрд░рдкреА рд╕реБрдиреНрди
numpy == 1.9.2
(research3.4) рдЗрдХреЛрдЪреЗрдб $ рдХреЛрдВрдбрд╛ рдЕрдкрдбреЗрдЯ рдореЗрдВ рддреЗрдЬреА рдЖрдИ
рддреНрд░реБрдЯрд┐: рдкреИрдХреЗрдЬ 'рдПрдХреНрд╕реАрд▓реЗрдВрдЯ' рдХреЛ /Users/eceshop/anaconda/envs/research3.4 рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

100% рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдЕрдЬреНрдЮрд╛рдирддрд╛ рдХреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ рдХреБрдЫ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдХреЛрдВрдбрд╛ рдХреА рдЧрддрд┐ рд╕реЗрдм рдХреА рдЧрддрд┐ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ:
http://docs.continuum.io/accelerate/index
https://developer.apple.com/library/mac/documentation/Accelerate/Reference/AccelerateFWRef/

рдХреЛрдВрдбрд╛ рдХреА рдЧрддрд┐ рдПрдордХреЗрдПрд▓ рд╕рдВрдХреБрд▓ рдХреЗ рддреНрд╡рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ, рд╕реЗрдм рдХреА рдЧрддрд┐ рдПрдордХреЗрдПрд▓ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред

рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ numpy.__config__.show() рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?

рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ IIRC рдореЗрдВ рддреЗрдЬреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдкрд┐рдВрдЧ @ogrisel

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ:

рдПрди рдкреАред config .show ()
atlas_3_10_blas_threads_info:
рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
atlas_info:
рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
atlas_3_10_info:
рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
atlas_threads_info:
рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
atlas_3_10_blas_info:
рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
blas_opt_info:
extra_compile_args = ['-msse3', '-DAPPLE_ACCELERATE_SGEMV_PATCH', '-I / рд╕рд┐рд╕реНрдЯрдо / рд▓рд╛рдЗрдмреНрд░реЗрд░реА / рдлреНрд░реЗрдорд╡рд░реНрдХ / vecLib.fatwork / Headers']
extra_link_args = ['-Wl, -framework', '-Wl, Accelerate']
define_macros = [('NO_ATLAS_INFO', 3)]
lapack_mkl_info:
рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
atlas_blas_info:
рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
mkl_info:
рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
lapack_opt_info:
extra_compile_args = ['-msse3', '-DAPPLE_ACCELERATE_SGEMV_PATCH']
extra_link_args = ['-Wl, -framework', '-Wl, Accelerate']
define_macros = [('NO_ATLAS_INFO', 3)]
blas_mkl_info:
рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
atlas_3_10_threads_info:
рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
openblas_info:
рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
openblas_lapack_info:
рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
atlas_blas_threads_info:
рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ

рд╣рд╛рдБ рддреЛ рдпрд╣ рдПрдХ рдЬреНрдЮрд╛рдд рдореБрджреНрджрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдирдЬрд░ рд░рдЦрдиреЗ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред Accelerate рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБред рдЬреАрдЖрдИрдПрд▓ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдкрд░ рдереНрд░реЗрдбрд┐рдВрдЧ рдмреИрдХрдПрдВрдб рд╣реА рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ?

рд╕рдордЭ рдЧрдпрд╛, рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдЦрд╕рдЦрд╕ тАЛтАЛрдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдореБрдЭреЗ рд╕рд┐рд░реНрдл рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдВрдбрд╛ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рдореИрдВ рд╕реНрд░реЛрдд рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдФрд░ рдЙрди рд╕реЗрдм рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдЬреЛ рддрд░реНрдХ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдЗрд╕ рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдореБрджреНрджреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╣реИред рдмрдВрдж рдХрд░реЛ рдЕрдЧрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдорд░реЗ рд╣реБрдП рдШреЛрдбрд╝реЗ рдХреА рдкрд┐рдЯрд╛рдИ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдХреЛрдВрдбрд╛ рдХреЛ рдЧрддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛;)

рд╢рд╛рдпрдж рд╣рдо joblib рдореЗрдВ рдЬрдорд╛рдирдд рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЖрд╣ рдорд╣рд╛рди, рд╕рд╛рддрддреНрдп рдиреЗ рдЙрд╕ рд╣рд╛рд╣рд╛ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдм рдХрд╛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ред

рдХреЛрдИ $ 0 рд╕реБрдЭрд╛рд╡ рдорд┐рд▓рд╛? рдФрд░ рд╡реИрд╕реЗ рднреА рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдУрд╣, рдФрд░ рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдкреВрдЫрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рддрдереНрдп рд╣реИ рдХрд┐ рдореИрдВ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рдордВрдЪ рдкрд░ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВ рдЬрдм рдПрдХ рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ? рдореЗрд░реЗ рдЬреАрд╡рди рдХреЗ рд▓рд┐рдП рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ рдЧреНрд░рд┐рдб_рд╕рд░реНрдЪрд╣реЛрдо рд╕реНрд░реЛрдд рдХреЛрдб рджрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдФрд░ рдЗрд╕рд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдореБрдЭреЗ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдпрд╛рдж рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкреВрд░реНрд╡ рдореЗрдВ GridSearchCV рдХреЗ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА рдЬреЛ рдХрд┐ IPython рд╕рдорд╛рдирд╛рдВрддрд░ рдмреИрдХреЗрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╛рдирдХрд░ рдХрд┐ рдореИрдВрдиреЗ рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдкрд░ рджреЛрдмрд╛рд░рд╛ рдЧреМрд░ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛? рдпрд╣ рд╕рдорд╛рдзрд╛рди рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рджрд░реНрдж рд╣реЛрддрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рдХрд╕реНрдЯрдо рд╡рд░реНрдЧ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдЦреБрдж рдХреЗ рдмрдЬрд╛рдп рдкрд╛рдЗрдердирде рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдЕрдиреНрдп рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдкреИрд░ рд╣реЛрдВред

рдЖрдк рдПрдЯрд▓рд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рд╣реЛрдЧрд╛ [рд╕реЗрдм] рддреЗрдЬреА, рдореЗрдерд┐рдВрдХред
рд╢рд╛рдпрдж рд╡рд╣рд╛рдБ рдПрдХ рдореБрдХреНрдд MKL OS X рдХреЗ рд▓рд┐рдП рд╡рд╣рд╛рдБ рдмрд╛рд╣рд░ рдЦрд╕рдЦрд╕ тАЛтАЛрдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ? рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИред

[рдпрджрд┐ рдЖрдк рдПрдХ рдЕрдХрд╛рджрдорд┐рдХ рд╣реИрдВ, рддреЛ рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ рддреЗрдЬреА рдореБрдлреНрдд btw рд╣реИ]

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

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рддрдереНрдп рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЪрд╛рд░ рд╡рд╛рд▓реЗ рдореБрджреНрджреЗ рдпрд╛ рдиреЗрд╕реНрдЯреЗрдб рдкреИрд░реЗрд▓рд▓рд┐рдЬрд╝реНрдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)ред рдХреНрдпрд╛ рд╣рдо рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ?

рдпрд╛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╕рд┐рд░реНрдл make_scorer рд╕рд╛рде рдПрдХ рдорд╛рдирдХ рдореАрдЯреНрд░рд┐рдХ рдХрд╛ рдорддрд▓рдм рд╣реИ?

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреАрдЬреЗрдВ make_scorer рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдирд╣реАрдВ:

from sklearn.linear_model import LogisticRegression
from sklearn.grid_search import GridSearchCV
from sklearn.cross_validation import StratifiedKFold
from sklearn.metrics import average_precision_score, make_scorer
import functools

res = []
clfs = []

for response in responses:
    X, y = d_in[features], d_in[response]
    for i, (train, test) in enumerate(StratifiedKFold(y, 5)):
        X_train, y_train, X_test, y_test = X.iloc[train], y.iloc[train], X.iloc[test], y.iloc[test]
        clf = LogisticRegression(penalty='l1')
        grid = {
            'class_weight': [{0: 1, 1: 10}, {0: 1, 1: 100}, {0: 1, 1: 1000}],
            'C': np.logspace(-3, 0, num=4)
        }

        # Using make_scorer doesn't cause any issues
        # clf = GridSearchCV(clf, grid, cv=StratifiedKFold(y_train, 3),  
        #                    scoring=make_scorer(average_precision_score), n_jobs=-1)

        # This however is a problem:
        def avg_prec_score(estimator, X, y):
            return average_precision_score(y, estimator.predict_proba(X)[:, 1])
        clf = GridSearchCV(clf, grid, cv=StratifiedKFold(y_train, 5),  
                           scoring=avg_prec_score, n_jobs=-1)

        clf = clf.fit(X_train, y_train)
        print('Best parameters for response {} inferred in fold {}: {}'.format(response, i, clf.best_params_))

        y_pred = clf.predict(X_test)
        y_proba = clf.predict_proba(X_test)

        clfs.append((response, i, clf))
        res.append(pd.DataFrame({
            'y_pred': y_pred, 
            'y_actual': y_test, 
            'y_proba': y_proba[:,1],
            'response': np.repeat(response, len(y_pred))
        }))

res = functools.reduce(pd.DataFrame.append, res)
res.head()

рдореИрдВ рдПрдХ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдХрд╛рдо рдХрд░реВрдБрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧреЗрдЧрд╛)ред рдЗрд╕ рдмреАрдЪ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрди рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЪрдпрди рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реАрдб рд▓рдЧрддрд╛ рд╣реИ - рдореИрдВрдиреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рд░ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде 100% рд╕рдордп рд▓рдЯрдХрд╛рддрд╛ рд╣реИ рдФрд░ 0% рдЙрд╕ рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрдм make_scorer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреБрдЫ рдЬреНрдЮрд╛рдд, рдЖрдпрд╛рддрд┐рдд рдореАрдЯреНрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рдиред

рдФрд░ рдпрд╣ рдХрд┐ рдореБрдЦреНрдп (рдпрд╛рдиреА рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ) рдпрд╛ рдП
рдЖрдпрд╛рддрд┐рдд рдореЙрдбреНрдпреВрд▓?

15 рдЕрдЧрд╕реНрдд 2015 рдХреЛ 23:37 рдкрд░, рдПрд░рд┐рдХ рдЪреЗрдХ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреАрдЬреЗрдВ рдареАрдХ рд╣реИрдВ
make_scorer рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдирд╣реАрдВ:

sklearn.linear_model рдЖрдпрд╛рдд рд╕реЗ LogisticRegressionfrom sklearn.grid_search рдЖрдпрд╛рдд GridSearchCVfrom sklearn.cross_validation рдЖрдпрд╛рдд StratifiedKFoldfromlll.lmet. рдЖрдпрд╛рдд рдЖрдпрд╛рдд рдФрд╕рдд_рдкреНрд░рджрд░реНрд╢рди_рд╕рд░реНрдХрд┐рдЯ, рдореЗрдХ_рд╕реЗрдВрдкрд░рд┐рдордкреЛрд░реНрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕

рд░реЗрд╕ = []
clfs = []
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП:
X, y = d_in [рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ], d_in [рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛]
i рдХреЗ рд▓рд┐рдП, (рдЯреНрд░реЗрди, рдЯреЗрд╕реНрдЯ) рдореЗрдВ рдПрдиреБрдорд░реЗрдЯ (рд╕реНрдЯреНрд░реИрдЯрд┐рдлрд╛рдЗрдбрдХреЗрдлреЛрд▓реНрдб (y, 5)):
X_train, y_train, X_test, y_test = X.iloc [рдЯреНрд░реЗрди], y.iloc [рдЯреНрд░реЗрди], X.iloc [рдкрд░реАрдХреНрд╖рдг], y.iloc [рдкрд░реАрдХреНрд╖рдг]
clf = LogisticRegression (рджрдВрдб = 'l1')
рдЧреНрд░рд┐рдб = {
'рдХреНрд▓рд╛рд╕_рд╡реЗрдЯ': [{0: 1, 1: 10}, {0: 1, 1: 100}, {0: 1, 1: 1000}]
'C': np.logspace (-3, 0, рд╕рдВрдЦреНрдпрд╛ = 4)
}

    # Using make_scorer doesn't cause any issues
    # clf = GridSearchCV(clf, grid, cv=StratifiedKFold(y_train, 3),
    #                    scoring=make_scorer(average_precision_score), n_jobs=-1)

    # This however is a problem:
    def avg_prec_score(estimator, X, y):
        return average_precision_score(y, estimator.predict_proba(X)[:, 1])
    clf = GridSearchCV(clf, grid, cv=StratifiedKFold(y_train, 5),
                       scoring=avg_prec_score, n_jobs=-1)

    clf = clf.fit(X_train, y_train)
    print('Best parameters for response {} inferred in fold {}: {}'.format(response, i, clf.best_params_))

    y_pred = clf.predict(X_test)
    y_proba = clf.predict_proba(X_test)

    clfs.append((response, i, clf))
    res.append(pd.DataFrame({
        'y_pred': y_pred,
        'y_actual': y_test,
        'y_proba': y_proba[:,1],
        'response': np.repeat(response, len(y_pred))
    }))

рд░реЗрд╕ = рдлрдВрдХреНрд╢рдирд▓рд╕реЗрд▓реЗрд░рд╕реЗрдб (pd.DataFrame.append, res)
res.head ()

рдореИрдВ рдПрдХ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдХрд╛рдо рдХрд░реВрдБрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
рдбреЗрдЯрд╛ рдореИрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ (рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧреЗрдЧрд╛)ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдмреАрдЪ,
рдЙрди рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЕрдЪрд╛рд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реАрдб рд▓рдЧрддрд╛ рд╣реИ - рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдпрд╛ рд╣реИ
рдХрдИ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ 100% рд╕рдордп рдПрдХ рд░рд┐рд╡рд╛рдЬ рдХреЗ рд╕рд╛рде рд▓рдЯрдХрд╛ рд░рд╣рддрд╛ рд╣реИ
рдХреБрдЫ рдЬреНрдЮрд╛рдд рдХреЗ рд╕рд╛рде make_scorer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдлрд╝рдВрдХреНрд╢рди рдФрд░ 0%
рдЖрдпрд╛рддрд┐рдд рдореАрдЯреНрд░рд┐рдХ рд╕рдорд╛рд░реЛрд╣ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment -131376298
ред

рдУрд╣, рдпрд╣ ipynb рд╣реИред рд╣рдореНрдореНрдо рджрд┐рд▓рдЪрд╕реНрдкред рд╣рд╛рдБ, рдЕрдЪрд╛рд░ рдмрдирд╛рдирд╛ рдПрдХ рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ..?

15 рдЕрдЧрд╕реНрдд 2015 рдХреЛ 23:51 рдкрд░, рдЬреЛрдПрд▓ рдирдердореИрди рдЬреЛрдПрд▓ред [email protected] рдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ:

рдФрд░ рдпрд╣ рдореБрдЦреНрдп (рдпрд╛рдиреА рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ) рдпрд╛
рдПрдХ рдЖрдпрд╛рддрд┐рдд рдореЙрдбреНрдпреВрд▓?

15 рдЕрдЧрд╕реНрдд 2015 рдХреЛ 23:37 рдкрд░, рдПрд░рд┐рдХ рдЪреЗрдХ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреАрдЬреЗрдВ рдареАрдХ рд╣реИрдВ
make_scorer рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдирд╣реАрдВ:

sklearn.linear_model рдЖрдпрд╛рдд рд╕реЗ LogisticRegressionfrom sklearn.grid_search рдЖрдпрд╛рдд GridSearchCVfrom sklearn.cross_validation рдЖрдпрд╛рдд StratifiedKFoldfromlll.lmet. рдЖрдпрд╛рдд рдЖрдпрд╛рдд рдФрд╕рдд_рдкреНрд░рджрд░реНрд╢рди_рд╕рд░реНрдХрд┐рдЯ, рдореЗрдХ_рд╕реЗрдВрдкрд░рд┐рдордкреЛрд░реНрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕

рд░реЗрд╕ = []
clfs = []
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП:
X, y = d_in [рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ], d_in [рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛]
i рдХреЗ рд▓рд┐рдП, (рдЯреНрд░реЗрди, рдЯреЗрд╕реНрдЯ) рдореЗрдВ рдПрдиреБрдорд░реЗрдЯ (рд╕реНрдЯреНрд░реИрдЯрд┐рдлрд╛рдЗрдбрдХреЗрдлреЛрд▓реНрдб (y, 5)):
X_train, y_train, X_test, y_test = X.iloc [рдЯреНрд░реЗрди], y.iloc [рдЯреНрд░реЗрди], X.iloc [рдкрд░реАрдХреНрд╖рдг], y.iloc [рдкрд░реАрдХреНрд╖рдг]
clf = LogisticRegression (рджрдВрдб = 'l1')
рдЧреНрд░рд┐рдб = {
'рдХреНрд▓рд╛рд╕_рд╡реЗрдЯ': [{0: 1, 1: 10}, {0: 1, 1: 100}, {0: 1, 1: 1000}]
'C': np.logspace (-3, 0, рд╕рдВрдЦреНрдпрд╛ = 4)
}

    # Using make_scorer doesn't cause any issues
    # clf = GridSearchCV(clf, grid, cv=StratifiedKFold(y_train, 3),
    #                    scoring=make_scorer(average_precision_score), n_jobs=-1)

    # This however is a problem:
    def avg_prec_score(estimator, X, y):
        return average_precision_score(y, estimator.predict_proba(X)[:, 1])
    clf = GridSearchCV(clf, grid, cv=StratifiedKFold(y_train, 5),
                       scoring=avg_prec_score, n_jobs=-1)

    clf = clf.fit(X_train, y_train)
    print('Best parameters for response {} inferred in fold {}: {}'.format(response, i, clf.best_params_))

    y_pred = clf.predict(X_test)
    y_proba = clf.predict_proba(X_test)

    clfs.append((response, i, clf))
    res.append(pd.DataFrame({
        'y_pred': y_pred,
        'y_actual': y_test,
        'y_proba': y_proba[:,1],
        'response': np.repeat(response, len(y_pred))
    }))

рд░реЗрд╕ = рдлрдВрдХреНрд╢рдирд▓рд╕реЗрд▓реЗрд░рд╕реЗрдб (pd.DataFrame.append, res)
res.head ()

рдореИрдВ рдПрдХ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдХрд╛рдо рдХрд░реВрдБрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
рдбреЗрдЯрд╛ рдореИрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ (рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧреЗрдЧрд╛)ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдмреАрдЪ,
рдЙрди рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЕрдЪрд╛рд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реАрдб рд▓рдЧрддрд╛ рд╣реИ - рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдпрд╛ рд╣реИ
рдХрдИ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ 100% рд╕рдордп рдПрдХ рд░рд┐рд╡рд╛рдЬ рдХреЗ рд╕рд╛рде рд▓рдЯрдХрд╛ рд░рд╣рддрд╛ рд╣реИ
рдХреБрдЫ рдЬреНрдЮрд╛рдд рдХреЗ рд╕рд╛рде make_scorer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдлрд╝рдВрдХреНрд╢рди рдФрд░ 0%
рдЖрдпрд╛рддрд┐рдд рдореАрдЯреНрд░рд┐рдХ рд╕рдорд╛рд░реЛрд╣ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment -131376298
ред

рдпрд╣ рдПрдХ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рд╣реИ

рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЗрд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИ

рд╣рдореНрдо рддреБрдо рдХреНрдпрд╛ рдЬрд╛рдирддреЗ рд╣реЛ, рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдиреЛрдЯрдмреБрдХ рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдХреЛрдб рд╣реИ рдЬреЛ рдЕрдЬрдЧрд░ реи. have рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ (рдореБрдЭреЗ рдПрдХ рд▓реАрдм рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдкреБрд░рд╛рдиреА рд╣реИ) рдФрд░ рд╕рд╛рде рд╣реА рдЕрдЬрдЧрд░ рей.рек рдореЗрдВ рднреА рдпрд╣ рдХреЛрдб рд╣реИ рдФрд░ рдЬрдмрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ реи. 2.7 рдореЗрдВ рд╣реИрдВрдЧрд┐рдВрдЧ рдЗрд╢реНрдпреВ рд╣реИ рдЪрд╛рд╣реЗ рд╡рд╣ рдХреЛрдИ рдХрд╕реНрдЯрдо рдлрдВрдХреНрд╢рди рд╣реЛ рдпрд╛ рдореЗрдХ_рд╕реИрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреБрдЫ рд╣реЛред рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдкреБрд░рд╛рдиреЗ рдореЗрдВ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХреВрдВред

рдФрд░ рдХреБрдЫ рднреА рдореИрдВ рдиреАрдЪреЗ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрдЪрд╛рд░ рдХрд╛рд░реНрдп рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ?

рдареАрдХ рд╣реИ, рд╣рдо рд╕рдордЭрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ:

  • рдЖрдо рддреМрд░ рдкрд░ рдЙрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪрд╛рд░ рдФрд░ рдЕрдирдкреИрдХрд┐рдВрдЧ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдпрд╛ рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реЛрдбрд╝рд╛ рдорд╛рд░ рд░рд╣реЗ рд╣реИрдВ?
  • рдХреНрдпреЛрдВ, рдЕрдЧрд░ рдЕрдЪрд╛рд░ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдЕрдкрд╡рд╛рдж рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ? рдпрджрд┐ рдЖрдк pickle.dumps(function) рдЬрдЧрд╣ рд▓реЗ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдмрдВрджрд░-рдкреИрдЪрд┐рдВрдЧ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/externals-joblib/parallelред рдПрдХ рддреНрд░реБрдЯрд┐ рдореЗрдВ pickle.loads(pickle.dumps(function)) рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде py # L150 ? (рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдЪрд╛рд░ рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдВрдЪ рд╣реИред)

@ogrisel рдЗрд╕рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА

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

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдПрдХ рд╣реА рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЪреБрдирдиреЗ рдФрд░ рдЕрдирдкрд┐рдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ?

рдЖрдЬ рдореИрдВрдиреЗ рдЧрд▓рддреА рд╕реЗ рдпрд╣ https://pythonhosted.org/joblib/parallel.html#bad -interaction-of-multiprocessing-and-third-l рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рджреЗрдЦрд╛ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ?
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд┐рд░реНрдл рдЕрдЬрдЧрд░ 3.4 рдпрд╛ рдирдП рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ?

рд╕реЙрд░реА рд▓рдВрдмреА рдЫреБрдЯреНрдЯреА рдкрд░ рдЪрд▓рд╛ рдЧрдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП:

  1. re @jnothman : рдореИрдВрдиреЗ pickle.loads(pickle.dumps(function)) рдбрд╛рд▓рд╛ рдФрд░ рдПрдХ рдкреНрд░рд┐рдВрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдмрд╛рдж рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╕рдлрд╛рдИ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рд░рд╣рд╛ рдерд╛, рдФрд░ рд╡рд╣рд╛рдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЛрдЯрдмреБрдХ рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ GridSearchCV.fit рдЕрднреА рднреА рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╣реА рдЕрдЯрдХ рдЧрдпрд╛ рдерд╛ (рдкреНрд░рд┐рдВрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдореИрдВрдиреЗ n_jobs = -1 рдХреЗ рд╕рд╛рде 16 рдмрд╛рд░ рджрд┐рдЦрд╛рдпрд╛)ред
  2. re @amueller : рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореИрдВрдиреЗ рдХреБрдЫ рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рде рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рднрд╛рдЧ рд▓рд┐рдпрд╛:
def test_function(x):
    return x**2
pickle.loads(pickle.dumps(test_function))(3)
# 9
  1. re @olologin : рдореИрдВ 3.4.3 рдкрд░ рд╣реВрдВред рдпрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ: '3.4.3 | рдХреЙрдиреНрдЯрд┐рдирдо рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕, рдЗрдВрдХ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ, 6 рдорд╛рд░реНрдЪ 2015, 12:07:41) n [GCC 4.2.1 (Apple Inc. build 5577)] '

рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдиреНрдпреВрдирддрдо рдкрд░реАрдХреНрд╖рдг рдкрд╛рдпрдерди 2.6 рдмрд┐рд▓реНрдб рдСрдлрд╝ рдЯреНрд░реИрд╡рд┐рд╕ рдХреЗ рддрд╣рдд рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкреАрд╕реА рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рддрд╣рдд рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ ... (рдпрд╣ рд╕реБрдЭрд╛рд╡ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ n_jobs = -1 рдкреБрд░рд╛рдиреЗ рдЕрдЬрдЧрд░ / рдЬреЙрдмрд▓рд┐рдм / рд╕реНрдХреЗрдкреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдХреЛрд░ рдорд╢реАрди рдХреЗ рддрд╣рдд рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?)

def test_cross_val_score_n_jobs():
    # n_jobs = -1 seems to hang in older versions of joblib/python2.6
    # See issue 5115
    cross_val_score(LinearSVC(), digits.data, digits.target, cv=KFold(3),
                    scoring="precision_macro", n_jobs=-1)

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП +1, рдпрджрд┐ рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ рддреЛ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛрдЧреА

@ рдПрд░рд┐рдХ-рдЪреЗрдХ рдпрджрд┐ рдЖрдк рдкрд╛рдпрдереЙрди 3.4 рдпрд╛ 3.5 рдХреЗ рдЕрдзреАрди рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдирд┐рдореНрди рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдЕрдкрдиреЗ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ:

export JOBLIB_START_METHOD="forkserver"

рдЬреИрд╕рд╛ рдХрд┐ joblib рдбреЙрдХреНрд╕ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред Forkserver рдореЛрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред

OS X 10.11.4 рдФрд░ Ubuntu 14.04 рджреЛрдиреЛрдВ рдкрд░ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд╡реАрдирддрдо рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рд╣реИрдВред

# Metrics
B_R = 10.0

def raw_TPR(y_true, y_pred):
    return np.sum((y_true == 1) & (y_pred == y_true))

def raw_FPR(y_true, y_pred):
    return np.sum((y_true == 0) & (y_pred != y_true))

def AMS(y_true, y_pred):
    print("Hello")
    tpr = raw_TPR(y_true, y_pred)
    fpr = raw_FPR(y_true, y_pred)
    score = np.sqrt(2 * ((tpr + fpr + B_R) * np.log(1 + tpr / (fpr + B_R))) - tpr)
    return score


# Grid search

param_grid = {
    "max_depth":[6, 10],
    "learning_rate":[0.01, 0.5],
    "subsample":[0, 1],
    "min_child_weight":[0.1, 1],
    "colsample_bytree":[0.1, 1],
    "base_score":[0.1, 1],
    "gamma":[0.5, 3.5]
}

scorer = make_scorer(AMS, greater_is_better=True)


clf = XGBClassifier()
gridclf = GridSearchCV(clf, param_grid, scorer, n_jobs=-1, verbose=2)
gridclf.fit(X_train, y_train)

рджрд░рдЕрд╕рд▓, рдпрд╣ рдХреЛрдб рдХреЗрд╡рд▓ n_jobs=1 рдлреНрд░реАрдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдЕрдм python 3 рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ python 2, рд╕рд╣реА @ogrisel рдкрд░ рдПрдХ wontfix рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рд╣рдореЗрдВ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рдЪреЗрддрд╛рд╡рдиреА рдпрд╛ рддреНрд░реБрдЯрд┐ ("n_jobs> 1 рдкрд╛рдпрдерди 2 рдкрд░ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ") рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЕрдЬрдЧрд░ 2 рдкрд░ рдЪреБрдкрдЪрд╛рдк рд▓рдЯрдХрд╛ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ; рдХреНрдпрд╛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ?

рдкрд╛рдпрдерди 3 рдкрд░ @amueller рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment -187683383 рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдкрд╛рдпрдерди 3 рдкрд░ рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓ рдУрдкреА рдпрд╣ рдХрд╣рдиреЗ рд▓рдЧрд╛ рдерд╛ рдХрд┐ рдЬреЙрдмрд▓реАрдм start_method рдХреЛ рдлреЛрд░реНрд╕реНрдХрд┐рд╡рд░ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ ...

BTW xgboost рдПрдХ рдЬреНрдЮрд╛рдд рдПрдХ рд╣реИ, https://github.com/scikit-learn/scikit-learn/issues/6627#issuecomment -206351138 рджреЗрдЦреЗрдВред

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

рдЬрд▓реНрджреА рдареАрдХ:
np.random.seed(0)

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднреА рджреМрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдСрдЯреЛ-рдПрдордПрд▓ рдХреЗ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдореЗрдВред рдкрд╣рд▓реЗ (2?) рдмрд╛рд░ рдореИрдВрдиреЗ GridSearchCV рдЪрд▓рд╛рдпрд╛, рдпрд╣ рдареАрдХ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдмрд╛рдж рдХреЗ рд░рди рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рдЯрдХ рдЧрдПред

рдореИрдВрдиреЗ рдЕрднреА рднреА рдЕрдкрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрджрд░ np.random.seed(0) рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдлрд┐рд░ рднреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдордп-рд╕рдордп рдкрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЖрджреЗрд╢ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рд▓рдЪреАрд▓рд╛рдкрди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреБрдирд░реБрддреНрдкрд╛рджрди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ рдХрд┐рдпрд╛, GSCV рддреНрд░реБрдЯрд┐ рдкрд░ рд▓рдЯрдХрд╛рдП рдЧрдП рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдПред

def test_name():
    np.random.seed(0)
    test_code_involving_gscv_here

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рддрд╛ рд╣реИ!

рджреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдг:
рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ (рд╕рд┐рдПрд░рд╛)
рдкрд╛рдпрдерди 2.7
рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЕрджреНрдпрддрд┐рдд рд╕рдВрд╕реНрдХрд░рдгред

@ClimbsRocks рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╣ рд╢рд╛рдпрдж рдЕрдкрдиреЗ

@ рд╡рд╛рдорд░ : рдЕрдЪреНрдЫрд╛ рдлреЛрдиред рдореИрдВ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдЦрд╛ рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╡рд╛рдирд╛ рд╣реБрдЖ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЪрд▓рд╛ред

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

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

рдореБрдЭреЗ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдмрдЧ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЪрд▓рд╛ рдФрд░ рдкрд╛рд░рд┐рдд рд╣реЛ рдЧрдпрд╛ред рдЬрдм рдореИрдВ рдПрдХ рд╣реА рдкрд╛рд╕ рдореЗрдВ рдХрдИ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛ рддрднреА рдЬреАрдПрд╕рд╕реАрд╡реА рдкрд░ рдирд┐рд░реНрднрд░ рдерд╛ рдХрд┐ рдпрд╣ рд▓рдЯрдХрд╛ рд╣реБрдЖ рдерд╛ред

рдЗрд╕ рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЛ рдиреЛрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдЯрд┐рдкреНрдкрдгреА рд╕рдВрдкрд╛рджрд┐рдд рдХреА рдЧрдИред

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

рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВред
рдореИрдВрдиреЗ рдкрд╛рдпрдерди 3.5 рдХрд░реНрдиреЗрд▓ рдФрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЬреЙрдм рд▓рд┐рдмрд░ рд╕реНрдЯрд╛рд░реНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдлреЛрд░реНрдХреЗрд╕реНрд╡рд░ рдмрдирд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ n_jobs = 1 рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред

рдХреЛрдИ рдЦрдмрд░ рд╣реИ ?

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ n_jobs = 1 рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рдВрднрд╡рдд: рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ (рдЬреЛ рд▓рдЧрднрдЧ n_jobs != 1 )ред рдЕрдЪреНрдЫреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реБрдП рдПрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓рд╛ рдЬрд╛рдПред

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЦреБрдж рдЖ рд░рд╣рд╛ рд╣реВрдВред рдХрдИ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рд╕рдм рдХреБрдЫ n_jobs рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реВрдВ> 1 рдмрд╕ рдХреБрдЫ рд╕рд┐рд▓рд╡рдЯреЛрдВ рдХреЗ рдмрд╛рдж рдЬрдорд╛ рджреЗрддрд╛ рд╣реИред рдореИрдВ sklearn = 0.19.0 рдХреЗ рд╕рд╛рде рдЙрдмрдВрдЯреВ рд▓рд┐рдирдХреНрд╕ рд▓реИрдкрдЯреЙрдк рдкрд░ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрди рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдкрдврд╝рд╛ рд╣реИред рдпрд╣рд╛рдБ "рдЕрдкрдорд╛рдирдЬрдирдХ" рдХреЛрдб рд╣реИ:

import xgboost as xgb
from sklearn.model_selection import GridSearchCV
cv_params = {'max_depth': [3,5,7], 'min_child_weight': [1,3,5]}

ind_params = {'learning_rate': 0.1, 'n_estimators': 1000, 'seed':0, 'subsample': 0.8, 'colsample_bytree': 0.8,  'objective': 'binary:logistic'}
optimized_XGB = GridSearchCV(xgb.XGBClassifier(**ind_params), 
                            cv_params, scoring = 'roc_auc', cv = 5, n_jobs = 1, verbose=2) 
optimized_XGB.fit(xgboost_train, label_train,eval_metric='auc')

рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ xgboost рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ GridSearchCV рдкрд░ рдПрдХ рдкрджрд╛рд╡рдирддрд┐ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓рддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ model_selection рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ xgboost 0.62 рдкрд░ рд╣реВрдВ рдФрд░ рдЙрдирдХреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рджреЗрдЦрдХрд░ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рд╣реА рдЧреНрд░рд┐рдбрд╕рд░реНрдЪрд╡реАрд╡реА рдЖрдпрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдкрджрд╛рд╡рдирддрд┐ рдХреА рдЪреЗрддрд╛рд╡рдиреА рд╡рд╣ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЪрд┐рдВрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИ: n_jobs> 1 рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди рдлреНрд░реАрдЬред рд╕рд┐рд░реНрдл рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

24 рдЕрдЧрд╕реНрдд 2017 рдХреЛ 20:29 рдкрд░, рдЬреЗрд╡рд┐рдпрд░ рдЕрдорддреНрд░рд┐рдпрди рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЦреБрдж рдЖ рд░рд╣рд╛ рд╣реВрдВред рдХрдИ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
рд╕рдВрдпреЛрдЬрди, рд╕рдм рдХреБрдЫ рдореИрдВ n_jobs рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реВрдВ> 1 рдмрд╕ рдХреБрдЫ рдХреЗ рдмрд╛рдж рдЬрдорд╛ рджреЗрддрд╛ рд╣реИ
рдкрд░рддреЛрдВред рдореИрдВ sklearn = 0.19.0 рдХреЗ рд╕рд╛рде рдЙрдмрдВрдЯреВ рд▓рд┐рдирдХреНрд╕ рд▓реИрдкрдЯреЙрдк рдкрд░ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдП
рджреВрд╕рд░реЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╡рд┐рдиреНрдпрд╛рд╕ рдореИрдВрдиреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдкрдврд╝рд╛ рд╣реИред рдпрд╣рд╛рдБ рд╣реИ
"рдЕрдкрдорд╛рдирдЬрдирдХ" рдХреЛрдб:

`xgboost рдХреЛ xgb рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ
Sklearn.model_selection рдЖрдпрд╛рдд GridSearchCV рд╕реЗ
cv_params = {'max_depth': [3,5,7], 'min_child_weight': [1,3,5]}

ind_params = {'learning_rate': 0.1, 'n_estimators': 1000, 'рдмреАрдЬ': 0,
'рд╕рджрд╕реНрдпрддрд╛': 0.8, 'colsample_bytree': 0.8, 'рдЙрджреНрджреЗрд╢реНрдп': ' рдмрд╛рдЗрдирд░реА: рд▓реЙрдЬрд┐рд╕реНрдЯрд┐рдХ '}
рдЕрдиреБрдХреВрд▓рд┐рдд_XGB = рдЧреНрд░рд┐рдбрд╕рд░реНрдЪ рд╕реАрд╡реА (xgb.XGBClassifier (** ind_params),
cv_params, рд╕реНрдХреЛрд░рд┐рдВрдЧ = 'roc_auc', cv = 5, n_jobs = 1, рдХреНрд░рд┐рдпрд╛ = 2)
рдЕрдиреБрдХреВрд▓рд┐рдд_XGB.fit (xgboost_train, label_train, eval_metric = 'auc')

рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ xgboost рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдП
GridSearchCV рдкрд░ рдкрджрд╛рд╡рдирддрд┐ рдЪреЗрддрд╛рд╡рдиреА рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛
model_selectionред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ xgboost 0.62 рдкрд░ рд╣реВрдВ рдФрд░ рдЙрдирдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реВрдВ
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рд╣реА GridSearchCV рдХрд╛ рдЖрдпрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП
рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдкрджрд╛рд╡рдирддрд┐ рдЪреЗрддрд╛рд╡рдиреА рд╡рд╣ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЪрд┐рдВрддрд┐рдд рдХрд░рддрд╛ рд╣реИ рдмрд▓реНрдХрд┐
рдПрдХ рд╣рд╛рде рдореЗрдВ: рдирд┐рд╖реНрдкрд╛рджрди n_jobs> 1 рдХреЗ рд╕рд╛рде рдардВрдбред рдмрд╕ рдЕрдВрджрд░ рдЬрд╛рдиреЗ рдХрд╛ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛
рдорд╛рдорд▓рд╛ рдпрд╣ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment-324597686 ,
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAEz66DbfTlnU_-dcxLKa5zkrcZ-0qVOks5sbVCmgaJpZM4FqYlN
ред

рдЬрд╝рд░реВрд░, рдЖрдк рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд░рд╣реА рд╕рдЯреАрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
https://xamat.github.io/xgboost_train.csv
https://xamat.github.io/label_train.csv

HTTP404

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдкрд╣рд▓реЗ рд▓рд┐рдВрдХ рдореЗрдВ рдПрдХ рдЧрд▓рддреА рдереА, рдЗрд╕реЗ рдЕрдм рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рджреВрд╕рд░рд╛ рднреА рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВрдиреЗ рдЕрднреА рдЬрд╛рдБрдЪ рдХреА рд╣реИред

Xgboost рдХреЗ рд╕рд╛рде рдЬреНрдЮрд╛рдд рд╕рдорд╕реНрдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://github.com/scikit-learn/scikit-learn/issues/6627#issuecomment -206351138 рджреЗрдЦреЗрдВред

FYI рдХрд░реЗрдВ, рдЬреЙрдмрд▓рд┐рдм рдореЗрдВ

рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдмрдЧ рд╣реИ? рдореБрдЭреЗ рдЪреВрдХ (n_jobs = 1) рдХреЗ рд╕рд╛рде-рд╕рд╛рде pre_dispatch = 1 рдХреЗ рд╕рд╛рде рднреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ, рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ 80 рд╕рдВрдпреЛрдЬрдиреЛрдВ рдФрд░ ShuffleSplit CV (n = 20) рдХреЗ рд╕рд╛рде RandomForestClassifier рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред

рдпрд╣ рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рднреА рд▓рдЯрдХрд╛ рд╣реИ ( SelectKBest(score_func=mutual_info_classif, k=10) RandomForestClassifier ), рджреЛрдиреЛрдВ рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдбреЗрд╡реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рддрд╣рддред

рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб, рдпрд╛ рдЕрдиреНрдп рдореЙрдбрд▓ рдЪрдпрди рдХреЗ рддрд░реАрдХреЗ рдорд┐рд▓рддреЗ рд╣реИрдВ рдЬреЛ рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред scikit-optimize рдПрдХ рдХреЛрд╢рд┐рд╢ рджреЗрдиреЗ рдХреА рд╕реЛрдЪред

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ n_jobs = 1 рдпрд╛ рдпрд╣ рдЯрд╛рдЗрдкреЛ рд╣реИ? рдпрд╣ рд╕рдорд╕реНрдпрд╛ n_jobs рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ! = 1ред

рдЧреБрдгрд╡рддреНрддрд╛ рдлреАрдб-рдмреИрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВ рдпрджрд┐ рдЖрдк рдЬреЛ рд╕рдорд╕реНрдпрд╛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ n_jobs = 1 рдХреЗ рд╕рд╛рде рд╣реИред

рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдЬреЛ "рд╕рдХреНрд╖рдо рд╕рдХреНрд╖рдо рд╣реИ"
n_jobs! = 1 рдХреЗ рд░реВрдк рдореЗрдВ '1 рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ'ред рд╕рдорд╛рди рд░реВрдк рд╕реЗ, n_jobs> 1. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, n_jobs = 4

рдХреНрдпрд╛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЖрдк n_jobs = 4 рдХреЗ рд▓рд┐рдП рдлрд╝реНрд░реАрдЬ рдХреЛ рд░рд┐рдкреНрд░реЛрдЬрд╝ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдорд╣реАрдиреЗ рдХреЗ рднреАрддрд░ рдЯреЗрд╕реНрдЯрдХреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛ (рдореИрдВ рдПрдХ рдирдИ рдорд╢реАрди рдореЗрдВ рдмрджрд▓ рд░рд╣рд╛ рд╣реВрдВред)

12 рд╕рд┐рддрдВ,, 2017, рдкрд░ 7:10 AM рдкрд░, Loic Est├иve < [email protected] [email protected] > рдиреЗ рд▓рд┐рдЦрд╛:

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ n_jobs = 1 рдпрд╛ рдпрд╣ рдЯрд╛рдЗрдкреЛ рд╣реИ? рдпрд╣ рд╕рдорд╕реНрдпрд╛ n_jobs рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ! = 1ред

рдЧреБрдгрд╡рддреНрддрд╛ рдлреАрдб-рдмреИрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВ рдпрджрд┐ рдЖрдк рдЬреЛ рд╕рдорд╕реНрдпрд╛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ n_jobs = 1 рдХреЗ рд╕рд╛рде рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment-328864498 рдкрд░ https://itithub.com/notifications/unsubscribe- рдкрд░ рдореНрдпреВрдЯ

@smcinerney рдХреНрдпрд╛ рдЖрдк @ рдХрд╛рдордирд╛ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @lesteve @raamana рдХрд╛ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдЬрд┐рд╕рдиреЗ рд▓рд┐рдЦрд╛ n_jobs=1 рд╣реИ, рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдУрд╣ рд╕реЙрд░реА, рдирд╣реАрдВ рдореИрдВ @raamana рдирд╣реАрдВ рд╣реВрдВред рд╣рд╛рдВ @ рд░рдорд╛рдирд╛ рдХрд╛ рдореБрджреНрджрд╛ рдЕрд▓рдЧ рд╣реИ (рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЙрд╕реА рдХреЛрдб рдХреЗ рдХрд╛рд░рдг)

12 рд╕рд┐рддрдВ,, 2017, рдкрд░ 9:23 AM рдкрд░, рдПрдВрдбреНрд░рд┐рдпрд╛рд╕ рдореБрд▓рд░ < [email protected] [email protected] > рдиреЗ рд▓рд┐рдЦрд╛:

@smcinerney https://github.com/smcinerney рдХреНрдпрд╛ рдЖрдк @raamana https://github.com/raamana рд╣реИрдВ ? рдореИрдВ @lesteve рд▓рдЧрддрд╛ https://github.com/lesteve @raamana рдХрд╛ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ https://github.com/raamana рдЬреЛ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ n_jobs = 1, рд▓рд┐рдЦрд╛ рдерд╛ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment-328905819 рдкрд░ https://adithub.com/notifications/unsubscribe- рдкрд░ рдореНрдпреВрдЯ

рдореЗрд░рд╛ рдмреБрд░рд╛, рдореИрдВ рд╕рд╛рдорд╛рди рдорд┐рд╢реНрд░рдг рдорддрд▓рдм рдирд╣реАрдВ рдерд╛ред рдореИрдВ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ (рдХрдо рд╕реЗ рдХрдо рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдЦреЛрд▓реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ GridSearchCV рдбрд┐рдлрд╝реЙрд▓реНрдЯ n_jobs = 1 рдХреЗ рд╕рд╛рде рднреА рд▓рдЯрдХрд╛ рдирд╣реАрдВ рд╣реИ рдПрдХ рдмрдбрд╝реА рдЪрд┐рдВрддрд╛ рд╣реИ (рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ) n_jobs> 1 рдХреА рддреБрд▓рдирд╛ рдореЗрдВред

@ рдХрд╛рдордирд╛ рд╣рд╛рдБ, рдпрд╣ рдПрдХ рдмрдбрд╝реА рдЪрд┐рдВрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЗ рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

@ рдПрд░рд┐рдХ-рдЪреЗрдХ @jnothman
рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдмреИрдХрдПрдВрдб = 'рдереНрд░реЗрдбрд┐рдВрдЧ' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВред рд╕реНрдХреЗрд▓реЗрд░ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░_рдмреИрдХреЗрдВрдб рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЬреАрдПрд╕рд╡реА рдХреЗ рдлрд┐рдЯ рддрд░реАрдХреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рди рдХрд┐рдпрд╛ рдЬрд╛рдПред

from sklearn.externals.joblib import parallel_backend

clf = GridSearchCV()
with parallel_backend('threading'):
    clf.fit(x_train, y_train)

рдкреБрдирд╢реНрдЪ: рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ "рдереНрд░реЗрдбрд┐рдВрдЧ" рд╕рднреА рдЕрдиреБрдорд╛рдирдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрдорд╛рдирдХ рдХреЗ рд╕рд╛рде GSV njob> 1 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рдЦ рд░рд╣рд╛ рдерд╛ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдХрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред

рд╕рд┐рд╕реНрдЯрдо рдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА:
рдореИрдХ рдУрдПрд╕: 10.12.6
рдЕрдЬрдЧрд░: 3.6
numpy == 1.13.3
рдкрд╛рдВрдбрд╛ == 0.21.0
scikit рд╕реАрдЦрдиреЗ == 0.19.1

рд╣рдореНрдо ... рдмреИрдХрдПрдВрдб рдореЗрдВ рдереНрд░реЗрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕рд╛рдордпрд┐рдХ рдореБрджреНрджреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЧреНрд░рд┐рдб рдЦреЛрдЬ, # 10329 рдореЗрдВ рдмрдЧ рд░реЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдмрдирд╛рддрд╛ рд╣реИ ...

22 рджрд┐рд╕рдВрдмрд░ 2017 рдХреЛ 03:59 рдмрдЬреЗ, рддреНрд░рд┐рджреАрдк рд░рде рд╕реВрдЪрдирд╛рдПрдБ @ithub.com рдиреЗ рд▓рд┐рдЦрд╛:

@ рдПрд░рд┐рдХ-рдЪреЗрдХ https://github.com/eric-ceshop @jnothman
https://github.com/jnothman
рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдмреИрдХрдПрдВрдб = 'рдереНрд░реЗрдбрд┐рдВрдЧ' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВред рдмрд┐рдирд╛ рдПрдХ рдЖрд╕рд╛рди рд╡рд┐рдзрд┐
рд╕реНрдХреЗрд▓реЗрд░ рдХреЛрдб рдХреЛ рдмрджрд▓рдирд╛ рд╕рдорд╛рдирд╛рдВрддрд░_рдмреИрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рдФрд░ рдЬреАрдПрд╕рд╡реА рдХреЗ рдлрд┐рдЯ рддрд░реАрдХреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдЖред

sklearn.externals.joblib рд╕реЗ рд╕рдорд╛рдВрддрд░_рдмреИрдХреЗрдВрдб рдЖрдпрд╛рдд рдХрд░реЗрдВ

clf = GridSearchCV ()
рд╕рдорд╛рдирд╛рдВрддрд░_рдмреИрдХ рдХреЗ рд╕рд╛рде ('рд╕реВрддреНрд░рдг'):
clf.fit (x_train, y_train)

рдкреБрдирд╢реНрдЪ: рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ "рдереНрд░реЗрдбрд┐рдВрдЧ" рд╕рднреА рдЕрдиреБрдорд╛рдирдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдерд╛
рдЬреАрдПрд╕рд╡реА njob> 1 рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдЕрдиреБрдорд╛рдирдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕рд┐рд╕реНрдЯрдо рдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА:
рдореИрдХ рдУрдПрд╕: 10.12.6
рдЕрдЬрдЧрд░: 3.6
numpy == 1.13.3
рдкрд╛рдВрдбрд╛ == 0.21.0
scikit рд╕реАрдЦрдиреЗ == 0.19.1

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment-353402474 ,
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAEz64SfwYpjLU1JK0vukBRXJvWYs3LKks5tCo51gaJpZM4FqYlN
ред

рдХреЗрд╕: рдмреИрдХрдПрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ "рдереНрд░реЗрдбрд┐рдВрдЧ" рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдПрд╕реНрдЯреАрдореЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛ рдмреЗрд╕рд┐рд╕реНрдЯрд┐рдореЗрдЯрд░ рдФрд░ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░рдорд┐рдХреНрд╕рд┐рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╣рд╛рдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдореЗрд░реА рд╕рдордЭ рдФрд░ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореИрдВрдиреЗ рдХреЛрдИ рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рджреЗрдЦреАред

out = Parallel(
    n_jobs=self.n_jobs, verbose=self.verbose,
    pre_dispatch=pre_dispatch
)(delayed(_fit_and_score)(clone(base_estimator), X, y, scorers, train,
                          test, self.verbose, parameters,
                          fit_params=fit_params,
                          return_train_score=self.return_train_score,
                          return_n_test_samples=True,
                          return_times=True, return_parameters=False,
                          error_score=self.error_score)
  for parameters, (train, test) in product(candidate_params,
                                           cv.split(X, y, groups)))

_fit_and_score рдХреЛ рдХреНрд▓реЛрди (base_estimator) рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ deep_copy рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЗрдЯрд╛ рдореЗрдВ рд╣реИред

рдмрд╛рд╣рд░ _fit_and_score рдкрджреНрдзрддрд┐ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдиреЗ рдЕрдиреБрдорд╛рдирдХ рдХреА рдлрд┐рдЯ рд╡рд┐рдзрд┐ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд╕реВрдЪрдирд╛ рджреАред

рдкрд░рд┐рдгрд╛рдо рдЖрдкрдХреЛ GCV_clf.cv_results_ рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИ

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдХрд╛рд░рдг рдХреНрдпреЛрдВ рдмрдиреЗрдЧрд╛?

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

рдореИрдВ рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рди 7 рдХреЗ рддрд╣рдд GridSearchCv рдФрд░ n_jobs=-1 рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ make_scorer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

Windows-7-6.1.7601-SP1
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 10:22:32) [MSC v.1900 64 bit (AMD64)]
NumPy 1.12.1
SciPy 1.0.0
Scikit-Learn 0.19.1

@mansenfranzen рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдФрд░ рдордВрдЪ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдХреБрдЫ рдЕрдЪреНрдЫреА рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдлреАрдб-рдмреИрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдореМрдХрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рд╕реНрдирд┐рдкреЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ https://stackoverflow.com/help/mcve рдкрдврд╝реЗрдВред

Win7 рдХреЗ рддрд╣рдд рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рд╕реА рднреА рдХрд╕реНрдЯрдо рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рдеред
toolchain:

Python 3.6.2
NumPy 1.13.1, 1.14.2 (under both)
SciPy 1.0.0
SkLearn 0.19.1

MCVE:

from sklearn.pipeline import Pipeline, make_pipeline
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
import numpy as np

class CustomTransformer:
    def fit(self, X, y):
        return self

    def transform(self, X):
        return X

pipeline = make_pipeline(CustomTransformer(),
                         SVC())

X_train = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]])
y_train = np.array([1.0, 0.0, 0.0, 1.0])

print(cross_val_score(pipeline, X_train, y_train, cv=2, n_jobs=-1))

рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкрд╛рдпрдерди рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ if __name__ == '__main__' рдмрд┐рдирд╛ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА?

рд╣рд╛рдВ рдореИрдВ рд╣реВрдВред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рдмрддрд╛рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рдореИрдВ рдЬреНрдпреВрдкрд┐рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
if __name__ == '__main__' рд╕рд╛рде рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд╢рд╛рди рдкреНрд░рд┐рдВрдЯ рдХрд░рддреА рд╣реИ рдФрд░ рдлрд┐рд░ рднреА рдЬрдорд╛ рд╣реЛрддреА рд╣реИ:

Process SpawnPoolWorker-1:
Traceback (most recent call last):
  File "C:\Python\Python36\lib\multiprocessing\process.py", line 249, in _bootstrap
    self.run()
  File "C:\Python\Python36\lib\multiprocessing\process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Python\Python36\lib\multiprocessing\pool.py", line 108, in worker
    task = get()
  File "C:\Python\Python36\lib\site-packages\sklearn\externals\joblib\pool.py", line 362, in get
    return recv()
  File "C:\Python\Python36\lib\multiprocessing\connection.py", line 251, in recv
    return _ForkingPickler.loads(buf.getbuffer())
AttributeError: Can't get attribute 'CustomTransformer' on <module '__mp_main__' from 'C:\\projects\\Python\\Sandbox\\test.py'>
< same for SpawnPoolWorker-3 here >

рдУрд╣ рджрд┐рд▓рдЪрд╕реНрдкред рд╕рд╛рджреЗ рдЖрд▓рд╕реНрдп рд╕реЗ рдмрд╛рд╣рд░ рдореИрдВрдиреЗ рдкреВрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ if __name__ == '__main__' рддрд╣рдд рд░рдЦреА рдФрд░ рдкрд┐рдЫрд▓реЗ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред

рдЕрдм рдореИрдВрдиреЗ рдХреЗрд╡рд▓ pipeline = make_pipeline... , рдФрд░ рдЗрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд╢рд╛рдпрдж рдпрд╣ рдЬреБрдкрд┐рдЯрд░ рдореЗрдВ рдХрд╛рд░рдг рд╣реИ?

рд╡реИрд╕реЗ рднреА, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡реИрдз рд╣реИ рдФрд░ if __name__ == '__main__' рдХреЗ рдЕрдиреБрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдпрд╛ рдпрджрд┐ рдпрд╣ рд╕реНрдХреЗрд▓реЗрд░ рдХреА рдЧрд▓рддреА рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ
рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн ...

рдпреЗ рдЧрдиреНрджрд╛ рд╣реЗред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ Ubuntu рдХреЗ рддрд╣рдд рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд░ рдЪреАрдЬ рдХреЗ рд╕рдорд╛рди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдорджрдж рдХреЗ рд▓рд┐рдП рд╢реБрдХреНрд░рд┐рдпрд╛!

рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрдЧ рдЬреАрд╡рд┐рдд рд╣реИ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗред

рдПрдХ рдЬреВрдкреАрдЯрд░ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, Python3, Sklearn 0.19.1

рд▓рд┐рдирдХреНрд╕ рдЯрдХрд╕рд╛рд▓ (рдЙрдмрдВрдЯреВ 16.10) рдкрд╛рдпрдерди 3.5 рдкрд░ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛

рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд░ рдкрд░ рдкрд╣рд▓реЗ рдПрдкреЛрдЪ рдореЗрдВ рд╕рдм рдХреБрдЫ рдлрдВрд╕ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реАрдкреАрдпреВ рдмреЗрдХрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

@MrLobs рдХрд┐ рдПрдХ рдЕрдЪрд╛рд░ рддреНрд░реБрдЯрд┐ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдХрд╕реНрдЯрдордЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЕрдЬрдЧрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦреЗрдВред

@ Chrisjw42 @avatsaev рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд┐рдирд╛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
@avatsaev рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

@amueller рд╣рд╛рдБ рдпрд╣ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рд╣реИ

@avatsaev рдЕрднреА рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рдЬрдирди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рд╣реИ? рдЖрдк рдХрд┐рд╕ blas рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдк GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, scikit- рдХреНрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ...

рдареАрдХ рд╣реИ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ TF GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП n_jobs рдХреЛ> 1 рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ GPU GPU рд╣реИ

рд╣рд╛рдБ, рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ TF рдХреЗ рд╕рд╛рде n_jobs рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпреЛрдВ рдирд╣реАрдВ?

@amueller , рд╣рд╛рдБ, рдХрд╕реНрдЯрдо рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрд╛рд▓рдХрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ

рдХреНрдпрд╛ n_jobs рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИ! = 1 рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЪреЗрддрд╛рд╡рдиреА) рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕реЗ рд▓рдЯрдХрд╛ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ? рдореБрдЭреЗ рд╕рд┐рд░реНрдл рдЬреНрдпреВрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХреНрд╕ рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдФрд░ рдЕрдЧрд░ рдореИрдВ рдЕрдзрд┐рдХ рд╢реБрд░реБрдЖрддреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдерд╛ (рдореЗрд░реА рдХрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреА рддрд░рд╣), рддреЛ рдореБрдЭреЗ рдХрднреА рднреА рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рддрд╛ рдерд╛ рдХрд┐ рдЧреНрд░рд┐рдбрд╕рд░реНрдЪрдХрд╡ рдХреНрдпреЛрдВ рд▓рдЯрдХрд╛ рд░рд╣рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рд╢рд┐рдХреНрд╖рдХ рдиреЗ рднреА рд╣рдореЗрдВ n_jobs = рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдереАред 1ред рдЕрдЧрд░ рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рдЪрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдкреИрдХреЗрдЬ (keras, рдпрд╛ sklearn, рдЬреЛ рднреА) рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдШрдЯрд┐рдд рд╣реЛрдЧрд╛ рдФрд░ рд╣реИрдВрдЧ рдХреЛ рд░реЛрдХреЗрдЧрд╛?

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рднреА рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдорд╛рд╣реМрд▓ рдореЗрдВ рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ ... рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рднреА рдЗрд╕ рдмрдЧ рдХреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХреЗ рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдмреА рд╣рд╛рд╕рд┐рд▓ рдХреА рд╣реИред

рд▓реЗрдХрд┐рди рд╣рдо рдЕрдкрдиреЗ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдРрд╕реЗ рд╕рднреА рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@jnothman ЁЯСН

рдпрд╣ рд╕реБрдирдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛!

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ 0.21 рдХреНрдпреЛрдВ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ 0.20 рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдирдП рдореБрджреНрджреЗ рдЦреЛрд▓рдиреЗ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдФрд░ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред

рдореИрдВ рдЬреНрдпреВрдкрд┐рдЯрд░ рдХреЗ рд╕рд╛рде рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдЙрдмрдВрдЯреВ рдкрд░ рд╣реА рд╕рд╛рдордирд╛ рдХрд░ рдЪреБрдХрд╛ рд╣реВрдВ ...

рд╕рдорд╛рдирд╛рдВрддрд░_рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ ...


from sklearn.externals.joblib import parallel_backend

clf = GridSearchCV(...)
with parallel_backend('threading'):
    clf.fit(x_train, y_train)

@morienor рдпрджрд┐ рдЖрдк scikit-learn 0.20.1 рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВ (рдПрдХ рдирдХрд▓реА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдЖрдпрд╛рдд рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде, scikit-learn, numpy, scipy рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдоред

рдореИрдВ рдЬреНрдпреВрдкрд┐рдЯрд░ рдХреЗ рд╕рд╛рде рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдЙрдмрдВрдЯреВ рдкрд░ рд╣реА рд╕рд╛рдордирд╛ рдХрд░ рдЪреБрдХрд╛ рд╣реВрдВ ...

рд╕рдорд╛рдирд╛рдВрддрд░_рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ ...


from sklearn.externals.joblib import parallel_backend

clf = GridSearchCV(...)
with parallel_backend('threading'):
    clf.fit(x_train, y_train)

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдЖрдкрдХрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

@ jmq19950824 @morienor рд╣рд╛рдБ, рд▓реЗрдХрд┐рди GIL рдХреЗ рдХрд╛рд░рдг threading рдмреИрдХреЗрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдЬреНрдпреВрдкрд┐рдЯрд░ рдХреЗ рд╕рд╛рде рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдЙрдмрдВрдЯреВ рдкрд░ рд╣реА рд╕рд╛рдордирд╛ рдХрд░ рдЪреБрдХрд╛ рд╣реВрдВ ...

рд╕рдорд╛рдирд╛рдВрддрд░_рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ ...


from sklearn.externals.joblib import parallel_backend

clf = GridSearchCV(...)
with parallel_backend('threading'):
    clf.fit(x_train, y_train)

рдкреНрд░рддрд┐рднрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреА рд╣реИ

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

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

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

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

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

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

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