SVMред рдЕрдЬрдЧрд░ рдореЗрдВ рдЦрд░реЛрдВрдЪ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгред рд╕рдорд░реНрдерди рд╡реЗрдХреНрдЯрд░ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг

рдПрдордПрд▓-рд╕рдореБрд░рд╛рдИ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдЪреБрдирдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!


рдкрд░рд┐рдЪрдп:


рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╡реЗрдХреНрдЯрд░ рдорд╢реАрди рд╡рд┐рдзрд┐ ( Engред SVM, рд╕рдорд░реНрдерди рд╡реЗрдХреНрдЯрд░ рдорд╢реАрди ) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рдХреЗ рднрд╛рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдПрдХ рд╕рд░рд▓ DIY рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдбрд╛рдЯрд╛рд╕реЗрдЯ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЖрдЗрд░рд┐рд╕рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рдпреЛрдЬреНрдп / рдЕрд╡рд┐рднрд╛рдЬреНрдп рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ R2рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг / рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХрд╛ рджреГрд╢реНрдпред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖, рдЗрд╕рдХреЗ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЬрд╛рдПрдЧреАред


рдЫрд╡рд┐
рдЪрд┐рддреНрд░ 1. рдПрдХ рдЖрдИрд░рд┐рд╕ рдлреВрд▓ рдХреА рдУрдкрди рд╕реЛрд░реНрд╕ рдлреЛрдЯреЛ


рд╣рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛:


рд╣рдо рдмрд╛рдЗрдирд░реА рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ (рдЬрдм рдХреЗрд╡рд▓ рджреЛ рд╡рд░реНрдЧ рд╣реИрдВ) рд╡рд░реНрдЧреАрдХрд░рдгред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдЯреНрд░реЗрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рд▓реЗрдмрд▓ рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рд▓реЗрдмрд▓ рдХреЛ рдЖрд╕реНрдердЧрд┐рдд / рдкрд░реАрдХреНрд╖рдг рдирдореВрдиреЗ рд╕реЗ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╛рд╕ рд▓реЗрдмрд▓ рдорд╛рди рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ Y = \ {- 1, +1 \} ред рдСрдмреНрдЬреЗрдХреНрдЯ - рдПрди рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд╕рд╛рде рд╡реЗрдХреНрдЯрд░ x=(x1,x2,...,xn)рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдЖрд░рдПрдиред рд╕реАрдЦрддреЗ рд╕рдордп, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП F(x)=yрдЬреЛ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ x- рдЕрдВрддрд░рд┐рдХреНрд╖ рд╕реЗ рдХреЛрдИ рд╡рд╕реНрддреБ рдЖрд░рдПрдирдФрд░ рд╡рд░реНрдЧ рд▓реЗрдмрд▓ рджреЗрддрд╛ рд╣реИ рдпред


рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрдж:


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


рдПрдХ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрд╕рд╡реАрдПрдо рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдПрдХ рдЕрд▓рдЧ рд╣рд╛рдЗрдкрд░рдкреНрд▓реЗрди рдХреЗ рд╕рдореАрдХрд░рдг рдХреЛ рдЦреЛрдЬрдирд╛ рд╣реИ
w1x1+w2x2+...+wnxn+w0=0рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдЖрд░рдПрди, рдЬреЛ рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдХреБрдЫ рдЗрд╖реНрдЯрддрдо рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдЧрд╛ред рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╢реНрдп рдПрдлрд╡рд╕реНрддреБ xрд╡рд░реНрдЧ рд▓реЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдп: F(x)=рд╕рд╛рдЗрди(wTxтИТb)ред рд╣рдо рдпрд╛рдж рд░рдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдордиреЗ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рд╣реИ w=(w1,w2,...,wn),b=тИТw0ред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╡рдЬрди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж wрдФрд░ рдм(рдкреНрд░рд╢рд┐рдХреНрд╖рдг), рдирд┐рд░реНрдорд┐рдд рд╣рд╛рдЗрдкрд░рдкреНрд▓реЗрди рдХреЗ рдПрдХ рддрд░рдл рдЧрд┐рд░рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╣рд▓реЗ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рджреВрд╕рд░реА рддрд░рдл рдЧрд┐рд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдЬрд╛рдПрдЧреАред


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


SVM рд╕реНрдХреЗрд▓ рд╕рдорд╛рдпреЛрдЬрди рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЖрдЙрдЯрдкреБрдЯ:


рдирдореВрдирд╛ рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╕рдВрднрд╡ рд╣реЛ рдбрд┐рд╡рд╛рдЗрдбрд░ рд╣рд╛рдЗрдкрд░рдкреНрд▓реЗрди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░рд┐рдк рдХреА рдЪреМрдбрд╝рд╛рдИ рдЕрдзрд┐рдХрддрдо рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╡реЗрдХреНрдЯрд░ wрдбрд┐рд╡рд╛рдЗрдбрд┐рдВрдЧ рд╣рд╛рдЗрдкрд░рдкреНрд▓реЗрди рдХрд╛ рдирд┐рд░реНрджреЗрд╢рди рд╡реЗрдХреНрдЯрд░ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рджреЛ рд╡реИрдХреНрдЯрд░ рдХреЗ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХреЛ рдирд┐рд░реВрдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ  langlea,b rangleрдпрд╛ рдПрдЯреАрдмреА.Let рд╡реЗрдХреНрдЯрд░ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд┐рд░реЛрдВ рдкрд░ рд╣рд╛рдЗрдкрд░рдкреНрд▓реЗрди рдХреЗ рджрд┐рд╢рд╛ рд╡реЗрдХреНрдЯрд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рдорд░реНрдерди рд╡реИрдХреНрдЯрд░ рд╣реЛрдВрдЧреЗред рдпрд╣ рдкреНрд░рдХреНрд╖реЗрдкрдг рд╡рд┐рднрд╛рдЬрди рдкрдЯреНрдЯреА рдХреА рдЪреМрдбрд╝рд╛рдИ рджрд┐рдЦрд╛рдПрдЧрд╛ (рдЪрд┐рддреНрд░ 3 рджреЗрдЦреЗрдВ):
рдЫрд╡рд┐
рдЪрд┐рддреНрд░рд╛ 3. рддрд░рд╛рдЬреВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди ( рдпрд╣рд╛рдВ рд╕реЗ рдЖрдВрдХрдбрд╝реЗ рдХрд╛ рдЖрдзрд╛рд░)


 langle(x+тИТxтИТ),w/ Arrowvertw Arrowvert rangle=( langlex+,w rangleтИТ langlexтИТ,w rangle)/Arrowvertw Arrowvert=(b)+1)тИТ(рдмреАтИТ1))/ Arrowvertw Arrowvert=2/ Arrowvertw Arrowvert


2/ Arrowvertw Arrowvert rightarrowрдЕрдзрд┐рдХрддрдо


 Arrowvertw Arrowvert rightarrowрдорд┐рдирдЯ


(wрдЯреНрд╡)/2 nрдзрдирд░рд╛рд╢рд┐рдорд┐рдирдЯ


рдХрдХреНрд╖рд╛ рдХреА рд╕реАрдорд╛ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ x рдХрд╛ рдорд╛рд░реНрдЬрд┐рди рдорд╛рди рд╣реИ M=y(wTxтИТb)ред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдмрдирд╛рддрд╛ рд╣реИ рдЕрдЧрд░ рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд░ рдЗрдВрдбреЗрдВрдЯ рдПрдордирдХрд╛рд░рд╛рддреНрдордХ (рдЬрдм рдпрдФрд░ (wTxтИТb)рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд╛рддреНрд░)ред рдЕрдЧрд░ M0(0,1), рдлрд┐рд░ рд╡рд╕реНрддреБ рд╡рд┐рднрд╛рдЬрди рдкрдЯреНрдЯреА рдХреЗ рдЕрдВрджрд░ рдЖрддреА рд╣реИред рдЕрдЧрд░ M>1, рддрдм рдСрдмреНрдЬреЗрдХреНрдЯ x рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╡рд┐рднрд╛рдЬрди рдкрдЯреНрдЯреА рд╕реЗ рдХреБрдЫ рджреВрд░реА рдкрд░ рд╕реНрдерд┐рдд рд╣реИред рд╣рдо рдЗрд╕ рд╕рдВрдмрдВрдз рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:


y(wTxтИТb) geqslant1


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


$ $ $ $ $ \ рдмрд╛рдпрд╛рдБ {\ _ \ _ рд╢реБрд░реВ {рд╕рд░рдгреА} {ll} (w ^ рдЯреНрд╡) / 2 \ n рд╕рд╣реАрд░рд╛ рдорд┐рдирдЯ рдФрд░ \ textrm {} \\ y (w ^ Tx-b) \ geqslant 1 & textrm {} \ end {рд╕рд░рдгреА} \ рд╕рд╣реАред $ $ рдкреНрд░рджрд░реНрд╢рди $ $


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


$ $ $ $ $ \ рдмрд╛рдпрд╛рдБ {\ _ рд╢реБрд░реВ рдХрд░рдирд╛ {рд╕рд░рдгреА} {ll} (w ^ рдЯреНрд╡) / 2 + \ рдЕрд▓реНрдлрд╛ \ рдпреЛрдЧ \ xi _i \ rightarrow рдорд┐рдирдЯ рдФрд░ \ textrm {} \\ y (w ^ Tx_i-b) \ geqllant 1 - \ xi _i & \ textrm {} \\ \ xi _i \ geqslant0 & \ textrm {} \ end {рд╕рд░рдгреА} \ rightред $ $ рдкреНрд░рджрд░реНрд╢рди $ $


рд╣рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ (рдЬрдм рдПрдо <0)ред рдЗрд╕реЗ рджрдВрдб рдХрд╣реЛред рддрдм рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЬреБрд░реНрдорд╛рдирд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдЬреБрд░реНрдорд╛рдирд╛ рдХреА рд░рд╛рд╢рд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ xiрдЬрд╣рд╛рдБ [Mi<0]- рдереНрд░реЗрд╢реЛрд▓реНрдб рдлрд╝рдВрдХреНрд╢рди (рдЪрд┐рддреНрд░ 4 рджреЗрдЦреЗрдВ):


рдЬреБрд░реНрдорд╛рдирд╛= [рдПрдордЖрдИ<реж]


$ $ рдкреНрд░рджрд░реНрд╢рди $ $ [M_i <0] = \ left \ {\ {рд╢реБрд░реВ {рд╕рд░рдгреА} {ll} 1 & \ textrm {рдЕрдЧрд░} M_i <0 \\ 0 & \ textrm {рдЕрдЧрд░} M_i \ geqrlant 0 \ end {рд╕рд░рдгреА} \ рд╕рд╣реАред $ $ рдкреНрд░рджрд░реНрд╢рди $ $


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


рдЬреБрд░реНрдорд╛рдирд╛= рдпреЛрдЧ[Mi<0] leqslant рдпреЛрдЧ(1тИТMi)+= рдпреЛрдЧрдЕрдзрд┐рдХрддрдо(0,1тИТMi)


рджрдВрдб рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рд╢рдмреНрдж  рдЕрд▓реНрдлрд╛(wрдЯреНрд╡)/2рд╣рдо рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдирд░рдо рдЕрдВрддрд░ ( рд╕реЙрдлреНрдЯ-рдорд╛рд░реНрдЬрд┐рди рдПрд╕рд╡реАрдПрдо ) рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рд╕рд┐рдХ рдПрд╕рд╡реАрдПрдо рд╣рд╛рдирд┐ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:


Q=рдЕрдзрд┐рдХрддрдо(0,1тИТMi)+ рдЕрд▓реНрдлрд╛(wрдЯреНрд╡)/2


Q=рдЕрдзрд┐рдХрддрдо(0,1тИТywTx)+ рдЕрд▓реНрдлрд╛(wрдЯреНрд╡)/2


рдХреНрдпреВ- рдлрдВрдХреНрд╢рди рдлрдВрдХреНрд╢рди, рдпрд╣ рдПрдХ рд▓реЙрд╕ рдлрдВрдХреНрд╢рди рднреА рд╣реИред рдпрд╣реА рд╣рдо рд╣рд╛рдереЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдврд╛рд▓ рд╡рдВрд╢ рдХреА рдорджрдж рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдХрд░реЗрдВрдЧреЗред рд╣рдо рдмрджрд▓рддреЗ рд╡рдЬрди рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ  eta- рд╡рдВрд╢ рдХрджрдо:


w=wтИТ eta bigtriangledownQ


$ $ $ $ $ $ \ _ \ _ \ _trangledownown рдХреНрдпреВ = \ \ \ {рд╢реБрд░реВ {рд╕рд░рдгреА} {ll} \ рдЕрд▓реНрдлрд╛ w- yx & \ textrm {if} yw ^ Tx <1 \\ \ рдЕрд▓реНрдлрд╛ w & \ textrm {if} yw ^ Tx \ geqslant 1 \ end {рд╡реНрдпреВ} рд╕рд╣реАред $ $ рдкреНрд░рджрд░реНрд╢рди $ $


рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рд╢реНрди (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдШрдЯрдирд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд):


SVM рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдмрд╛рдж: Hinge_loss рдЕрдзрд┐рдХрддрдо рдирд┐рдХрд╛рд╕реА рдХреНрдпреЛрдВ рд╣реИ? - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЬрдм рд╡рдЬрди рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рдПрдХ рд╣рд╛рдЗрдкрд░рдкреНрд▓реЗрди рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ wрдФрд░ рдмред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рдЬрди рддрдм рдмрджрд▓рдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдиреБрдХрд╕рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ (рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдХрд╣рддреЗ рд╣реИрдВ: "рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдкреНрд░рд╡рд╛рд╣)"ред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдРрд╕реА рд╣рд╛рдирд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдЧреНрд░реЗрдбрд░ рд╕рд╣реА рд╕рдордп рдкрд░ рдкреНрд░рд╡рд╛рд╣ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рдХрд╛рдЬрдиреБрдХрд╕рд╛рдирдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: H=рдЕрдзрд┐рдХрддрдо(0,1тИТy(wTx))ред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдирд┐рдХрд╛рд╕реА m=y(wTx)ред рдЬрдм рдЕрдВрддрд░рд╛рд▓ рдПрдордХрд╛рдлреА рдмрдбрд╝рд╛ ( 1рдпрд╛ рдЕрдзрд┐рдХ) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (1тИТm)рд╢реВрдиреНрдп рд╕реЗ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ H=0(рдЗрд╕рд▓рд┐рдП, рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рднрд╛рд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ)ред рдпрджрд┐ рдЕрдВрддрд░ рдореАрдЯрд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреБрджрд╛рдИ рдмреИрдВрдб рдФрд░ / рдпрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдЧрд▓рдд рд╣реИ), рддреЛ Hinge_loss рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ( H>0), рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╡рдЬрд╝рди рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк: рдЧреНрд░реЗрдбрд┐рдПрдВрдЯреНрд╕ рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ: рдЬрдм рд╕реИрдВрдкрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреБрджрд╛рдИ рдмреИрдВрдб рдХреЗ рдЕрдВрджрд░ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдПрдХ рд╡рд┐рджреЗрд╢реА рднрд╛рд╖рд╛ рдХреЗ рд╕реНрддрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рди рдкреНрд░рд╢реНрди рд╕рдВрднрд╡ рд╣реИрдВ: рд▓реЙрдЬрд┐рд╕реНрдЯрд┐рдХ рд░реАрд╡реЗрд░рд┐рдпрди рдФрд░ рдПрд╕рд╡реАрдПрдо рдХреЗ рдмреАрдЪ рд╕рдорд╛рдирддрд╛рдПрдВ рдФрд░ рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИрдВ? - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рдорд╛рдирддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ: рджреЛрдиреЛрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░реНрдпрд╡реЗрдХреНрд╖рд┐рдд рд╕реАрдЦрдиреЗ рдореЗрдВ рд░реИрдЦрд┐рдХ рд╡рд░реНрдЧреАрдХрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВред рдХреБрдЫ рд╕рдорд╛рдирддрд╛рдПрдБ рдиреБрдХрд╕рд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрдирдХреЗ рддрд░реНрдХ рдореЗрдВ рд╣реИрдВ: рд▓реЙрдЧ(1+exp(тИТy(wTx)))logreg рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХрддрдо(0,1тИТy(wTx))SVM рдХреЗ рд▓рд┐рдП (рдЪрд┐рддреНрд░ 4 рджреЗрдЦреЗрдВ)ред рджреЛрдиреЛрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣рдо рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдбреАрд╕реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЧреЗ рд╣рдо рдорддрднреЗрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ: рдПрд╕рд╡реАрдПрдо рд▓реЙрдЧрд░реЗрдЬ рдХреЗ рд╡рд┐рдкрд░реАрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдХреНрд▓рд╛рд╕ рд▓реЗрдмрд▓, рдЬреЛ рдХреНрд▓рд╛рд╕ рд╕рджрд╕реНрдпрддрд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред SVM рдХреНрд▓рд╛рд╕ рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ \ {0,1 \} (рдирд╛рдо рдмрджрд▓рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛) LogReg (LogReg loss fination) рдХреЗ рд╡рд┐рдкрд░реАрдд \ {0,1 \} : тИТрд▓реЙрдЧ(рдкреА)тИТ(1тИТрд╡рд╛рдИ)рд▓реЙрдЧ(1тИТрдкреА), рдХрд╣рд╛рдБ рдп- рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдХреНрд╖рд╛ рд▓реЗрдмрд▓, рдкреА- рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рд╡рд╛рдкрд╕реА, рд╕рдВрдмрдВрдзрд┐рдд рд╡рд╕реНрддреБ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ xрдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП \ {1 \} )ред рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ, рд╣рдо рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдбрд┐рд╕реЗрдВрдЯ рдХреЗ рдмрд┐рдирд╛ рд╣рд╛рд░реНрдб-рдорд╛рд░реНрдЬрд┐рди рдПрд╕рд╡реАрдПрдо рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдкреЛрд░реНрдЯ рд╡реИрдХреНрдЯрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд▓реИрдЧреНрд░реЗрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд╛рдареА рдмрд┐рдВрджреБ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ - рдпрд╣ рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рджреНрд╡рд┐рдШрд╛рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред


рд╣рд╛рдирд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдб:
import numpy as np import matplotlib.pyplot as plt %matplotlib inline xx = np.linspace(-4,3,100000) plt.plot(xx, [(x<0).astype(int) for x in xx], linewidth=2, label='1 if M<0, else 0') plt.plot(xx, [np.log2(1+2.76**(-x)) for x in xx], linewidth=4, label='logistic = log(1+e^-M)') plt.plot(xx, [np.max(np.array([0,1-x])) for x in xx], linewidth=4, label='hinge = max(0,1-M)') plt.title('Loss = F(Margin)') plt.grid() plt.legend(prop={'size': 14}); 

рдЫрд╡рд┐
рдЪрд┐рддреНрд░рд╛ 4. рдиреБрдХрд╕рд╛рди рдХреЗ рдХрд╛рд░реНрдп


рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реЙрдлреНрдЯ-рдорд╛рд░реНрдЬрд┐рди рдПрд╕рд╡реАрдПрдо рдХрд╛ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:


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


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рд▓рд╛рдЗрди рдбреНрд░реЙ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЯреНрд░рд┐рдо рдХрд░реЗрдВрдЧреЗ:
 import numpy as np import warnings warnings.filterwarnings('ignore') import matplotlib.pyplot as plt import matplotlib.lines as mlines plt.rcParams['figure.figsize'] = (8,6) %matplotlib inline from sklearn.datasets import load_iris from sklearn.decomposition import PCA from sklearn.model_selection import train_test_split def newline(p1, p2, color=None): #    #function kredits to: https://fooobar.com/questions/626491/how-to-draw-a-line-with-matplotlib ax = plt.gca() xmin, xmax = ax.get_xbound() if(p2[0] == p1[0]): xmin = xmax = p1[0] ymin, ymax = ax.get_ybound() else: ymax = p1[1]+(p2[1]-p1[1])/(p2[0]-p1[0])*(xmax-p1[0]) ymin = p1[1]+(p2[1]-p1[1])/(p2[0]-p1[0])*(xmin-p1[0]) l = mlines.Line2D([xmin,xmax], [ymin,ymax], color=color) ax.add_line(l) return l 

рд╕реЙрдлреНрдЯ-рдорд╛рд░реНрдЬрд┐рди рдПрд╕рд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛрдб:
 def add_bias_feature(a): a_extended = np.zeros((a.shape[0],a.shape[1]+1)) a_extended[:,:-1] = a a_extended[:,-1] = int(1) return a_extended class CustomSVM(object): __class__ = "CustomSVM" __doc__ = """ This is an implementation of the SVM classification algorithm Note that it works only for binary classification ############################################################# ###################### PARAMETERS ###################### ############################################################# etha: float(default - 0.01) Learning rate, gradient step alpha: float, (default - 0.1) Regularization parameter in 0.5*alpha*||w||^2 epochs: int, (default - 200) Number of epochs of training ############################################################# ############################################################# ############################################################# """ def __init__(self, etha=0.01, alpha=0.1, epochs=200): self._epochs = epochs self._etha = etha self._alpha = alpha self._w = None self.history_w = [] self.train_errors = None self.val_errors = None self.train_loss = None self.val_loss = None def fit(self, X_train, Y_train, X_val, Y_val, verbose=False): #arrays: X; Y =-1,1 if len(set(Y_train)) != 2 or len(set(Y_val)) != 2: raise ValueError("Number of classes in Y is not equal 2!") X_train = add_bias_feature(X_train) X_val = add_bias_feature(X_val) self._w = np.random.normal(loc=0, scale=0.05, size=X_train.shape[1]) self.history_w.append(self._w) train_errors = [] val_errors = [] train_loss_epoch = [] val_loss_epoch = [] for epoch in range(self._epochs): tr_err = 0 val_err = 0 tr_loss = 0 val_loss = 0 for i,x in enumerate(X_train): margin = Y_train[i]*np.dot(self._w,X_train[i]) if margin >= 1: #   self._w = self._w - self._etha*self._alpha*self._w/self._epochs tr_loss += self.soft_margin_loss(X_train[i],Y_train[i]) else: #         0<m<1 self._w = self._w +\ self._etha*(Y_train[i]*X_train[i] - self._alpha*self._w/self._epochs) tr_err += 1 tr_loss += self.soft_margin_loss(X_train[i],Y_train[i]) self.history_w.append(self._w) for i,x in enumerate(X_val): val_loss += self.soft_margin_loss(X_val[i], Y_val[i]) val_err += (Y_val[i]*np.dot(self._w,X_val[i])<1).astype(int) if verbose: print('epoch {}. Errors={}. Mean Hinge_loss={}'\ .format(epoch,err,loss)) train_errors.append(tr_err) val_errors.append(val_err) train_loss_epoch.append(tr_loss) val_loss_epoch.append(val_loss) self.history_w = np.array(self.history_w) self.train_errors = np.array(train_errors) self.val_errors = np.array(val_errors) self.train_loss = np.array(train_loss_epoch) self.val_loss = np.array(val_loss_epoch) def predict(self, X:np.array) -> np.array: y_pred = [] X_extended = add_bias_feature(X) for i in range(len(X_extended)): y_pred.append(np.sign(np.dot(self._w,X_extended[i]))) return np.array(y_pred) def hinge_loss(self, x, y): return max(0,1 - y*np.dot(x, self._w)) def soft_margin_loss(self, x, y): return self.hinge_loss(x,y)+self._alpha*np.dot(self._w, self._w) 

рд╣рдо рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:


1) рдПрдХ рдлрд╝рдВрдХреНрд╢рди add_bias_feature (a ) рдмрдирд╛рдПрдВ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрдХреНрдЯрд░ рдХреЗ рдирдВрдмрд░ 1 рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдлреНрд░реА рдЯрд░реНрдо b рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ "рднреВрд▓" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ wTxтИТbрдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд░рд╛рдмрд░ w1x1+w2x2+...+wnxn+w0тИЧ1ред рд╣рдо рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпреВрдирд┐рдЯ рд╕рднреА рд╡реИрдХреНрдЯрд░ x, рдФрд░ рдХреЗ рд▓рд┐рдП рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЕрдВрддрд┐рдо рдШрдЯрдХ рд╣реИ w0=тИТbред рдЕрдм рд╡реЗрдЯ рд╕реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ wрдФрд░ w0рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдВрдЧреЗред


рдлрд╝реАрдЪрд░ рд╡реЗрдХреНрдЯрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб:
 def add_bias_feature(a): a_extended = np.zeros((a.shape[0],a.shape[1]+1)) a_extended[:,:-1] = a a_extended[:,-1] = int(1) return a_extended 

2) рдлрд┐рд░ рд╣рдо рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдХрд╛ рд╣реА рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдЗрдирд┐рдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ () , рд▓рд░реНрдирд┐рдВрдЧ рдлрд┐рдЯ () , рдкреНрд░реЗрдбрд┐рдХреНрдЯрд┐рдВрдЧ рдкреНрд░реЗрдбрд┐рдХреНрдЯ () , рд╣рд┐рдВрдЧ_рд▓реЙрд╕ () рдлрдВрдХреНрд╢рди рдХреЗ рдиреБрдХрд╕рд╛рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдФрд░ рдХреНрд▓рд╛рд╕рд┐рдХрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдлрдВрдХреНрд╢рди рдХрд╛ рдЯреЛрдЯрд▓ рд▓реЙрд╕ рдХреЛ рд╕реЙрдлреНрдЯ рдЧреИрдк soft_margin -loss () рд╕реЗ рдвреВрдВрдврдирд╛ рд╣реИ ред


3) рдЖрд░рдВрднреАрдХрд░рдг рдкрд░, 3 рд╣рд╛рдЗрдкрд░рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: _рдерд╛ - рдврд╛рд▓ рд╡рдВрд╢ рдХрд╛ рдЪрд░рдг (  eta), _рд▓реНрдкрд╛ - рдЖрдиреБрдкрд╛рддрд┐рдХ рд╡рдЬрди рдореЗрдВ рдХрдореА рдХреА рдЧрддрд┐ рдХрд╛ рдЧреБрдгрд╛рдВрдХ (рдиреБрдХрд╕рд╛рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджреНрд╡рд┐рдШрд╛рдд рд╕реЗ рдкрд╣рд▓реЗ)  рдЕрд▓реНрдлрд╛), _epochs - рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдпреБрдЧ рдХреА рд╕рдВрдЦреНрдпрд╛ред


