Exemplo n.º 1
0
        private SummaryData ExtractSummaryData(ICSM11DataSet ds, string modelName, DataSetPairsType type)
        {
            DataSetPairs model = null;

            foreach (DataSetPairs dsp in ds.Metrics)
            {
                if (dsp.Name.Split(new char[] { '.' })[0].Equals(modelName))
                {
                    model = dsp;
                }
            }
            if (model == null)
            {
                throw new ArgumentException("Model \"" + modelName + "\" not found.");
            }
            switch (type)
            {
            case DataSetPairsType.Precision:
                return(CreateSummaryData(model.PrecisionData, modelName));

            case DataSetPairsType.Recall:
                return(CreateSummaryData(model.RecallData, modelName));

            case DataSetPairsType.AveragePrecision:
                return(CreateSummaryData(model.AveragePrecisionData, modelName));

            case DataSetPairsType.MeanAveragePrecision:
                return(CreateSummaryData(model.MeanAveragePrecisionData, modelName));

            default:
                throw new ArgumentException("Unknown DataSetPairsType");
            }
        }
Exemplo n.º 2
0
        public static DataSetPairs Compute(TLSimilarityMatrix sims, TLSimilarityMatrix oracle, RecallLevel recall)
        {
            TLSimilarityMatrix matrix = Similarities.CreateMatrix(MetricsUtil.GetLinksAtRecall(sims, oracle, recall));

            matrix.Threshold = double.MinValue;
            DataSetPairs pairs = new DataSetPairs();

            foreach (string sourceArtifact in oracle.SourceArtifactsIds)
            {
                TLLinksList links = matrix.GetLinksAboveThresholdForSourceArtifact(sourceArtifact);
                links.Sort();
                int    totalCorrect      = oracle.GetLinksAboveThresholdForSourceArtifact(sourceArtifact).Count;
                int    numCorrect        = 0;
                int    totalRead         = 0;
                double totalAvgPrecision = 0.0;
                foreach (TLSingleLink link in links)
                {
                    totalRead++;
                    if (oracle.IsLinkAboveThreshold(link.SourceArtifactId, link.TargetArtifactId))
                    {
                        numCorrect++;
                        totalAvgPrecision += numCorrect / (double)totalRead;
                    }
                }
                pairs.PrecisionData.Add(new KeyValuePair <string, double>(sourceArtifact, numCorrect / Convert.ToDouble(links.Count)));
                pairs.RecallData.Add(new KeyValuePair <string, double>(sourceArtifact, Convert.ToDouble(numCorrect) / totalCorrect));
                pairs.AveragePrecisionData.Add(new KeyValuePair <string, double>(sourceArtifact, totalAvgPrecision / totalCorrect));
            }

            pairs.MeanAveragePrecisionData.Add(new KeyValuePair <string, double>("#TOTAL", DataSetPairsCollection.CalculateAverage(pairs.AveragePrecisionData)));
            return(pairs);
        }