From 00b7b11658547bb810cc43199c7af10d162cd091 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Proch=C3=A1zka?= <david@prochazka.dev> Date: Wed, 10 Feb 2021 15:40:15 +0100 Subject: [PATCH] ADD: ApproxKNN recall measurement --- src/mhtree/MHTree.java | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/mhtree/MHTree.java b/src/mhtree/MHTree.java index 7633d8c..a702328 100644 --- a/src/mhtree/MHTree.java +++ b/src/mhtree/MHTree.java @@ -5,15 +5,14 @@ import messif.buckets.BucketDispatcher; import messif.buckets.BucketErrorCode; import messif.buckets.BucketStorageException; import messif.buckets.LocalBucket; +import messif.objects.AbstractObject; import messif.objects.LocalAbstractObject; import messif.operations.data.InsertOperation; import messif.operations.query.ApproxKNNQueryOperation; +import messif.operations.query.KNNQueryOperation; import java.io.Serializable; -import java.util.IntSummaryStatistics; -import java.util.List; -import java.util.Map; -import java.util.PriorityQueue; +import java.util.*; public class MHTree extends Algorithm implements Serializable { @@ -121,6 +120,27 @@ public class MHTree extends Algorithm implements Serializable { System.out.println("Maximum number of objects: " + statistics.getMax()); } + public double measureRecall(ApproxKNNQueryOperation approxKNNOperation) { + if (approxKNNOperation.getAnswerCount() == 0) return 0d; + + KNNQueryOperation KNNOperation = new KNNQueryOperation(approxKNNOperation.getQueryObject(), approxKNNOperation.getK()); + KNN(KNNOperation); + + int trueKNNCount = 0; + + for (Iterator<AbstractObject> KNNIt = KNNOperation.getAnswerObjects(); KNNIt.hasNext(); ) + for (Iterator<AbstractObject> approxKNNIt = approxKNNOperation.getAnswerObjects(); approxKNNIt.hasNext(); ) + if (KNNIt.next().getLocatorURI().equals(approxKNNIt.next().getLocatorURI())) + trueKNNCount++; + + return trueKNNCount / (double) KNNOperation.getAnswerCount(); + } + + private void KNN(KNNQueryOperation operation) { + root.getObjects().forEach(operation::addToAnswer); + operation.endOperation(); + } + @Override public String toString() { return "MHTree{" + -- GitLab