рдкреНрд░рд╛рд░рдВрдн рд╕рдорд╛рд░реЛрд╣ рдХреЛрдб:
  def __init__(self, etha=0.01, alpha=0.1, epochs=200): self._epochs = epochs self._etha = etha self._alpha = alpha self._w = None self.history_w = [] self.train_errors = None self.val_errors = None self.train_loss = None self.val_loss = None 

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


рд▓рд░реНрдирд┐рдВрдЧ рдлрдВрдХреНрд╢рди рдХреЛрдб:
  def fit(self, X_train, Y_train, X_val, Y_val, verbose=False): #arrays: X; Y =-1,1 if len(set(Y_train)) != 2 or len(set(Y_val)) != 2: raise ValueError("Number of classes in Y is not equal 2!") X_train = add_bias_feature(X_train) X_val = add_bias_feature(X_val) self._w = np.random.normal(loc=0, scale=0.05, size=X_train.shape[1]) self.history_w.append(self._w) train_errors = [] val_errors = [] train_loss_epoch = [] val_loss_epoch = [] for epoch in range(self._epochs): tr_err = 0 val_err = 0 tr_loss = 0 val_loss = 0 for i,x in enumerate(X_train): margin = Y_train[i]*np.dot(self._w,X_train[i]) if margin >= 1: #   self._w = self._w - self._etha*self._alpha*self._w/self._epochs tr_loss += self.soft_margin_loss(X_train[i],Y_train[i]) else: #         0<m<1 self._w = self._w +\ self._etha*(Y_train[i]*X_train[i] - self._alpha*self._w/self._epochs) tr_err += 1 tr_loss += self.soft_margin_loss(X_train[i],Y_train[i]) self.history_w.append(self._w) for i,x in enumerate(X_val): val_loss += self.soft_margin_loss(X_val[i], Y_val[i]) val_err += (Y_val[i]*np.dot(self._w,X_val[i])<1).astype(int) if verbose: print('epoch {}. Errors={}. Mean Hinge_loss={}'\ .format(epoch,err,loss)) train_errors.append(tr_err) val_errors.append(val_err) train_loss_epoch.append(tr_loss) val_loss_epoch.append(val_loss) self.history_w = np.array(self.history_w) self.train_errors = np.array(train_errors) self.val_errors = np.array(val_errors) self.train_loss = np.array(train_loss_epoch) self.val_loss = np.array(val_loss_epoch) 

