рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рди рдореЙрдбрд▓, c # рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╢реБрдн рджрд┐рди, рдкрд╛рдардХред рд░реИрдВрдбрдо рдлрд╝реЙрд░реЗрд╕реНрдЯ рдЖрдЬ рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдФрд░ рдмреЗрд╣рдж рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдФрд░ рдкреНрд░рддрд┐рдЧрдордиред рджрдХреНрд╖рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рд╕рдВрджрд░реНрдн рд╡реЗрдХреНрдЯрд░ рдорд╢реАрдиреЛрдВ, рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдмреВрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд╣реИред рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд▓рд░реНрдирд┐рдВрдЧ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИ (рддреБрд▓рдирд╛ рдореЗрдВ, рдХрд╣рддреЗ рд╣реИрдВ, рд╕рдкреЛрд░реНрдЯ рд╡реИрдХреНрдЯрд░ рдХреА рд▓рд░реНрдирд┐рдВрдЧ рдорд╢реАрди рдЕрд▓реНрдЧреЛрд░рд┐рджрдо, рдЬрд┐рдирдХреЗ рдЬреАрд╡рди рдореЗрдВ рдереНрд░рд┐рд▓ рдмрд╣реБрдд рдХрдо рд╣реИ, рдореИрдВ рдЖрдкрдХреЗ рдЕрд╡рдХрд╛рд╢ рдХреЗ рд╕рдордп рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ)ред рд╣рдо рд░реИрдВрдбрдо рдлрд╝реЙрд░реЗрд╕реНрдЯ (рдмрд╛рдЗрдирд░реА рдирд┐рд░реНрдгрдп рдЯреНрд░реА, рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдПрдХрддреНрд░реАрдХрд░рдг рдпрд╛ рдмреИрдЧрд┐рдВрдЧ, рд░реИрдВрдбрдо рд╕рдмрд╕реНрдкреЗрд╕ рд╡рд┐рдзрд┐ рдФрд░ рд╕рдЬрд╛рд╡рдЯ) рдореЗрдВ рдирд┐рд╣рд┐рдд рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдПрдХ рд╕реБрд▓рдн рд░реВрдк рдореЗрдВ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдкрдиреЗ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдореЙрдбрд▓ рдЕрднреА рднреА рдХрд╛рдлреА рдпреБрд╡рд╛ рд╣реИ: рдпрд╣ рд╕рдм 1997 рдХреЗ рдПрдХ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖ, рдЬрд┐рд╕рдореЗрдВ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдирдП рдкреЗрдбрд╝ рдХреЗ рдиреЛрдбреНрд╕ рдмрдирд╛рддреЗ рд╕рдордп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЙрдк-рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХрд▓ рдирд┐рд░реНрдгрдп рдкреЗрдбрд╝ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛; рддрдм рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдереА, рдЬрд┐рд╕рдХрд╛ рд╕рдорд╛рдкрди 2001 рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдПрдХ рд╡рд┐рд╣рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ рд╣реБрдЖ, рдЬрд┐рд╕рдореЗрдВ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдПрдХрддреНрд░реАрдХрд░рдг, рдпрд╛ рдмреИрдЧрд┐рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдгрдп рдкреЗрдбрд╝реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЗрд╕ рдореЙрдбрд▓ рдХреЛ c # рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓, рдмрд┐рд▓реНрдХреБрд▓ рджреГрд╢реНрдп рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдмреЗрд╣рдж рджреГрд╢реНрдп рддрд░реАрдХрд╛ рджреЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рднреАред рд╡реИрд╕реЗ, рджрд╛рдИрдВ рдУрд░ рдХреА рддрд╕реНрд╡реАрд░ рдореЗрдВ рдЖрдк рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЬрдВрдЧрд▓ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреНрдпреВрд░реЛрдирд┐рдпрди рд╕реНрдкрд┐рдЯ рдкрд░ рдХрд▓рд┐рдирд┐рдирдЧреНрд░рд╛рдж рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмрдврд╝рддрд╛ рд╣реИред



рдмрд╛рдЗрдирд░реА рдирд┐рд░реНрдгрдп рдкреЗрдбрд╝


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

рд╣рдо рдХрдИ рд╕рдВрдХреЗрддрди рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ:

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

