package Ġio . sam uel ages il as Ċ Ċ import Ġio . sam uel ages il as . Di agnosis TestData . Di agnosis .* Ċ import Ġio . sam uel ages il as . Di agnosis TestData . classifier Ċ import Ġio . sam uel ages il as . Di agnosis TestData . training Model Ċ import Ġorg . junit . jupiter . api . Assertions Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġkotlin . math . pow Ċ Ċ class ĠTraining Model Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġfor Ġcorrect Ġroot G ini Imp urity `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn : ĠDouble Ġ= Ġ 1 Ġ- ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 8 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 2 . toDouble () Ġ/ Ġ 8 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 3 . toDouble () Ġ/ Ġ 8 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 8 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 8 ). pow ( 2 ) ĊĠĠĠĠĠĠĠ Ġ). sum () ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( classifier . calculate G ini Imp urity ( training Model ), Ġn ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ` test Ġfor Ġcorrect Ġorder Ġof Ġpredicate Function Ġlabels `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Implement Ġthis Ġtest Ġby Ġtra ver sing Ġthe Ġtree Ġand Ġcomparing Ġassert ing Ġagainst Ġthe Ġexpected Ġorder ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġthe Ġavg Ġimp urity Ġand Ġinformation Ġgain Ġof ĠQuestion Ġ 1 `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimp urity Ġ= Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft : ĠDouble Ġ= Ġ 1 Ġ- ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 6 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 2 . toDouble () Ġ/ Ġ 6 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 2 . toDouble () Ġ/ Ġ 6 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 6 ). pow ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). sum () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġ 1 Ġ- ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 2 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 2 ). pow ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). sum () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġavg Imp urity Ġ= Ġ( 6 . toDouble () Ġ/ Ġ 8 ) Ġ* Ġimp urity . left Ġ+ Ġ( 2 . toDouble () Ġ/ Ġ 8 ) Ġ* Ġimp urity . right ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠDecision Tree Classifier ( training Model , ĠDi agnosis TestData . Questions . predicates ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. calculate Information Gain ( training Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Ġ{ Ġit . predicate Function . label Ġ== Ġ" Question Ġ 1 " Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( p . avg Imp urity , Ġavg Imp urity ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( p . information Gain , Ġclassifier . calculate G ini Imp urity ( training Model ) Ġ- Ġavg Imp urity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġthe Ġavg Ġimp urity Ġand Ġinformation Ġgain Ġof ĠQuestion Ġ 4 `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimp urity Ġ= Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft : ĠDouble Ġ= Ġ 1 Ġ- Ġ(( 1 . toDouble () Ġ/ Ġ 1 ). pow ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġ 1 Ġ- ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 7 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 7 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 3 . toDouble () Ġ/ Ġ 7 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 7 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 7 ). pow ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). sum () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġavg Imp urity Ġ= Ġ( 1 . toDouble () Ġ/ Ġ 8 ) Ġ* Ġimp urity . left Ġ+ Ġ( 7 . toDouble () Ġ/ Ġ 8 ) Ġ* Ġimp urity . right ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠDecision Tree Classifier ( training Model , ĠDi agnosis TestData . Questions . predicates ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. calculate Information Gain ( training Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Ġ{ Ġit . predicate Function . label Ġ== Ġ" Question Ġ 4 " Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( p . avg Imp urity , Ġavg Imp urity ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( p . information Gain , Ġclassifier . calculate G ini Imp urity ( training Model ) Ġ- Ġavg Imp urity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġthe Ġavg Ġimp urity Ġand Ġinformation Ġgain Ġof ĠQuestion Ġ 3 `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimp urity Ġ= Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft : ĠDouble Ġ= Ġ 1 Ġ- ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 3 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 3 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 3 ). pow ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). sum () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġ 1 Ġ- ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . toDouble () Ġ/ Ġ 5 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 2 . toDouble () Ġ/ Ġ 5 ). pow ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 2 . toDouble () Ġ/ Ġ 5 ). pow ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). sum () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġavg Imp urity Ġ= Ġ( 3 . toDouble () Ġ/ Ġ 8 ) Ġ* Ġimp urity . left Ġ+ Ġ( 5 . toDouble () Ġ/ Ġ 8 ) Ġ* Ġimp urity . right ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠDecision Tree Classifier ( training Model , ĠDi agnosis TestData . Questions . predicates ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. calculate Information Gain ( training Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Ġ{ Ġit . predicate Function . label Ġ== Ġ" Question Ġ 3 " Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( p . avg Imp urity , Ġavg Imp urity ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( p . information Gain , Ġclassifier . calculate G ini Imp urity ( training Model ) Ġ- Ġavg Imp urity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġtraining Ġdata Ġpredicates Ġwith Ġclassifier `() Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( classifier . evaluate ( training Model . first ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( this Ġ== ĠDi agnosis A Ġ|| Ġthis Ġ== ĠDi agnosis B Ġ|| Ġthis Ġ== ĠDi agnosis C ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( classifier . evaluate ( training Model [ 2 ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( this Ġ== ĠDi agnosis A Ġ|| Ġthis Ġ== ĠDi agnosis B Ġ|| Ġthis Ġ== ĠDi agnosis C ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Di agnosis D , Ġclassifier . evaluate ( training Model [ 3 ])) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Di agnosis E , Ġclassifier . evaluate ( training Model [ 4 ])) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Di agnosis B , Ġclassifier . evaluate ( training Model [ 5 ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( classifier . evaluate ( training Model [ 6 ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( this Ġ== ĠDi agnosis A Ġ|| Ġthis Ġ== ĠDi agnosis B Ġ|| Ġthis Ġ== ĠDi agnosis C ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Di agnosis C , Ġclassifier . evaluate ( training Model [ 7 ])) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }