in go/distinct_count_accuracy_profile.go [122:180]
func (d *DistinctCountAccuracyProfile) process(cumTrials int, sb *strings.Builder) {
points := len(d.stats)
for pt := 0; pt < points; pt++ {
q := d.stats[pt].(*accuracyStats)
trueUniques := q.trueValue
meanEst := q.sumEst / float64(cumTrials)
meanRelErr := q.sumRelErr / float64(cumTrials)
meanSqErr := q.sumSqRelErr / float64(cumTrials)
normMeanSqErr := meanSqErr / (float64(trueUniques) * float64(trueUniques))
rmsRelErr := math.Sqrt(normMeanSqErr)
relLb3 := q.sumLB3/float64(cumTrials)/float64(trueUniques) - 1.0
relLb2 := q.sumLB2/float64(cumTrials)/float64(trueUniques) - 1.0
relLb1 := q.sumLB1/float64(cumTrials)/float64(trueUniques) - 1.0
relUb1 := q.sumUB1/float64(cumTrials)/float64(trueUniques) - 1.0
relUb2 := q.sumUB2/float64(cumTrials)/float64(trueUniques) - 1.0
relUb3 := q.sumUB3/float64(cumTrials)/float64(trueUniques) - 1.0
sb.WriteString(fmt.Sprintf("%d", trueUniques))
sb.WriteString("\t")
sb.WriteString(fmt.Sprintf("%e", meanEst))
sb.WriteString("\t")
sb.WriteString(fmt.Sprintf("%e", meanRelErr))
sb.WriteString("\t")
sb.WriteString(fmt.Sprintf("%e", rmsRelErr))
sb.WriteString("\t")
sb.WriteString(fmt.Sprintf("%d", cumTrials))
sb.WriteString("\t")
// Quantiles
quants, _ := q.qsk.GetQuantiles(GAUSSIANS_3SD, true)
for i := 0; i < len(quants); i++ {
sb.WriteString(fmt.Sprintf("%e", quants[i]/float64(trueUniques)-1.0))
sb.WriteString("\t")
}
// Bound averages
sb.WriteString(fmt.Sprintf("%e", relLb3))
sb.WriteString("\t")
sb.WriteString(fmt.Sprintf("%e", relLb2))
sb.WriteString("\t")
sb.WriteString(fmt.Sprintf("%e", relLb1))
sb.WriteString("\t")
sb.WriteString(fmt.Sprintf("%e", relUb1))
sb.WriteString("\t")
sb.WriteString(fmt.Sprintf("%e", relUb2))
sb.WriteString("\t")
sb.WriteString(fmt.Sprintf("%e", relUb3))
sb.WriteString("\n")
}
}