рд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдБрдЪ:


рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЦрд┐рд▓реМрдирд╛ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдЗрд░рд┐рд╕ рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЗрдВред рд╣рдо рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдХрдХреНрд╖рд╛ 1 рдФрд░ 2 рдХреЛ рдирд┐рд░реВрдкрд┐рдд рдХрд░реЗрдВ +1, рдФрд░ рдХрдХреНрд╖рд╛ 0 рдХреЗ рд░реВрдк рдореЗрдВ тИТ1ред рдкреАрд╕реАрдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдФрд░ рдпрд╣рд╛рдВ рдЖрд╡реЗрджрди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдиреНрдпреВрдирддрдо рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рдХреЗ рд╕рд╛рде 4 рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЛ 2 рддрдХ рдХрдо рдХрд░ рджреЗрддреЗ рд╣реИрдВ (рдпрд╣ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реЛрдЧрд╛)ред рдЕрдЧрд▓рд╛, рд╣рдо рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг (рдЯреНрд░реЗрди) рдХреЗ рдирдореВрдиреЗ рдФрд░ рдПрдХ рд╡рд┐рд▓рдВрдмрд┐рдд (рд╕рддреНрдпрд╛рдкрди) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдЧреЗред рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдирдореВрдиреЗ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдВрдЧреЗ, рдЖрд╕реНрдердЧрд┐рдд рдкрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдФрд░ рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗред рд╣рдо рд╕реАрдЦрдиреЗ рдХреЗ рдХрд╛рд░рдХреЛрдВ рдХреЛ рдЪреБрдирддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдиреБрдХрд╕рд╛рди рдлрд╝рдВрдХреНрд╢рди рдЧрд┐рд░ рдЬрд╛рдПред рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдХрд╛рд░реНрдп рдФрд░ рд╡рд┐рд▓рдВрдмрд┐рдд рдирдореВрдиреЗ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред


