Exemple #1
0
        public double GetScore(PerfMetric metric, LblT lbl)
        {
            switch (metric)
            {
            case PerfMetric.Precision:
                return(GetPrecision(lbl));

            case PerfMetric.Accuracy:
            case PerfMetric.Recall:
                return(GetRecall(lbl));

            case PerfMetric.F1:
                return(GetF1(lbl));

            case PerfMetric.MicroPrecision:
            case PerfMetric.MicroRecall:
            case PerfMetric.MicroF1:
            case PerfMetric.MicroAccuracy:
                return(GetMicroAverage());

            case PerfMetric.MacroPrecision:
                return(GetMacroPrecision());

            case PerfMetric.MacroAccuracy:
            case PerfMetric.MacroRecall:
                return(GetMacroRecall());

            case PerfMetric.MacroF1:
                return(GetMacroF1());

            default:
                throw new ArgumentValueException("metric");
            }
        }
Exemple #2
0
        public double GetAvg(string expName, string algoName, PerfMetric metric, LblT lbl, out double stdev) // TODO: test if stdev is correct
        {
            Utils.ThrowException(expName == null ? new ArgumentNullException("expName") : null);
            Utils.ThrowException(algoName == null ? new ArgumentNullException("algoName") : null);
            stdev = double.NaN;
            Dictionary <string, FoldData> algoData;

            if (mData.TryGetValue(expName, out algoData))
            {
                FoldData foldData;
                if (algoData.TryGetValue(algoName, out foldData))
                {
                    double sum = 0;
                    foreach (PerfMatrix <LblT> mtx in foldData)
                    {
                        if (mtx == null)
                        {
                            throw new InvalidOperationException();
                        }
                        sum += mtx.GetScore(metric, lbl);
                    }
                    double avg = sum / (double)foldData.Count;
                    sum = 0;
                    foreach (PerfMatrix <LblT> mtx in foldData)
                    {
                        double val = mtx.GetScore(metric, lbl) - avg;
                        sum += val * val;
                    }
                    stdev = Math.Sqrt(sum / (double)foldData.Count);
                    return(avg);
                }
            }
            return(double.NaN);
        }
Exemple #3
0
        public double GetAvgStdErr(string expName, string algoName, PerfMetric metric, out double stderr, double confidenceLevel = 0.95)
        {
            double zval = StatsUtils.GetZScore(confidenceLevel);
            double stddev;
            double avg = GetAvg(expName, algoName, metric, out stddev);

            stderr = zval * stddev / Math.Sqrt(GetFoldCount(expName, algoName));
            return(avg);
        }
Exemple #4
0
        public string ToString(string expName, PerfMetric metric, LblT lbl, string fmt) // set expName to null to get stats for all experiments
        {
            Utils.ThrowException(fmt == null ? new ArgumentNullException("fmt") : null);
            ArrayList <string> expList = new ArrayList <string>(mData.Keys);

            expList.Sort();
            Set <string> tmp = new Set <string>();

            foreach (Dictionary <string, FoldData> item in mData.Values)
            {
                tmp.AddRange(item.Keys);
            }
            ArrayList <string> algoList = new ArrayList <string>(tmp);

            algoList.Sort();
            StringBuilder sb = new StringBuilder();

            // header
            if (expName == null)
            {
                foreach (string exp in expList)
                {
                    sb.Append("\t" + exp);
                }
                sb.AppendLine();
            }
            // rows
            foreach (string algoName in algoList)
            {
                sb.Append(algoName);
                if (expName == null)
                {
                    foreach (string exp in expList)
                    {
                        double stdev;
                        double val = GetAvg(exp, algoName, metric, lbl, out stdev); // throws InvalidOperationException
                        sb.Append("\t" + val.ToString(fmt));
                    }
                }
                else
                {
                    double stdev;
                    sb.Append("\t" + GetAvg(expName, algoName, metric, lbl, out stdev).ToString(fmt)); // throws InvalidOperationException
                }
                sb.AppendLine();
            }
            return(sb.ToString().TrimEnd());
        }
Exemple #5
0
        public double GetScore(PerfMetric metric)
        {
            switch (metric)
            {
            case PerfMetric.Accuracy:
                return(GetAccuracy());

            case PerfMetric.MicroPrecision:
                return(GetMicroPrecision());

            case PerfMetric.MicroRecall:
                return(GetMicroRecall());

            case PerfMetric.MicroF1:
                return(GetMicroF1());

            case PerfMetric.MacroPrecision:
                return(GetMacroPrecision());

            case PerfMetric.MacroRecall:
                return(GetMacroRecall());

            case PerfMetric.MacroF1:
                return(GetMacroF1());

            case PerfMetric.Error:
                return(GetError());

            case PerfMetric.Kappa:
                return(GetKappa());

            case PerfMetric.KAlphaNominal:
                return(GetKAlpha());

            case PerfMetric.AccStdErrorConf90:
                return(GetAccStdError(0.9));

            case PerfMetric.AccStdErrorConf95:
                return(GetAccStdError());

            case PerfMetric.AccStdErrorConf99:
                return(GetAccStdError(0.99));

            default:
                throw new ArgumentValueException("metric");
            }
        }
