package Ġcom . res nik . intel . svm čĊč Ċ import Ġcom . res nik . intel . Model č Ċ import Ġcom . res nik . math . linear . array . Array Vector č Ċ import Ġkotlin . math . pow čĊč Ċ class ĠS VM ( dim : ĠInt , Ġval Ġkernel : ĠKernel Ġ= ĠR BF , Ġval Ġlearning Rate Ġ: ĠDouble Ġ= Ġ 0 . 0 0 1 , Ġval Ġlambda : ĠDouble Ġ= Ġ 0 . 0 1 ) Ġ: ĠModel Ġ{ čĊčĊĠĠĠ Ġvar Ġw : ĠArray Vector Ġ= ĠArray Vector ( dim , Ġ 0 . 0 ) čĊĠĠĠ Ġvar Ġb : ĠDouble Ġ= Ġ 0 . 0 čĊčĊĠĠĠ Ġoverride Ġfun Ġtrain ( input : ĠArray Vector , Ġexpected : ĠArray Vector ): ĠDouble Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġexpected [ 0 ] čĊĠĠĠĠĠĠĠ Ġupdate ( input , Ġy ) čĊĠĠĠĠĠĠĠ Ġreturn Ġcost ( input , Ġy ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġpredict ( input : ĠArray Vector ): ĠArray Vector Ġ= ĠArray Vector ( hyper plane ( input )) čĊčĊĠĠĠ Ġfun Ġhyper plane ( x : ĠArray Vector ) Ġ: ĠDouble Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġw Ġ* Ġx Ġ- Ġb čĊĠĠĠĠĠĠĠ Ġif ( ret Ġ<= Ġ- 1 ){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 . 0 čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġif ( ret Ġ>= Ġ 1 ){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 . 0 čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġret čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġh inge loss ( x : ĠArray Vector , Ġy : ĠDouble ) Ġ: ĠDouble Ġ= Ġ( 0 . 0 ). coerce At Least ( 1 Ġ- Ġy Ġ* Ġ( w Ġ* Ġx Ġ- Ġb )) čĊčĊĠĠĠ Ġfun Ġcost ( x : Array < Array Vector >, Ġy : Double Array ) Ġ: ĠDouble Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġlambda Ġ* Ġ( w . magnitude (). pow ( 2 )) Ġ+ Ġ( 1 . 0 Ġ/ Ġx . size ) Ġ* Ġx . indices . sum By Double Ġ{ Ġh inge loss ( x [ it ], Ġy [ it ]) Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġcost ( x : ĠArray Vector , Ġy : Double ) Ġ: ĠDouble Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġeval Ġ= Ġy Ġ* Ġhyper plane ( x ) čĊĠĠĠĠĠĠĠ Ġif ( eval Ġ>= Ġ 1 ){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlambda Ġ* Ġ( w . magnitude (). pow ( 2 )) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġlambda Ġ* Ġ( w . magnitude (). pow ( 2 )) Ġ+ Ġ 1 Ġ- Ġy Ġ* Ġ( w Ġ* Ġx Ġ- Ġb ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġgradient ( x : ĠArray Vector , Ġy : ĠDouble ) Ġ: ĠPair < Array Vector , ĠDouble > Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġeval Ġ= Ġy Ġ* Ġhyper plane ( x ) čĊĠĠĠĠĠĠĠ Ġvar Ġd Jd W Ġ: ĠArray Vector Ġ= ĠArray Vector ( w . size ()) čĊĠĠĠĠĠĠĠ Ġvar Ġd J dB Ġ: ĠDouble Ġ= Ġ 0 . 0 čĊĠĠĠĠĠĠĠ Ġif ( eval Ġ>= Ġ 1 ){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġd Jd W Ġ= Ġw Ġ* Ġ( 2 Ġ* Ġlambda ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġd J dB Ġ= Ġ 0 . 0 čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġd Jd W Ġ= Ġw Ġ* Ġ( 2 Ġ* Ġlambda ) Ġ- Ġx Ġ* Ġy čĊĠĠĠĠĠĠĠĠĠĠĠ Ġd J dB Ġ= Ġy čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( d Jd W , Ġd J dB ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġupdate ( x : ĠArray Vector , Ġy : ĠDouble ){ čĊĠĠĠĠĠĠĠ Ġval Ġgradient Ġ= Ġgradient ( x , Ġy ) čĊĠĠĠĠĠĠĠ Ġw Ġ-= Ġgradient . first Ġ* Ġlearning Rate čĊĠĠĠĠĠĠĠ Ġb Ġ-= Ġgradient . second Ġ* Ġlearning Rate čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġval Ġlinear Ġ: ĠKernel Ġ= Ġobject Ġ: ĠKernel Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( x 1 : ĠArray Vector , Ġx 2 : ĠArray Vector ): ĠDouble Ġ= Ġx 1 Ġ* Ġx 2 čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġval Ġquadr atic Ġ: ĠKernel Ġ= Ġobject Ġ: ĠKernel Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( x 1 : ĠArray Vector , Ġx 2 : ĠArray Vector ): ĠDouble Ġ= Ġ( x 1 Ġ* Ġx 2 ). pow ( 2 ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġval ĠR BF Ġ: ĠKernel Ġ= ĠRad ial Basis Function () čĊčĊĠĠĠ Ġ} čĊč Ċ }