рдбреЗрдЯрд╛ рддреИрдпрд╛рд░реА рдмреНрд▓реЙрдХ:
 #    iris = load_iris() X = iris.data Y = iris.target pca = PCA(n_components=2) X = pca.fit_transform(X) Y = (Y > 0).astype(int)*2-1 # [0,1,2] --> [False,True,True] --> [0,1,1] --> [0,2,2] --> [-1,1,1] X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.4, random_state=2020) 

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЗрдХрд╛рдИ:
 #     svm = CustomSVM(etha=0.005, alpha=0.006, epochs=150) svm.fit(X_train, Y_train, X_test, Y_test) print(svm.train_errors) # numbers of error in each epoch print(svm._w) # w0*x_i[0]+w1*x_i[1]+w2=0 plt.plot(svm.train_loss, linewidth=2, label='train_loss') plt.plot(svm.val_loss, linewidth=2, label='test_loss') plt.grid() plt.legend(prop={'size': 15}) plt.show() 

рдЫрд╡рд┐


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд┐рднрд╛рдЬрд┐рдд рдкрдЯреНрдЯреА рдХрд╛ рджреГрд╢реНрдп рдмреНрд▓реЙрдХ:
 d = {-1:'green', 1:'red'} plt.scatter(X_train[:,0], X_train[:,1], c=[d[y] for y in Y_train]) newline([0,-svm._w[2]/svm._w[1]],[-svm._w[2]/svm._w[0],0], 'blue') #  w0*x_i[0]+w1*x_i[1]+w2*1=0  #  x_i[0]=0, x_i[1]=0 newline([0,1/svm._w[1]-svm._w[2]/svm._w[1]],[1/svm._w[0]-svm._w[2]/svm._w[0],0]) #w0*x_i[0]+w1*x_i[1]+w2*1=1 newline([0,-1/svm._w[1]-svm._w[2]/svm._w[1]],[-1/svm._w[0]-svm._w[2]/svm._w[0],0]) #w0*x_i[0]+w1*x_i[1]+w2*1=-1 plt.show() 

рдЫрд╡рд┐


рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рджреГрд╢реНрдп рдмреНрд▓реЙрдХ:
 #    y_pred = svm.predict(X_test) y_pred[y_pred != Y_test] = -100 # find and mark classification error print('    : ', (y_pred == -100).astype(int).sum()) d1 = {-1:'lime', 1:'m', -100: 'black'} # black = classification error plt.scatter(X_test[:,0], X_test[:,1], c=[d1[y] for y in y_pred]) newline([0,-svm._w[2]/svm._w[1]],[-svm._w[2]/svm._w[0],0], 'blue') newline([0,1/svm._w[1]-svm._w[2]/svm._w[1]],[1/svm._w[0]-svm._w[2]/svm._w[0],0]) #w0*x_i[0]+w1*x_i[1]+w2*1=1 newline([0,-1/svm._w[1]-svm._w[2]/svm._w[1]],[-1/svm._w[0]-svm._w[2]/svm._w[0],0]) #w0*x_i[0]+w1*x_i[1]+w2*1=-1 plt.show() 

рдЫрд╡рд┐


рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рд╣рдорд╛рд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдиреЗ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рдпреЛрдЬреНрдп рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рд╛ред рдЕрдм рдЗрд╕реЗ рдХрдХреНрд╖рд╛ 2 рд╕реЗ рдЕрд▓рдЧ 0 рдФрд░ 1 рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ:


