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  }