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