рдбреЗрдЯрд╛ рддреИрдпрд╛рд░реА рдмреНрд▓реЙрдХ:
 #    iris = load_iris() X = iris.data Y = iris.target pca = PCA(n_components=2) X = pca.fit_transform(X) Y = (Y == 2).astype(int)*2-1 # [0,1,2] --> [False,False,True] --> [0,1,1] --> [0,0,2] --> [-1,1,1] X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.4, random_state=2020) 

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЗрдХрд╛рдИ:
 #     svm = CustomSVM(etha=0.03, alpha=0.0001, epochs=300) svm.fit(X_train, Y_train, X_test, Y_test) print(svm.train_errors[:150]) # numbers of error in each epoch print(svm._w) # w0*x_i[0]+w1*x_i[1]+w2=0 plt.plot(svm.train_loss, linewidth=2, label='train_loss') plt.plot(svm.val_loss, linewidth=2, label='test_loss') plt.grid() plt.legend(prop={'size': 15}) plt.show() 

рдЫрд╡рд┐


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд┐рднрд╛рдЬрд┐рдд рдкрдЯреНрдЯреА рдХрд╛ рджреГрд╢реНрдп рдмреНрд▓реЙрдХ:
 d = {-1:'green', 1:'red'} plt.scatter(X_train[:,0], X_train[:,1], c=[d[y] for y in Y_train]) newline([0,-svm._w[2]/svm._w[1]],[-svm._w[2]/svm._w[0],0], 'blue') #  w0*x_i[0]+w1*x_i[1]+w2*1=0  #  x_i[0]=0, x_i[1]=0 newline([0,1/svm._w[1]-svm._w[2]/svm._w[1]],[1/svm._w[0]-svm._w[2]/svm._w[0],0]) #w0*x_i[0]+w1*x_i[1]+w2*1=1 newline([0,-1/svm._w[1]-svm._w[2]/svm._w[1]],[-1/svm._w[0]-svm._w[2]/svm._w[0],0]) #w0*x_i[0]+w1*x_i[1]+w2*1=-1 plt.show() 

рдЫрд╡рд┐


рдЖрдЗрдП рдЬрд┐рдлрд╝ рдХреЛ рджреЗрдЦреЗрдВ, рдЬреЛ рдпрд╣ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рд╡рд┐рднрд╛рдЬрд┐рдд рд▓рд╛рдЗрди рдиреЗ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреИрд╕реЗ рдмрджрд▓ рджреА (рдХреЗрд╡рд▓ 500 рдлреНрд░реЗрдо рдмрджрд▓рддреЗ рд╡рдЬрди рдХреЗ рд▓рд┐рдПред рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкрд╣рд▓рд╛ 300ред рдкреНрд░рддреНрдпреЗрдХ 130 рд╡реЗрдВ рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реЗ 200 рдЯреБрдХрдбрд╝реЗ)ред


рдПрдирд┐рдореЗрд╢рди рдирд┐рд░реНрдорд╛рдг рдХреЛрдб:
 import matplotlib.animation as animation from matplotlib.animation import PillowWriter def one_image(w, X, Y): axes = plt.gca() axes.set_xlim([-4,4]) axes.set_ylim([-1.5,1.5]) d1 = {-1:'green', 1:'red'} im = plt.scatter(X[:,0], X[:,1], c=[d1[y] for y in Y]) im = newline([0,-w[2]/w[1]],[-w[2]/w[0],0], 'blue') # im = newline([0,1/w[1]-w[2]/w[1]],[1/w[0]-w[2]/w[0],0], 'lime') #w0*x_i[0]+w1*x_i[1]+w2*1=1 # im = newline([0,-1/w[1]-w[2]/w[1]],[-1/w[0]-w[2]/w[0],0]) #w0*x_i[0]+w1*x_i[1]+w2*1=-1 return im fig = plt.figure() ims = [] for i in range(500): if i<=300: k = i else: k = (i-298)*130 im = one_image(svm.history_w[k], X_train, Y_train) ims.append([im]) ani = animation.ArtistAnimation(fig, ims, interval=20, blit=True, repeat_delay=500) writer = PillowWriter(fps=20) ani.save("my_demo.gif", writer='imagemagick') 

рдЫрд╡рд┐


рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рджреГрд╢реНрдп рдмреНрд▓реЙрдХ:
 #    y_pred = svm.predict(X_test) y_pred[y_pred != Y_test] = -100 # find and mark classification error print('    : ', (y_pred == -100).astype(int).sum()) d1 = {-1:'lime', 1:'m', -100: 'black'} # black = classification error plt.scatter(X_test[:,0], X_test[:,1], c=[d1[y] for y in y_pred]) newline([0,-svm._w[2]/svm._w[1]],[-svm._w[2]/svm._w[0],0], 'blue') newline([0,1/svm._w[1]-svm._w[2]/svm._w[1]],[1/svm._w[0]-svm._w[2]/svm._w[0],0]) #w0*x_i[0]+w1*x_i[1]+w2*1=1 newline([0,-1/svm._w[1]-svm._w[2]/svm._w[1]],[-1/svm._w[0]-svm._w[2]/svm._w[0],0]) #w0*x_i[0]+w1*x_i[1]+w2*1=-1 plt.show() 

рдЫрд╡рд┐


рд░рд┐рдХреНрдд рд╕реНрдерд╛рди


рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рдпреЛрдЬреНрдп рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдРрд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ рдЬрд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рдРрд╕реЗ рд╕реНрдерд╛рди рдХреЛ рд╕реБрдзрд╛рд░рдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд░реЗрдХреНрдЯрд┐рдлрд╛рдЗрдВрдЧ рд╕реНрдкреЗрд╕ рдФрд░ рдХрд░реНрдиреЗрд▓ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЖрдк рдИред рд╕реЛрдХреЛрд▓реЛрд╡ рдХреЗ 14,15,16 рд╕рд┐рдиреЙрдкреНрд╕рд┐рд╕ рдореЗрдВ рдФрд░ рдХреЗ.рд╡реА. рд╡реЛрд░реНрддреНрд╕реЛрд╡ рдХреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рдиреЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдкреВрд░реНрдг рдЧрдгрд┐рддреАрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред


Sklearn рд╕реЗ SVM тАЛтАЛрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:


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


рдХреЛрдб рдЙрджрд╛рд╣рд░рдг
 from sklearn import svm from sklearn.metrics import recall_score C = 1.0 # = self._alpha in our algorithm model1 = svm.SVC(kernel='linear', C=C) #model1 = svm.LinearSVC(C=C, max_iter=10000) #model1 = svm.SVC(kernel='rbf', gamma=0.7, C=C) #model1 = svm.SVC(kernel='poly', degree=3, gamma='auto', C=C) model1.fit(X_train, Y_train) y_predict = model1.predict(X_test) print(recall_score(Y_test, y_predict, average=None)) 

рдХреНрд▓рд╛рд╕рд┐рдХ рдПрд╕рд╡реАрдПрдо рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖:


рдкреЗрд╢реЗрд╡рд░реЛрдВ:


  1. рдмрдбрд╝реА рд╕реБрд╡рд┐рдзрд╛ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ;
  2. рдЫреЛрдЯреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ;
  3. рдЗрд╕рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдбрд┐рд╡рд╛рдЗрдбрд┐рдВрдЧ рдмреИрдВрдб рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдПрдпрд░рдмреИрдЧ рдХреА рддрд░рд╣, рд╡рд░реНрдЧреАрдХрд░рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ;
  4. рдЪреВрдВрдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрдХ рдЙрддреНрддрд▓ рдбреЛрдореЗрди рдореЗрдВ рджреНрд╡рд┐рдШрд╛рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рдЕрдиреВрдард╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрддрд╛ рд╣реИ (рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдХреБрдЫ рд╣рд╛рдЗрдкрд░рдкреИрд░рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрдкрд░рдкреНрд▓реЗрди рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИ)ред

рд╡рд┐рдкрдХреНрд╖:


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

рдПрд╕рд╡реАрдПрдо рдЖрд╡реЗрджрди:


рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдкрд╕рдВрдж рд╕реАрдзреЗ рдбреЗрдЯрд╛ рдЦрдирди рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


  • рдПрдХ рдЫреЛрдЯреЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп;
  • рдкрд╛рда рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдпред SVM рдПрдХ рдЕрдЪреНрдЫреА рдмреЗрд╕рд▓рд╛рдЗрди ([рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ] + [TF-iDF] + [SVM]) рджреЗрддрд╛ рд╣реИ, рдкреНрд░рд╛рдкреНрдд рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╕рдЯреАрдХрддрд╛ рдХреБрдЫ рджреГрдврд╝ / рдЖрд╡рд░реНрддрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕реНрддрд░ рдкрд░ рдирд┐рдХрд▓рддреА рд╣реИ (рдореИрдВ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдореЗрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ)ред рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, "рднрд╛рдЧ 3. рд╣рдо рдЬреЛ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг" ;
  • рд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХ [рдлреАрдЪрд░ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ] + [рдПрд╕рд╡реАрдПрдо] + [рдХрд░реНрдиреЗрд▓] "рд╕реНрдЯрд┐рд▓ рдХреЗрдХ";
  • рдЪреВрдБрдХрд┐ рд╣рд┐рдВрдЧ рдиреБрдХрд╕рд╛рди рдХреЛ рдмрд╣реБрдд рддреЗрдЬрд╝ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╡реМрдкрд╛рд▓ рд╡реЗрдмрд┐рдЯ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ) рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рдВрд╢реЛрдзрдиреЛрдВ:


рд╕рдкреЛрд░реНрдЯ рд╡реЗрдХреНрдЯрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡рд░реНрдзрди рдФрд░ рд╕рдВрд╢реЛрдзрди рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреБрдЫ рдиреБрдХрд╕рд╛рди рдХреЛ рджреВрд░ рдХрд░рдирд╛ рд╣реИ:


  • рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╡реЗрдХреНрдЯрд░ рдорд╢реАрди (рдЖрд░рд╡реАрдПрдо)
  • 1-рдорд╛рдирдХ SVM (LASSO SVM)
  • рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ SVM тАЛтАЛ(ElasticNet SVM)
  • рд╕рдорд░реНрдерди рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдорд╢реАрди (SFM)
  • рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдорд╢реАрди (RFM)

SVM рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрд░реЛрдд:


  1. рдХреЗ.рд╡реА. рд╡реЛрд░реНрддреНрд╕реЛрд╡ рджреНрд╡рд╛рд░рд╛ рдкрд╛рда рд╡реНрдпрд╛рдЦреНрдпрд╛рди
  2. рдИред рд╕реЛрдХреЛрд▓реЛрд╡ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ - 14.15.16
  3. рдЕрд▓реЗрдХреНрдЬреЗрдВрдбреНрд░реЗ рдХреЙрд╡реЗрд▓реНрд╕реНрдХреА рджреНрд╡рд╛рд░рд╛ рдХреВрд▓ рд╕реНрд░реЛрдд
  4. рдПрдХ рд╣рдмреНрд░ рдкрд░ svm рдХреЛ рд╕рдорд░реНрдкрд┐рдд 2 рд▓реЗрдЦ рд╣реИрдВ:
  5. рдЧреАрдереВрдм рдкрд░, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдВрдХ рдкрд░ 2 рд╢рд╛рдВрдд рдПрд╕рд╡реАрдПрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

рдирд┐рд╖реНрдХрд░реНрд╖:


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


рдЪреМрд░рд╕рд╛рдИ рдХреЛрдиреЛрдВ рдкрд░ рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдпреЛрд░реНрдХреЛ ред рдПрд▓реЗрдХреНрд╕реА рд╕рд┐рдЬрд╝рд┐рдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж - рдПрдХ рднреМрддрд┐рдХреА рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рд╡рд┐рднрд╛рдЧ рдЬрд┐рд╕рдиреЗ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдб рдореЗрдВ рдирд┐рд╡реЗрд╢ рдХрд┐рдпрд╛ рд╣реИред

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


All Articles