рдЗрд╕рдХреЗ рд▓реЗрдмрд▓ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдПрдХ рд╕реЗрдЯ рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреЗ рддрдерд╛рдХрдерд┐рдд рдорд╛рдк рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдмрд╕реЗрдЯ рдореЗрдВ 5 рд▓рд╛рд▓ рдФрд░ 10 рдиреАрд▓реА рд╡рд╕реНрддреБрдПрдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕рдмрд╕реЗрдЯ рдореЗрдВ рд▓рд╛рд▓ рд╡рд╕реНрддреБ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ 1/3 рдФрд░ рдиреАрд▓реЗ 2/3 рд╣реЛрдЧреА ред рдЖрдЗрдП рд╣рдо рдирд┐рд░реВрдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рдХреЗ рдХреБрдЫ рд╕рдмрд╕реЗрдЯ рдореЗрдВ kth рд╡рд░реНрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕рдмрд╕реЗрдЯ рдореЗрдВ рд▓реЗрдмрд▓ рдХреЗ рдПрдХ рдЕрдиреБрднрд╡рдЬрдиреНрдп рдЕрд╕рддрдд рд╕рдВрднрд╛рд╡реНрдп рд╡рд┐рддрд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕ рдЙрдкрд╕рдореБрдЪреНрдЪрдп рдХреА рд╡рд┐рд╖рдорддрд╛ рдХреЗ рдорд╛рдк рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдХрд╛ рдХрд╛рд░реНрдп рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд╣рд╛рдБ K (A) рдЙрдкрд╕рдореВрд╣ A рдХреЗ рдХреБрд▓ рд▓реЗрдмрд▓ рд╣реИ:

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

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


рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдирд┐рд░реНрдгрдп рд╡реГрдХреНрд╖ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рд╛рд▓рдЪреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ : рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рдХреЗ рдЗрдирдкреБрдЯ рд╕рдмрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП, рд╣рд╛рдЗрдкрд░рдкреНрд▓реЗрди рджреНрд╡рд╛рд░рд╛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХрд╛ рдРрд╕рд╛ рд╡рд┐рднрд╛рдЬрди (рдЙрдирдХреЗ рд╕рдордиреНрд╡рдп рдЕрдХреНрд╖реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рдСрд░реНрдереЛрдЧреЛрдирд▓) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рджреЛ рдкреНрд░рд╛рдкреНрдд рдЙрдкрд╕рдореВрд╣ рдХреА рд╡рд┐рд╖рдорддрд╛ рдХреЗ рдФрд╕рдд рдорд╛рдк рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдЬрдм рддрдХ рд╕реНрдЯреЙрдк рдорд╛рдирджрдВрдб рдкреВрд░реЗ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗ, рддрдм рддрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рддреНрдпреЗрдХ рд╕рдмрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рд╣рдо рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрдирдкреБрдЯ рд╕реЗрдЯ рдП рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЬреЛрдбрд╝реА < рд╕рд╛рдЗрди , рд╕рд╛рдЗрди рд╡реИрд▓реНрдпреВ > рдорд┐рд▓рддреА рд╣реИ, рдХрд┐ рд╡рд┐рд╖рдорддрд╛ рдХрд╛ рдорд╛рдк рдиреНрдпреВрдирддрдо рд╣реЛрдЧрд╛:

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

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рд╛рдЗрди y = 2.840789 рд╕реЗ рдКрдкрд░ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдиреАрд▓реЗ рд▓реЗрдмрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рд╕реЗрдЯ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдЗрд╕ рдмрд╛рд░ рд▓рд╛рдЗрди x = 2.976719 ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕ рдЪрд┐рддреНрд░ рдореЗрдВ рд▓рд┐рдкреНрдд рд╣реЛрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рдпрд╣рд╛рдВ рдЖрд░ рдХреЛрдб рд╣реИ:
рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб
rm(list=ls()) library(mvtnorm) labCount <- 100 lab1 <- rmvnorm(n=labCount, mean=c(1,1), sigma=diag(c(1, 1))) lab0 <- rmvnorm(n=labCount, mean=c(2,2), sigma=diag(c(0.5, 2))) df <- data.frame(x=append(lab1[, 1], lab0[, 1]), y=append(lab1[, 2], lab0[, 2]), lab=append(rep(1, labCount), rep(0, labCount))) plot(df$x, df$y, col=append(rep("red", labCount), rep("blue", labCount)), pch=19, xlab="Feature 1", ylab="Feature 2") giniIdx <- function(data) { p1 <- sum(data$lab == 1)/length(data$lab) p0 <- sum(data$lab == 0)/length(data$lab) return(p0*(1 - p0) + p1*(1 - p1)) } p.norm <- giniIdx getSeparator <- function(data) { idx <- NA idx.val <- NA cost <- p.norm(data) for(i in 1:(dim(data)[2] - 1)) { for(i.val in unique(data[, i])) { #print(paste("i = ", i, "; v = ", i.val, sep="")) cost.tmp <- 0.5*(p.norm(data[data[, i] < i.val, ]) + p.norm(data[data[, i] >= i.val, ])) if(is.nan(cost.tmp)) { next } if(cost.tmp < cost) { cost <- cost.tmp idx <- i idx.val <- i.val } } } return(c(idx, idx.val)) } s1 <- getSeparator(df) lines(c(-100, 100), c(s1[2], s1[2]), lty=2, lwd=2, type="l") 


рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рд░реЛрдХ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ: рдЕрдзрд┐рдХрддрдо рдиреЛрдб рдЧрд╣рд░рд╛рдИ рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реИ; рд╡рд┐рднрд╛рдЬрди рдореЗрдВ рдкреНрд░рдореБрдЦ рд╡рд░реНрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ (рдореИрдВ 0.95 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ); рд╕рдмрд╕реЗрдЯ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рд╕реЗ рдХрдо рд╣реИред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдкреВрд░реЗ рд╕реЗрдЯ рдХрд╛ рдПрдХ рд╡рд┐рднрд╛рдЬрди (рд╣рд╛рдЗрдкрд░) рдЖрдпрддреЛрдВ рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдРрд╕реЗ рд╕рдмрд╕реЗрдЯ рдХреЛ рдкреЗрдбрд╝ рдХреЗ рдПрдХ рдкрддреНрддреЗ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕рднреА рдЖрдВрддрд░рд┐рдХ рдиреЛрдб рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рд╢рд░реНрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВ; рдпрд╛ рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХреБрдЫ рд╡рд┐рдзреЗрдпред рд╡рд░реНрддрдорд╛рди рдиреЛрдб рдХреЗ рд▓рд┐рдП, рдмрд╛рдПрдВ рдмрдЪреНрдЪреЗ рдХреЛ рдЙрд╕ рд╕реЗрдЯ рдХреЗ рдЙрди рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдзреЗрдп рд╕рддреНрдп рд╣реИ, рдФрд░ рд╕рд╣реА рдПрдХ, рдХреНрд░рдорд╢рдГ, рдЙрд╕ рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдзреЗрдп рдЭреВрдард╛ рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

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

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

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

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

рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреБрд▓рд┐рдВрдЧ рдпрд╛ рдмреИрдЧрд┐рдВрдЧ


рдЪрд▓реЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рди рдХреЗ рдЕрдЧрд▓реЗ рд╡реИрдЪрд╛рд░рд┐рдХ рдШрдЯрдХ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рддреЛ BAG ging рдХрд╛ рдирд╛рдо B ootstrap AG gregating рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдБрдХрдбрд╝реЛрдВ рдореЗрдВ, рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХрд╛ рдорддрд▓рдм рджреЛрдиреЛрдВ рдирдореВрдирд╛ рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рд╡рд┐рддрд░рдг рдХреЗ рдЖрдБрдХрдбрд╝реЛрдВ рдХреА рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рдФрд░ рдореЛрдВрдЯреЗ рдХрд╛рд░реНрд▓реЛ рдкрджреНрдзрддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╕реЗ рдирдореВрдиреЗ рдХреЗ рдирдореВрдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдирдореВрдирд╛ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рддрд░рдг рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирдореВрдиреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИред рдорд╛рдирд╛ рдХрд┐ рд╣рдо рдЖрдХрд╛рд░ n рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ m рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдХреЗрд╡рд▓ n рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рдлрд┐рд░ рд╣рдо рдЪрдпрдирд┐рдд рд╕реЗрдЯ рдХреА рд╡рд╛рдкрд╕реА ( рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдпрд╛ рд╡рд╛рдкрд╕реА рдХреЗ рд╕рд╛рде рдирдореВрдирд╛ ) рдХреЗ рд╕рд╛рде рдореВрд▓ рд╕реЗрдЯ рд╕реЗ рдПрди рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдПрдо рд╕реЗрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред N рдХреЗ рдмрдбрд╝реЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕реЗрдЯ рдХреЛ рдирдореВрдирд╛ рдХрд░рдХреЗ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдЕрджреНрд╡рд┐рддреАрдп рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрдЯ рдХреА рдЕрджреНрд╡рд┐рддреАрдп рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ (1 - 1 / e)) 63.2% рд╣реЛрдЧреА ред рдЪрд▓реЛ, рдореИрдВ рдирдореВрдирд╛ рджреНрд╡рд╛рд░рд╛ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд i- th рд╕реЗрдЯ рд╣реВрдВ , рд╣рдо рдЗрд╕ рдкрд░ рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╣реИрдВ , рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдИ рдмрд╛рд░ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВред рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдиреБрдорд╛рди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ:

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

рдЕрдм рдХреБрдЫ рдЧрдгрд┐рддреАрдп рдЕрдкреЗрдХреНрд╖рд╛ рдФрд░ рднрд┐рдиреНрдирддрд╛ред 2 рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рд╡рд┐рддрд░рдг рд╕реЗ рдореА рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЪрдпрдирд┐рдд рддрддреНрд╡реЛрдВ x рдХреЗ рд╕реЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдлрд┐рд░ рдирдореВрдирд╛ рдФрд╕рдд рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛:

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

рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдХрд╛ рдФрд╕рдд рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ ред рдпрд╣ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдирдореВрдиреЛрдВ рдХреЛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЖрдзрд╛рд░ рд╣реИред рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рдбреА (рдЖрдХрд╛рд░ рдПрди рдХрд╛ рднреА) рд╕реЗ рдЖрдХрд╛рд░ n рдХреЗ рдПрдо рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдирдореВрдиреЗ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ:

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

рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреНрд░рд╛рдл рджреНрд╡рд╛рд░рд╛ рдмреИрдЧрд┐рдВрдЧ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдмреИрдЧ-рдореЙрдбрд▓ рдХреЛ рд▓рд╛рд▓ рд░реЗрдЦрд╛ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрдИ рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ рдХрд╛ рдФрд╕рдд рд╣реИред


decorrelation


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

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ 1000 рдкреЗрдбрд╝реЛрдВ рдореЗрдВ рд╕реЗ, 22 рд╡рд╛рдВ рдЪрд┐рдиреНрд╣ (рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдлреАрдЪрд░ рдХрд╛ рдореВрд▓реНрдп рд╕рдорд╛рди рд╣реИ) 526 рдкреЗрдбрд╝реЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд▓рдЧрднрдЧ рд╕рднреА рдмреЗрдЯреА рдореЗрдВ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкреЗрдбрд╝ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рд╣рд╕рдВрдмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ 1000 рдкреЗрдбрд╝ рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдЕрдЧрд░ рдХреЗрд╡рд▓ рдХреБрдЫ, рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдПрдХ рдпрд╛ рджреЛ, рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рдФрд░ рдЕрдм рдЖрдЗрдП рдПрдХ рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╕рднреА рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд╕реЗрдЯ рд╕реЗ рдХреЗрд╡рд▓ рдХреБрдЫ рдЫреЛрдЯреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдХреЗрдд, 32 рдореЗрдВ рд╕реЗ 7 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд╣рддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рддрд░рдг рдкреЗрдбрд╝реЛрдВ рдХреА рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ (рд╡реИрд╕реЗ, рди рдХреЗрд╡рд▓ рд░реВрдЯ рдиреЛрдб рдореЗрдВ, рдмрд▓реНрдХрд┐ рдмреЗрдЯреА рдиреЛрдбреНрд╕ рдореЗрдВ рднреА), рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЪрд╛рд▓ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдерд╛ред рдЕрдм 22 рд╕рдВрдХреЗрдд рдХреЗрд╡рд▓ 158 рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред " 32 рд╕рдВрдХреЗрддреЛрдВ рдореЗрдВ рд╕реЗ 7 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ " рдХреА рдкрд╕рдВрдж рдПрдХ рдЕрдиреБрднрд╡рдЬрдиреНрдп рдЕрд╡рд▓реЛрдХрди (рдореИрдВрдиреЗ рдЗрд╕ рдЕрд╡рд▓реЛрдХрди рдХреЗ рд▓реЗрдЦрдХ рдХреЛ рдирд╣реАрдВ рдкрд╛рдпрд╛ рд╣реИ) рджреНрд╡рд╛рд░рд╛ рдЙрдЪрд┐рдд рд╣реИ, рдФрд░ рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╕рдВрдХреЗрддреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╡рд░реНрдЧрдореВрд▓ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкреЗрдбрд╝ рдХрдо рд╕рд╣рд╕рдВрдмрджреНрдз рд╣реЛ рдЧрдП рд╣реИрдВ, рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдЬрд╛рд╡рдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдРрд╕реА рд╡рд┐рдзрд┐, рдЬрд┐рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд░реИрдВрдбрдо рд╕рдмрд╕реНрдкреЗрд╕ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ рдирд┐рд░реНрдгрдп рд╡реГрдХреНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рдореЙрдбрд▓ рдЬреИрд╕реЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдРрд╕рд╛ рдХреБрдЫ рд╕рд╛рдзрд╛рд░рдг рдлреНрд▓реИрдЯ рдЬрдВрдЧрд▓ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рд╕рдЬрд╛рд╡рдЯ рдХреА рдЬрд╛рддреА рд╣реИред


рдХреЛрдб


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

рдореИрдВ рдЙрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реВрдВрдЧрд╛ рдЬрд╣рд╛рдВ рдХреЛрдб рдореЗрдВ рд╕реАрдзреЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддрд╛рдХрд┐ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рди рддреЛрдбрд╝реЗрдВред
рд╕рд╛рдзрд╛рд░рдг рдкреЗрдбрд╝
 //   ,            public class TreeNode<T> { public TreeNode() { Childs = new LinkedList<TreeNode<T>>(); } public TreeNode(T data) { Data = data; Childs = new LinkedList<TreeNode<T>>(); } public TreeNode<T> Parent { get; set; } public LinkedList<TreeNode<T>> Childs { get; set; } public T Data { get; set; } public virtual bool AddChild(T data) { TreeNode<T> node = new TreeNode<T>() {Data = data}; node.Parent = this; Childs.AddLast(node); return true; } public virtual bool AddChild(TreeNode<T> node) { node.Parent = this; Childs.AddLast(node); return true; } public bool IsLeaf { get { return Childs.Count == 0; } } public int Depth { get { int d = 0; TreeNode<T> node = this; while (node.Parent != null) { d++; node = node.Parent; } return d; } } } 



рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд╡рд▓реЛрдХрди рдХреА рдЗрдХрд╛рдИ рдХреЛ рдирд┐рдореНрди рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрд╡рд▓реЛрдХрди
 public class DataItem<T> { private T[] _input = null; private T[] _output = null; public DataItem() { } public DataItem(T[] input, T[] output) { _input = input; _output = output; } public T[] Input { get { return _input; } set { _input = value; } } public T[] Output { get { return _output; } set { _output = value; } } } 



рдкреЗрдбрд╝ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдзреЗрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЯреНрд░реА рдиреЛрдб рдбреЗрдЯрд╛
 public class ClassificationTreeNodeData { //   <id ,  >,         //    p      internal IDictionary<double, double> Probabilities { get; set; } //   ,   ,         //         internal double Cost { get; set; } //       ,   , //    ,            -) internal Predicate<double[]> Predicate { get; set; } //     ,       internal IList<DataItem<double>> DataSet { get; set; } //  ,     internal string Name { get; set; } //        internal int FeatureIndex { get; set; } //       internal double FeatureValue { get; set; } //            ,    [OnSerializing] private void OnSerializing(StreamingContext context) { Predicate = null; } [OnDeserialized] [OnSerialized] private void OnDeserialized(StreamingContext context) { Predicate = v => v[FeatureIndex] < FeatureValue; } } 



рдмрд╛рдЗрдирд░реА рдирд┐рд░реНрдгрдп рдкреЗрдбрд╝ рдХреА рдХрдХреНрд╖рд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдмрд╛рдЗрдирд░реА рдирд┐рд░реНрдгрдп рдкреЗрдбрд╝
 public class ClassificationBinaryTree { private TreeNode<ClassificationTreeNodeData> _rootNode = null; private INorm<double> _norm = null; //    private int _minLeafDataCount = 1; //         private int[] _trainingFeaturesSubset = null; //         private int _randomSubsetSize = 0; //   ,      private Random _random = null; private double _maxProbability = 0; //   ,        private int _maxDepth = Int32.MaxValue; //    private bool _showLog = false; private int _featuresCount = 0; public ClassificationBinaryTree(INorm<double> norm, int minLeafDataCount, int[] trainingFeaturesSubset = null, int randomSubsetSize = 0, double maxProbability = 0.95, int maxDepth = Int32.MaxValue, bool showLog = false) { _norm = norm; _minLeafDataCount = minLeafDataCount; _trainingFeaturesSubset = trainingFeaturesSubset; _randomSubsetSize = randomSubsetSize; _maxProbability = maxProbability; _maxDepth = maxDepth; _showLog = showLog; } public TreeNode<ClassificationTreeNodeData> RootNode { get { return _rootNode; } } //   public void Train(IList<DataItem<double>> data) { _featuresCount = data.First().Input.Length; if (_randomSubsetSize > 0) { _random = new Random(Helper.GetSeed()); } IDictionary<double, double> rootProbs = ComputeLabelsProbabilities(data); _rootNode = new TreeNode<ClassificationTreeNodeData>(new ClassificationTreeNodeData() { DataSet = data, Probabilities = rootProbs, Cost = _norm.Calculate(rootProbs.Select(x => x.Value).ToArray()) }); //    Queue<TreeNode<ClassificationTreeNodeData>> queue = new Queue<TreeNode<ClassificationTreeNodeData>>(); queue.Enqueue(_rootNode); while (queue.Count > 0) { if (_showLog) { Logger.Instance.Log("Tree training: queue size is " + queue.Count); } TreeNode<ClassificationTreeNodeData> node = queue.Dequeue(); int sourceCount = node.Data.DataSet.Count; //   TrainNode(node, node.Data.DataSet, _trainingFeaturesSubset, _randomSubsetSize); if (_showLog && node.Childs.Count() > 0) { Logger.Instance.Log("Tree training: source " + sourceCount + " is splitted into " + node.Childs.First().Data.DataSet.Count + " and " + node.Childs.Last().Data.DataSet.Count); } //       foreach (TreeNode<ClassificationTreeNodeData> child in node.Childs) { if (child.Data.Probabilities.Count == 1 || child.Data.DataSet.Count <= _minLeafDataCount || child.Data.Probabilities.First().Value > _maxProbability || child.Depth >= _maxDepth) { child.Data.DataSet = null; continue; } queue.Enqueue(child); } } } //   private void TrainNode(TreeNode<ClassificationTreeNodeData> node, IList<DataItem<double>> data, int[] featuresSubset, int randomSubsetSize) { // argmin  double minCost = node.Data.Cost; int idx = -1; double threshold = 0; IDictionary<double, double> minLeftProbs = null; IDictionary<double, double> minRightProbs = null; IList<DataItem<double>> minLeft = null; IList<DataItem<double>> minRight = null; double minLeftCost = 0; double minRightCost = 0; //     ,   if (randomSubsetSize > 0) { featuresSubset = new int[randomSubsetSize]; IList<int> candidates = new List<int>(); for (int i = 0; i < _featuresCount; i++) { candidates.Add(i); } for (int i = 0; i < randomSubsetSize; i++) { int idxRandom = _random.Next(0, candidates.Count); featuresSubset[i] = candidates[idxRandom]; candidates.RemoveAt(idxRandom); } } else if (featuresSubset == null) { featuresSubset = new int[data.First().Input.Length]; for (int i = 0; i < data.First().Input.Length; i++) { featuresSubset[i] = i; } } //     foreach (int i in featuresSubset) { IList<double> domain = data.Select(x => x.Input[i]).Distinct().ToList(); //        foreach (double t in domain) { IList<DataItem<double>> left = new List<DataItem<double>>(); //      IList<DataItem<double>> right = new List<DataItem<double>>(); //    IDictionary<double, double> leftProbs = new Dictionary<double, double>(); //      IDictionary<double, double> rightProbs = new Dictionary<double, double>(); foreach (DataItem<double> di in data) { if (di.Input[i] < t) { left.Add(di); if (!leftProbs.ContainsKey(di.Output[0])) { leftProbs.Add(di.Output[0], 0); } leftProbs[di.Output[0]]++; } else { right.Add(di); if (!rightProbs.ContainsKey(di.Output[0])) { rightProbs.Add(di.Output[0], 0); } rightProbs[di.Output[0]]++; } } if (right.Count == 0 || left.Count == 0) { continue; } //   leftProbs = leftProbs.ToDictionary(x => x.Key, x => x.Value/left.Count); rightProbs = rightProbs.ToDictionary(x => x.Key, x => x.Value/right.Count); double leftCost = _norm.Calculate(leftProbs.Select(x => x.Value).ToArray()); //    double rightCost = _norm.Calculate(rightProbs.Select(x => x.Value).ToArray()); double avgCost = (leftCost + rightCost)/2; //    if (avgCost < minCost) { minCost = avgCost; idx = i; threshold = t; minLeftProbs = leftProbs; minRightProbs = rightProbs; minLeft = left; minRight = right; minLeftCost = leftCost; minRightCost = rightCost; } } } //         node.Data.DataSet = null; if (idx != -1) { //node should be splitted node.Data.Predicate = v => v[idx] < threshold; //        node.Data.Name = "x[" + idx + "] < " + threshold; node.Data.Probabilities = null; node.Data.FeatureIndex = idx; node.Data.FeatureValue = threshold; node.AddChild(new ClassificationTreeNodeData() { Probabilities = minLeftProbs.OrderByDescending(x => x.Value).ToDictionary(x => x.Key, x => x.Value), DataSet = minLeft, Cost = minLeftCost }); node.AddChild(new ClassificationTreeNodeData() { Probabilities = minRightProbs.OrderByDescending(x => x.Value).ToDictionary(x => x.Key, x => x.Value), DataSet = minRight, Cost = minRightCost }); } } //     ,     private IDictionary<double, double> ComputeLabelsProbabilities(IList<DataItem<double>> data) { IDictionary<double, double> p = new Dictionary<double, double>(); double denominator = data.Count; foreach (double label in data.Select(x => x.Output[0]).Distinct()) { p.Add(label, data.Where(x => x.Output[0] == label).Count() / denominator); } return p; } //    public IDictionary<double, double> Classify(double[] v) { TreeNode<ClassificationTreeNodeData> node = _rootNode; while (!node.IsLeaf) { node = node.Data.Predicate(v) ? node.Childs.First() : node.Childs.Last(); } return node.Data.Probabilities; } //     GraphVis http://www.graphviz.org/ public void WriteDotFile(StreamWriter sw, bool separateTerminalNode = false) { sw.WriteLine("digraph G{"); sw.WriteLine("graph [ordering=\"out\"];"); Queue<TreeNode<ClassificationTreeNodeData>> q = new Queue<TreeNode<ClassificationTreeNodeData>>(); q.Enqueue(_rootNode); int terminalCount = 0; ISet<string> styles = new HashSet<string>(); while (q.Count > 0) { TreeNode<ClassificationTreeNodeData> node = q.Dequeue(); foreach (TreeNode<ClassificationTreeNodeData> child in node.Childs) { string childName = child.Data.Name; if (String.IsNullOrEmpty(childName)) { if (separateTerminalNode) { childName = "TNode #" + terminalCount + "; Class: " + child.Data.Probabilities.First().Key; } else { childName = "Class: " + child.Data.Probabilities.First().Key; } styles.Add("\"" + childName + "\" [" + "color=red, style=filled" + "];"); terminalCount++; } sw.WriteLine("\"" + node.Data.Name + "\" -> " + "\"" + childName + "\";"); q.Enqueue(child); } } foreach (string style in styles) { sw.WriteLine(style); } sw.WriteLine("}"); } } 



рдЖрдЗрдП рд╣рдо рдирд┐рд░реНрдгрдп рдкреЗрдбрд╝ рдХреА рдХрдХреНрд╖рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдирджрдВрдб рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
рджрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕
 public interface INorm<T> { double Calculate(T[] v); } 


рдЧрдиреА рд╕реВрдЪрдХрд╛рдВрдХ
 internal class GiniIndex : INorm<double> { #region INorm<double> Members public double Calculate(double[] v) { return v.Sum(p => p*(1 - p)); } #endregion } 


рдХреНрд░реЙрд╕ рдПрдиреНрдЯреНрд░рд╛рдкреА
 internal class MetricsBasedNorm<T> : INorm<T> { private IMetrics<T> _m = null; internal MetricsBasedNorm(IMetrics<T> m) { _m = m; } #region INorm<T> Members public double Calculate(T[] v) { return _m.Calculate(v, v); } #endregion } public interface IMetrics<T> { /// <summary> /// Calculate value of metrics /// </summary> double Calculate(T[] v1, T[] v2); /// <summary> /// Get centroid/clusteroid of data /// </summary> T[] GetCentroid(IList<T[]> data); /// <summary> /// Calculate value of partial derivative by v2[v2Index] /// </summary> T CalculatePartialDerivaitveByV2Index(T[] v1, T[] v2, int v2Index); } internal class CrossEntropy : MetricsBase<double> { internal CrossEntropy() { } /// <summary> /// \sum_i v1_i * ln(v2_i) /// </summary> public override double Calculate(double[] v1, double[] v2) { if (v1.Length != v2.Length) { throw new ArgumentException("Length of v1 and v2 should be equal"); } if (v1.Length == 0 || v2.Length == 0) { throw new ArgumentException("Vector dimension can't be 0"); } double d = 0; for (int i = 0; i < v1.Length; i++) { d += v1[i]*Math.Log(v2[i] + Double.Epsilon); } return -d; } public override double CalculatePartialDerivaitveByV2Index(double[] v1, double[] v2, int v2Index) { return v2[v2Index] - v1[v2Index]; } } 



рдЦреИрд░, рдпрд╣ рдХреЗрд╡рд▓ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рди рд╡рд░реНрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
рдмреЗрддрд░рддреАрдм рдЬрдВрдЧрд▓
 public class ClassificationRandomForest { //     ,   private INorm<double> _norm = null; private int _minLeafDataCount = 1; private int[] _trainingFeaturesSubset = null; private int _randomSubsetSize = 0; //zero if all features needed private double _maxProbability = 0; private int _maxDepth = Int32.MaxValue; private bool _showLog = false; private int _forestSize = 0; //   private ConcurrentBag<ClassificationBinaryTree> _trees = null; public ClassificationRandomForest(INorm<double> norm, int forestSize, int minLeafDataCount, int[] trainingFeaturesSubset = null, int randomSubsetSize = 0, double maxProbability = 0.95, int maxDepth = Int32.MaxValue, bool showLog = false) { _norm = norm; _minLeafDataCount = minLeafDataCount; _trainingFeaturesSubset = trainingFeaturesSubset; _randomSubsetSize = randomSubsetSize; _maxProbability = maxProbability; _maxDepth = maxDepth; _forestSize = forestSize; _showLog = showLog; } public void Train(IList<DataItem<double>> data) { if (_showLog) { Logger.Instance.Log("Training is started"); } //     ,       _trees = new ConcurrentBag<ClassificationBinaryTree>(); Parallel.For(0, _forestSize, i => { ClassificationBinaryTree ct = new ClassificationBinaryTree( _norm, _minLeafDataCount, _trainingFeaturesSubset, _randomSubsetSize, _maxProbability, _maxDepth, false ); ct.Train(BasicStatFunctions.Sample(data, data.Count, true)); _trees.Add(ct); if (_showLog) { Logger.Instance.Log("Training of tree #" + _trees.Count + " is completed!"); } }); } // ,      bagging public IDictionary<double, double> Classify(double[] v) { IDictionary<double, double> p = new Dictionary<double, double>(); foreach (ClassificationBinaryTree ct in _trees) { IDictionary<double, double> tr = ct.Classify(v); double winClass = tr.First().Key; if (!p.ContainsKey(winClass)) { p.Add(winClass, 0); } p[winClass]++; } double denominator = p.Sum(x => x.Value); return p.ToDictionary(x => x.Key, x => x.Value/denominator) .OrderByDescending(x => x.Value) .ToDictionary(x => x.Key, x => x.Value); } public IList<ClassificationBinaryTree> Forest { get { return _trees.ToList(); } } } 



рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рд╕рдВрджрд░реНрдн


рдпрджрд┐ рдЖрдкрдиреЗ рдХреЛрдб рдкрд░ рдЧреМрд░ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╢рд░реНрддреЛрдВ рдХреЛ рдбреЙрдЯ рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрдбрд╝ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ , рдЬрд┐рд╕реЗ рдЧреНрд░рд╛рдлрд╡рд┐рд╕ рджреНрд╡рд╛рд░рд╛ рдХрд▓реНрдкрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ ред рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рд╕реЗрдЯ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ:

 ClassificationRandomForest crf = new ClassificationRandomForest( NormCreator.CreateByMetrics(MetricsCreator.CrossEntropy()), 10, 1, null, Convert.ToInt32(Math.Round(Math.Sqrt(ds.TrainSet.First().Input.Length))), 0.95, 1000, true ); crf.Train(ds.TrainSet); 


рдлрд┐рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣рдореЗрдВ рдЗрд╕ рдЬрдВрдЧрд▓ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛:
 foreach (ClassificationBinaryTree tree in crf.Forest) { using (StreamWriter sw = new StreamWriter(@"e:\Neuroximator\NetworkTrainingOCR\TreeTestData\Forest\" + (new DirectoryInfo(@"e:\Neuroximator\NetworkTrainingOCR\TreeTestData\Forest\")).GetFiles().Count() + ".dot")) { tree.WriteDotFile(sw); sw.Close(); } } 


 dot.exe -Tpng "tree.dot" -o "tree.png" 


рдЖрдЗрдП рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рджреЗрдЦреЗрдВ, рд╡реЗ рд╕рдЬрд╛рд╡рдЯ рдХреЗ рдХрд╛рд░рдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВред
рд╕рдордп


рджреЛ


рддреАрди



рдФрд░ рдЕрдВрдд рдореЗрдВ, рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:

Source: https://habr.com/ru/post/In215453/


All Articles