Example #1
0
        public static FinalFuncResult GetResult(IEnumerable <RocItem> rows, double prct)
        {
            var scoreList = rows as RocItem[] ?? rows.ToArray();
            int listLen   = scoreList.Count();
            int nup       = (int)(listLen * prct) + 1; // outflow set length

            int    idx    = 0;
            int    tp     = 0;
            int    closed = 0;
            double loss   = 0;
            double eps    = 0.001;

            foreach (var item in scoreList)
            {
                idx++;
                item.Predicted = idx <= nup ? 1 : 0;
                if (item.Predicted > 0 && item.Target > 0)
                {
                    tp++;
                }
                if (item.Target > 0)
                {
                    closed++;
                }

                double ypred = Math.Min(Math.Max(item.Prob, eps), 1 - eps);
                double yi    = item.Target;
                double lpart = yi * Math.Log(ypred) + (1 - yi) * Math.Log(1 - ypred);
                loss += lpart;
            }

            var    points    = new List <RocPoint>();
            double auc       = GetRocArea(scoreList, points, listLen);
            double recall    = tp / (double)closed;
            double precision = tp >= nup ? 1 : (tp / (double)nup);
            double logLoss   = -loss / listLen;
            double fmeasure  = 2 * precision * recall / (precision + recall);

            var result = new FinalFuncResult();

            result.AUC           = auc;
            result.Recall        = recall;
            result.Precision     = precision;
            result.LogLoss       = logLoss;
            result.FMeasure      = fmeasure;
            result.RocPoints     = points;
            result.OutflowLength = nup;

            return(result);
        }
Example #2
0
        public void AddStepResult(FinalFuncResult res, int n)
        {
            if (!ResDict.ContainsKey(n))
            {
                ResDict.Add(n, res);
            }

            if (_best < res.AUC)
            {
                BestResult = res;
                _best      = res.AUC;
            }

            LastResult = res;
        }
Example #3
0
        public static FinalFuncResult GetResult(IEnumerable<RocItem> rows, double prct)
        {
            int listLen = rows.Count();
            int nup = (int)(listLen * prct) + 1; // outflow set length

            int idx = 0;
            int tp = 0;
            int closed = 0;
            double loss = 0;
            double eps = 0.001;
            foreach (var item in rows)
            {
                idx++;
                //item.Predicted = idx <= nup ? 1 : 0;
                if (item.Predicted > 0 && item.Target > 0) tp++;
                if (item.Target > 0) closed++;

                double ypred = Math.Min(Math.Max(item.Prob, eps), 1 - eps);
                double yi = item.Target;
                double lpart = yi * Math.Log(ypred) + (1 - yi) * Math.Log(1 - ypred);
                loss += lpart;
            }

            var points = new List<RocPoint>();
            double auc = GetRocArea(rows, points, listLen);
            double recall = tp / (double)closed;
            double precision = tp >= nup ? 1 : (tp / (double)nup);
            double logLoss = -loss / listLen;
            double fmeasure = 2*precision*recall/(precision + recall);

            var result = new FinalFuncResult();
            result.AUC = auc;
            result.Recall = recall;
            result.Precision = precision;
            result.LogLoss = logLoss;
            result.FMeasure = fmeasure;
            result.RocPoints = points;
            result.OutflowLength = nup;

            return result;
        }