Skip to content
Snippets Groups Projects
Verified Commit d2e933bd authored by David Procházka's avatar David Procházka
Browse files

ADD: recall measurement

parent 58661095
No related branches found
No related tags found
No related merge requests found
......@@ -11,7 +11,6 @@ import messif.operations.data.InsertOperation;
import messif.operations.query.ApproxKNNQueryOperation;
import messif.operations.query.KNNQueryOperation;
import messif.statistics.StatisticCounter;
import mhtree.benchmarking.Utils;
import java.io.Serializable;
import java.util.*;
......
package mhtree;
import messif.objects.util.DistanceRankedObject;
import messif.objects.util.RankedAbstractObject;
import messif.operations.query.ApproxKNNQueryOperation;
import messif.operations.query.KNNQueryOperation;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class Utils {
// comparing done based on distances, counts how many of the same distances of KNNQueryOperation were presents in the answer of ApproxKNNQueryOperation
public static double measureRecall(ApproxKNNQueryOperation approxKNNQueryOperation, KNNQueryOperation knnQueryOperation) {
if (approxKNNQueryOperation.getAnswerCount() == 0) return 0d;
if (knnQueryOperation.getAnswerCount() == 0) return -1d;
List<RankedAbstractObject> objects = new ArrayList<>(knnQueryOperation.getAnswerCount());
for (RankedAbstractObject object : knnQueryOperation)
objects.add(object);
Map<Float, Long> frequencyMap = objects.parallelStream()
.map(DistanceRankedObject::getDistance)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
long trueCount = 0;
for (RankedAbstractObject approxObject : approxKNNQueryOperation) {
float distance = approxObject.getDistance();
if (frequencyMap.containsKey(distance)) {
long count = frequencyMap.get(distance);
if (count == 1) {
frequencyMap.remove(distance);
} else {
frequencyMap.replace(distance, count - 1);
}
trueCount++;
}
}
return trueCount / (double) knnQueryOperation.getAnswerCount();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment