go-ml.dev/pkg/base@v0.0.0-20200610162856-60c38abac71b/model/evaluate.go (about) 1 package model 2 3 import ( 4 "go-ml.dev/pkg/base/fu" 5 "go-ml.dev/pkg/base/tables" 6 "go-ml.dev/pkg/zorros" 7 "reflect" 8 ) 9 10 /* 11 Evaluate metrics of the given source with the prediction model 12 */ 13 func Evaluate(source tables.AnyData, label string, m PredictionModel, batchsize int, metricsf Metrics) (lr fu.Struct, err error) { 14 mu := metricsf.New(0, TestSubset) 15 err = source.Lazy().Batch(batchsize).Transform(m.FeaturesMapper).Drain( 16 func(v reflect.Value) (e error) { 17 if v.Kind() == reflect.Bool { 18 if v.Bool() { 19 lr, _ = mu.Complete() 20 } 21 } else { 22 tr := v.Interface().(*tables.Table) 23 BatchUpdateMetrics(tr.Col(m.Predicted()), tr.Col(label), mu) 24 } 25 return 26 }) 27 return 28 } 29 30 /* 31 LuckyEvaluate is the same as Evaluate function with handling error as a panic 32 */ 33 func LuckyEvaluate(source tables.AnyData, label string, m PredictionModel, batchsize int, metricsf Metrics) fu.Struct { 34 lr, err := Evaluate(source, label, m, batchsize, metricsf) 35 if err != nil { 36 panic(zorros.Panic(err)) 37 } 38 return lr 39 }