Exemple #6
0
        public string ToString(int foldNum, string expName, PerfMetric metric, LblT lbl, string fmt) // set expName to null to get stats for all experiments
        {
            Utils.ThrowException(foldNum < 1 ? new ArgumentOutOfRangeException("foldNum") : null);
            Utils.ThrowException(fmt == null ? new ArgumentNullException("fmt") : null);
            var expList = new ArrayList <string>(mData.Keys);

            expList.Sort();
            var tmp = new Set <string>();

            foreach (ConcurrentDictionary <string, FoldData> item in mData.Values)
            {
                tmp.AddRange(item.Keys);
            }
            var algoList = new ArrayList <string>(tmp);

            algoList.Sort();
            var sb = new StringBuilder();

            // header
            if (expName == null)
            {
                foreach (string exp in expList)
                {
                    sb.Append("\t" + exp);
                }
                sb.AppendLine();
            }
            // rows
            foreach (string algoName in algoList)
            {
                sb.Append(algoName);
                if (expName != null)
                {
                    double val = GetVal(foldNum, expName, algoName, metric);
                    sb.Append("\t" + val.ToString(fmt));
                }
                else
                {
                    foreach (string exp in expList)
                    {
                        sb.Append("\t" + GetVal(foldNum, exp, algoName, metric).ToString(fmt));
                    }
                }
                sb.AppendLine();
            }
            return(sb.ToString().TrimEnd());
        }
Exemple #7
0
        public double GetVal(int foldNum, string expName, string algoName, PerfMetric metric, LblT lbl)
        {
            Utils.ThrowException(foldNum < 1 ? new ArgumentOutOfRangeException("foldNum") : null);
            Utils.ThrowException(expName == null ? new ArgumentNullException("expName") : null);
            Utils.ThrowException(algoName == null ? new ArgumentNullException("algoName") : null);
            Dictionary <string, FoldData> algoData;

            if (mData.TryGetValue(expName, out algoData))
            {
                FoldData foldData;
                if (algoData.TryGetValue(algoName, out foldData))
                {
                    if (foldNum <= foldData.Count && foldData[foldNum - 1] != null)
                    {
                        return(foldData[foldNum - 1].GetScore(metric, lbl));
                    }
                }
            }
            return(double.NaN);
        }
        private void Start()
        {
            DevCommandManager.Instance.RegisterDevCommand(this);

            PerfMetric = FindObjectOfType <PerfMetric>();
        }
Exemple #9
0
 public static async Task SetPerfMetric(IConfiguration configuration, int reportId, PerfMetric perfMetric)
 {
     using (var connection = new SqlConnection(configuration.GetConnectionString("DefaultConnection")))
     {
         connection.Open();
         perfMetric.ReportId = reportId;
         string insertFCPSql = "INSERT INTO PerfMetric(reportId, score, numericValue, displayValue, title) VALUES (@ReportId, @Score, @NumericValue, @DisplayValue, @Title)";
         await connection.ExecuteAsync(insertFCPSql, perfMetric);
     }
 }
Exemple #10
0
 public string ToString(string expName, PerfMetric metric)
 {
     return(ToString(expName, metric, default(LblT))); // throws InvalidOperationException
 }
Exemple #11
0
 public string ToString(string expName, PerfMetric metric, LblT lbl)
 {
     return(ToString(expName, metric, lbl, "0.0000")); // throws InvalidOperationException
 }
Exemple #12
0
 public string ToString(int foldNum, string expName, PerfMetric metric)
 {
     return(ToString(foldNum, expName, metric, default(LblT))); // throws ArgumentOutOfRangeException
 }
Exemple #13
0
 public string ToString(int foldNum, string expName, PerfMetric metric, LblT lbl)
 {
     return(ToString(foldNum, expName, metric, lbl, "0.0000")); // throws ArgumentOutOfRangeException
 }
Exemple #14
0
        public double GetAvg(string expName, string algoName, PerfMetric metric, LblT lbl)
        {
            double stdev;

            return(GetAvg(expName, algoName, metric, lbl, out stdev)); // throws ArgumentNullException, InvalidOperationException
        }
Exemple #15
0
        public double GetAvg(string expName, string algoName, PerfMetric metric)
        {
            double stdev;

            return(GetAvg(expName, algoName, metric, out stdev));
        }
Exemple #16
0
 public double GetAvg(string expName, string algoName, PerfMetric metric, out double stdev)
 {
     return(GetAvg(expName, algoName, mtx => mtx.GetScore(metric), out stdev));
 }