package Ġma ia . ml . evaluation . standard . evaluator Ċ Ċ import Ġma ia . ml . dataset . DataRow Ċ import Ġma ia . ml . dataset . DataStream Ċ import Ġma ia . ml . dataset . With Columns Ċ import Ġma ia . ml . dataset . error . Missing Value Ċ import Ġma ia . ml . dataset . type . standard . Nominal Ċ import Ġma ia . ml . dataset . util . weight Ċ import Ġma ia . ml . evaluation . Evaluation Harness Callback Ċ import Ġma ia . ml . evaluation . Metric Ċ import Ġma ia . ml . evaluation . Stream Evaluator Ċ import Ġma ia . ml . lear ner . Le arner Ċ import Ġma ia . ml . lear ner . type . Classifier Ċ import Ġma ia . ml . lear ner . type . Le arner Type Ċ import Ġma ia . ml . lear ner . type . Single Target Ċ import Ġma ia . ml . lear ner . type . intersection Of Ċ import Ġma ia . util . assert Type Ċ Ċ /** Ċ Ġ* ĠEvalu ator Ġwhich Ġmeasures Ġmultiple Ġforms Ġof Ġaccuracy Ġover Ġthe Ġcourse Ċ Ġ* Ġof Ġan Ġevaluation Ġon Ġa Ġsingle - target Ġclassifier . ĠBased Ġon ĠMO A 's Ċ Ġ* Ġmo a . evaluation . Basic Classification Performance Evaluator . Ċ Ġ* Ċ Ġ* Ġ@ param Ġprecision Re call Ċ Ġ* ĠĠĠĠĠĠĠĠĠ ĠWhether Ġto Ġoutput Ġthe Ġoverall Ġprecision / recall / F 1 Ġstatistics . Ċ Ġ* Ġ@ param Ġprecision Per Class Ċ Ġ* ĠĠĠĠĠĠĠĠĠ ĠWhether Ġto Ġoutput Ġthe Ġprecision Ġper - class . Ċ Ġ* Ġ@ param Ġrecall Per Class Ċ Ġ* ĠĠĠĠĠĠĠĠĠ ĠWhether Ġto Ġoutput Ġthe Ġrecall Ġper - class . Ċ Ġ* Ġ@ param Ġf 1 Per Class Ċ Ġ* ĠĠĠĠĠĠĠĠĠ ĠWhether Ġto Ġoutput Ġthe ĠF 1 Ġstatistic Ġper - class . Ċ Ġ* Ċ Ġ* Ġ@ author ĠCore y ĠS ter ling Ġ( c ster lin Ġat Ġwa ik ato Ġdot Ġac Ġdot Ġnz ) Ċ Ġ*/ Ċ open Ġclass ĠClassification Performance Evaluator ( ĊĠĠĠ Ġval Ġprecision Re call : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġprecision Per Class : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġrecall Per Class : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġf 1 Per Class : ĠBoolean Ġ= Ġfalse Ċ ): ĠStream Evaluator < Le arner < DataStream <* >>, ĠDouble > Ġ{ ĊĊĠĠĠ Ġinterface ĠEst imator Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġadd ( value : ĠDouble ) ĊĠĠĠĠĠĠĠ Ġval Ġvalue : ĠDouble ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBasic Estimator Ġ: ĠEst imator Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġlen : ĠDouble Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġsum : ĠDouble Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġadd ( value Ġ: ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . isNaN ()) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . sum Ġ+= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . len ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġvalue Ġ: ĠDouble ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġsum Ġ/ Ġlen ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġnew Estimator (): ĠEst imator Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBasic Estimator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠStats ( ĊĠĠĠĠĠĠĠ Ġle arner : ĠLear ner < DataStream <* >> ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpredict Repr Ġ= Ġassert Type < Nominal < *, Ġ*, Ġ*, Ġ* >>( lear ner . predict Output Headers [ 0 ]. type ). index Representation ĊĠĠĠĠĠĠĠ Ġval Ġtrain Repr Ġ= Ġassert Type < Nominal < *, Ġ*, Ġ*, Ġ* >>( lear ner . train Headers [ predict Repr . columnName ] !!. type ). index Representation ĊĠĠĠĠĠĠĠ Ġval Ġnum Classes Ġ= Ġpredict Repr . dataType . num Categories ĊĠĠĠĠĠĠĠ Ġval Ġrow K appa Ġ: ĠArray < Estimator > Ġ= ĠArray ( num Classes ) Ġ{ Ġnew Estimator () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcolumn K appa Ġ: ĠArray < Estimator > Ġ= ĠArray ( num Classes ) Ġ{ Ġnew Estimator () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġprecision Ġ: ĠArray < Estimator > Ġ= ĠArray ( num Classes ) Ġ{ Ġnew Estimator () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrecall Ġ: ĠArray < Estimator > Ġ= ĠArray ( num Classes ) Ġ{ Ġnew Estimator () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġweight Correct Ġ: ĠEst imator Ġ= Ġnew Estimator () ĊĠĠĠĠĠĠĠ Ġval Ġweight Correct No Change Classifier Ġ: ĠEst imator Ġ= Ġnew Estimator () ĊĠĠĠĠĠĠĠ Ġval Ġweight M aj ority Classifier Ġ: ĠEst imator Ġ= Ġnew Estimator () ĊĠĠĠĠĠĠĠ Ġvar Ġlast Seen Class Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Weight Ob served Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġmajority Class : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( 0 Ġuntil Ġnum Classes ). max By OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn K appa [ it ]. value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfraction Correct ly Class ified : ĠDouble ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġweight Correct . value ĊĊĠĠĠĠĠĠĠ Ġval Ġk appa Statistic : ĠDouble ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( total Weight Ob served Ġ== Ġ 0 . 0 ) Ġreturn Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpc Ġ= Ġ( 0 Ġuntil Ġnum Classes ). fold ( 0 . 0 ) Ġ{ Ġacc , Ġcategory Index Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc Ġ+ Ġrow K appa [ category Index ]. value Ġ* Ġcolumn K appa [ category Index ]. value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( fraction Correct ly Class ified Ġ- Ġpc ) Ġ/ Ġ( 1 . 0 Ġ- Ġpc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġk appa Temporal Statistic : ĠDouble ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( total Weight Ob served Ġ== Ġ 0 . 0 ) Ġreturn Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpc Ġ= Ġweight Correct No Change Classifier . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( fraction Correct ly Class ified Ġ- Ġpc ) Ġ/ Ġ( 1 . 0 Ġ- Ġpc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġk appa M Statistic : ĠDouble ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( total Weight Ob served Ġ== Ġ 0 . 0 ) Ġreturn Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpc Ġ= Ġweight M aj ority Classifier . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( fraction Correct ly Class ified Ġ- Ġpc ) Ġ/ Ġ( 1 . 0 Ġ- Ġpc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġprecision Statistic : ĠDouble ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġprecision . fold ( 0 . 0 ) Ġ{ Ġacc , Ġck Ġ-> Ġacc Ġ+ Ġck . value Ġ} Ġ/ Ġprecision . size ĊĊĠĠĠĠĠĠĠ Ġfun Ġprecision Statistic ( num Class : ĠInt ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġprecision [ num Class ]. value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrecall Statistic : ĠDouble ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġrecall . fold ( 0 . 0 ) Ġ{ Ġacc , Ġck Ġ-> Ġacc Ġ+ Ġck . value Ġ} Ġ/ Ġrecall . size ĊĊĠĠĠĠĠĠĠ Ġfun Ġrecall Statistic ( num Class : ĠInt ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrecall [ num Class ]. value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcalc F 1 ( precision : ĠDouble , Ġrecall : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 2 Ġ* Ġ( precision Ġ* Ġrecall ) Ġ/ Ġ( precision Ġ+ Ġrecall ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġf 1 Statistic : ĠDouble ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġcalc F 1 ( precision Statistic , Ġrecall Statistic ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġf 1 Statistic ( num Class : ĠInt ) Ġ= Ġcalc F 1 ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprecision Statistic ( num Class ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecall Statistic ( num Class ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġle arner Stats : ĠArray < Stats ?> ĊĊĠĠĠ Ġoverride Ġval Ġname Ġ: ĠString Ġ= Ġ" Classification ĠPerformance " ĊĊĠĠĠ Ġfinal Ġoverride Ġval Ġtype Ġ: ĠLear ner Type Ġ= Ġintersection Of ( Single Target , ĠClass ifier ) ĊĊĠĠĠ Ġoverride Ġval Ġmetric Ġ: ĠMetric < Double > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMetric . Group ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinkedHashMap < String , ĠMetric < Double >> (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" Class ified ĠInstances "] Ġ= Ġper Le arner Metric Ġ{ Ġtotal Weight Ob served Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" Class ifications ĠCorrect Ġ( percent ) "] Ġ= Ġper Le arner Metric Ġ{ Ġfraction Correct ly Class ified Ġ* Ġ 1 0 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" K appa ĠStat istic Ġ( percent ) "] Ġ= Ġper Le arner Metric Ġ{ Ġk appa Statistic Ġ* Ġ 1 0 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" K appa ĠTemp oral ĠStat istic Ġ( percent ) "] Ġ= Ġper Le arner Metric Ġ{ Ġk appa Temporal Statistic Ġ* Ġ 1 0 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" K appa ĠM ĠStat istic Ġ( percent ) "] Ġ= Ġper Le arner Metric Ġ{ Ġk appa M Statistic Ġ* Ġ 1 0 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( precision Re call ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" F 1 ĠScore Ġ( percent ) "] Ġ= Ġper Le arner Metric Ġ{ Ġf 1 Statistic Ġ* Ġ 1 0 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f 1 Per Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" F 1 ĠScore ĠPer ĠClass Ġ( percent ) "] Ġ= Ġper Le arner Group Metric Ġ{ Ġf 1 Statistic ( it ) Ġ* Ġ 1 0 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( precision Re call ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" Precision Ġ( percent ) "] Ġ= Ġper Le arner Metric Ġ{ Ġprecision Statistic Ġ* Ġ 1 0 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( precision Per Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" Precision ĠPer ĠClass Ġ( percent ) "] Ġ= Ġper Le arner Group Metric Ġ{ Ġprecision Statistic ( it ) Ġ* Ġ 1 0 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( precision Re call ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" Re call Ġ( percent ) "] Ġ= Ġper Le arner Metric Ġ{ Ġrecall Statistic Ġ* Ġ 1 0 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recall Per Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" Re call ĠPer ĠClass Ġ( percent ) "] Ġ= Ġper Le arner Group Metric Ġ{ Ġrecall Statistic ( it ) Ġ* Ġ 1 0 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġper Le arner Metric ( block : ĠStats . () Ġ-> ĠDouble ): ĠMetric < Double > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( lear ner Stats . size Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMetric . Per Le arner (* lear ner Stats . map Ġ{ Ġit !!. block () Ġ}. to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMetric . Aggregate ( lear ner Stats [ 0 ] !!. block ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġper Le arner Group Metric ( block : ĠStats .( Int ) Ġ-> ĠDouble ): ĠMetric < Double > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( lear ner Stats . size Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMetric . Per Le arner Group ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* lear ner Stats . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinkedHashMap < String , ĠDouble >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdataType Ġ= Ġit !!. predict Repr . dataType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin ĠdataType . category Indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" Class Ġ${ dataType [ index ]} "] Ġ= Ġit . block ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMetric . Group ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinkedHashMap < String , ĠMetric < Double >> (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Ġ= Ġle arner Stats [ 0 ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdataType Ġ= Ġstats . predict Repr . dataType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin ĠdataType . category Indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [" Class Ġ${ dataType [ index ]} "] Ġ= ĠMetric . Aggregate ( stats . block ( index )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpre Evaluate ( var arg Ġlearn ers Ġ: ĠLear ner < DataStream <* >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġle arner Stats Ġ= ĠArray ( learn ers . size ) Ġ{ Ġnull Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost Evaluate ( var arg Ġlearn ers Ġ: ĠLear ner < DataStream <* >>) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpre Initial ise ( ĊĠĠĠĠĠĠĠ Ġle arner Ġ: ĠLear ner < DataStream <* >>, ĊĠĠĠĠĠĠĠ Ġle arner Index Ġ: ĠInt , ĊĠĠĠĠĠĠĠ Ġheaders Ġ: ĠWith Columns ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost Initial ise ( ĊĠĠĠĠĠĠĠ Ġle arner Ġ: ĠLear ner < DataStream <* >>, ĊĠĠĠĠĠĠĠ Ġle arner Index Ġ: ĠInt , ĊĠĠĠĠĠĠĠ Ġheaders Ġ: ĠWith Columns ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġle arner Stats [ lear ner Index ] Ġ= ĠStats ( lear ner ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpre Train ( ĊĠĠĠĠĠĠĠ Ġle arner Ġ: ĠLear ner < DataStream <* >>, ĊĠĠĠĠĠĠĠ Ġle arner Index Ġ: ĠInt , ĊĠĠĠĠĠĠĠ Ġdataset Ġ: ĠData Stream < *> ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost Train ( ĊĠĠĠĠĠĠĠ Ġle arner Ġ: ĠLear ner < DataStream <* >>, ĊĠĠĠĠĠĠĠ Ġle arner Index Ġ: ĠInt , ĊĠĠĠĠĠĠĠ Ġdataset Ġ: ĠData Stream < *> ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpre Predict ( ĊĠĠĠĠĠĠĠ Ġle arner Ġ: ĠLear ner < DataStream <* >>, ĊĠĠĠĠĠĠĠ Ġle arner Index Ġ: ĠInt , ĊĠĠĠĠĠĠĠ Ġrow Ġ: ĠData Row ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost Predict ( ĊĠĠĠĠĠĠĠ Ġle arner Ġ: ĠLear ner < DataStream <* >>, ĊĠĠĠĠĠĠĠ Ġle arner Index Ġ: ĠInt , ĊĠĠĠĠĠĠĠ Ġrow Ġ: ĠData Row , ĊĠĠĠĠĠĠĠ Ġprediction Ġ: ĠData Row ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweight Ġ= Ġrow . weight ĊĊĠĠĠĠĠĠĠ Ġif Ġ( weight Ġ== Ġ 0 . 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġstats Ġ= Ġle arner Stats [ lear ner Index ] !! ĊĊĠĠĠĠĠĠĠ Ġval Ġtrue Class Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow . getValue ( stats . train Repr ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠMissing Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpredicted Class Ġ= Ġprediction . getValue ( stats . predict Repr ) ĊĊĠĠĠĠĠĠĠ Ġstats . total Weight Ob served Ġ+= Ġweight ĊĠĠĠĠĠĠĠ Ġstats . weight Correct . add ( if Ġ( predicted Class Ġ== Ġtrue Class ) Ġweight Ġelse Ġ 0 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( category Index Ġin Ġ 0 Ġuntil Ġstats . num Classes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstats . row K appa [ category Index ]. add ( if Ġ( predicted Class Ġ== Ġcategory Index ) Ġweight Ġelse Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstats . column K appa [ category Index ]. add ( if Ġ( true Class Ġ== Ġcategory Index ) Ġweight Ġelse Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstats . precision [ category Index ]. add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( predicted Class Ġ!= Ġcategory Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble . NaN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( predicted Class Ġ== Ġtrue Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstats . recall [ category Index ]. add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( true Class Ġ!= Ġcategory Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble . NaN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( predicted Class Ġ== Ġtrue Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstats . weight Correct No Change Classifier . add ( if Ġ( stats . last Seen Class Ġ== Ġtrue Class ) Ġweight Ġelse Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġstats . weight M aj ority Classifier . add ( if Ġ( stats . maj ority Class Ġ== Ġtrue Class ) Ġweight Ġelse Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġstats . last Seen Class Ġ= Ġtrue Class ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġper Row Callback ( ĊĠĠĠĠĠĠĠ Ġle arner Ġ: ĠLear ner < DataStream <* >>, ĊĠĠĠĠĠĠĠ Ġle arner Index Ġ: ĠInt , ĊĠĠĠĠĠĠĠ Ġdataset Ġ: ĠData Stream < *> ĊĠĠĠ Ġ) Ġ: ĠEvaluation Harness Callback ? Ġ= Ġnull ĊĊ Ċ } Ċ