public virtual void InitMC <F>(IProbabilisticClassifier <L, F> classifier, GeneralDataset <L, F> data)
        {
            //if (!(gData instanceof Dataset)) {
            //  throw new UnsupportedOperationException("Can only handle Datasets, not "+gData.getClass().getName());
            //}
            //
            //Dataset data = (Dataset)gData;
            IPriorityQueue <Pair <int, Pair <double, bool> > > q = new BinaryHeapPriorityQueue <Pair <int, Pair <double, bool> > >();

            total         = 0;
            correct       = 0;
            logLikelihood = 0.0;
            for (int i = 0; i < data.Size(); i++)
            {
                IDatum <L, F> d            = data.GetRVFDatum(i);
                ICounter <L>  scores       = classifier.LogProbabilityOf(d);
                L             guess        = Counters.Argmax(scores);
                L             correctLab   = d.Label();
                double        guessScore   = scores.GetCount(guess);
                double        correctScore = scores.GetCount(correctLab);
                int           guessInd     = data.LabelIndex().IndexOf(guess);
                int           correctInd   = data.LabelIndex().IndexOf(correctLab);
                total++;
                if (guessInd == correctInd)
                {
                    correct++;
                }
                logLikelihood += correctScore;
                q.Add(new Pair <int, Pair <double, bool> >(int.Parse(i), new Pair <double, bool>(guessScore, bool.ValueOf(guessInd == correctInd))), -guessScore);
            }
            accuracy = (double)correct / (double)total;
            IList <Pair <int, Pair <double, bool> > > sorted = q.ToSortedList();

            scores    = new double[sorted.Count];
            isCorrect = new bool[sorted.Count];
            for (int i_1 = 0; i_1 < sorted.Count; i_1++)
            {
                Pair <double, bool> next = sorted[i_1].Second();
                scores[i_1]    = next.First();
                isCorrect[i_1] = next.Second();
            }
        }
        public virtual double Score <F>(IProbabilisticClassifier <L, F> classifier, GeneralDataset <L, F> data)
        {
            List <Pair <double, int> > dataScores = new List <Pair <double, int> >();

            for (int i = 0; i < data.Size(); i++)
            {
                IDatum <L, F> d      = data.GetRVFDatum(i);
                ICounter <L>  scores = classifier.LogProbabilityOf(d);
                int           labelD = d.Label().Equals(posLabel) ? 1 : 0;
                dataScores.Add(new Pair <double, int>(Math.Exp(scores.GetCount(posLabel)), labelD));
            }
            PRCurve prc = new PRCurve(dataScores);

            confWeightedAccuracy    = prc.Cwa();
            accuracy                = prc.Accuracy();
            optAccuracy             = prc.OptimalAccuracy();
            optConfWeightedAccuracy = prc.OptimalCwa();
            logLikelihood           = prc.LogLikelihood();
            accrecall               = prc.CwaArray();
            optaccrecall            = prc.OptimalCwaArray();
            return(accuracy);
        }
 public virtual double Score <F>(IProbabilisticClassifier <L, F> classifier, GeneralDataset <L, F> data)
 {
     InitMC(classifier, data);
     return(Score());
 }
 public MultiClassAccuracyStats(IProbabilisticClassifier <L, F> classifier, GeneralDataset <L, F> data, string file, int scoreType)
 {
     saveFile       = file;
     this.scoreType = scoreType;
     InitMC(classifier, data);
 }
 public MultiClassAccuracyStats(IProbabilisticClassifier <L, F> classifier, GeneralDataset <L, F> data, string file)
     : this(classifier, data, file, UseAccuracy)
 {
 }
 public AccuracyStats(IProbabilisticClassifier <L, F> classifier, GeneralDataset <L, F> data, L posLabel)
 {
     // = null;
     this.posLabel = posLabel;
     Score(classifier, data);
 }
 public virtual double Score <F>(IProbabilisticClassifier <L, F> classifier, GeneralDataset <L, F> data)
 {
     return(Score((IClassifier <L, F>)classifier, data));
 }