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); }
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; }
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; }