summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRankingQuality.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRankingQuality.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRankingQuality.java34
1 files changed, 15 insertions, 19 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRankingQuality.java b/src/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRankingQuality.java
index d5d8e407..7987804a 100644
--- a/src/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRankingQuality.java
+++ b/src/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRankingQuality.java
@@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.algorithm.statistics;
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
- Copyright (C) 2013
+ Copyright (C) 2014
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
@@ -41,13 +41,12 @@ import de.lmu.ifi.dbs.elki.database.Database;
import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDPair;
-import de.lmu.ifi.dbs.elki.database.ids.distance.KNNList;
+import de.lmu.ifi.dbs.elki.database.ids.KNNList;
import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
import de.lmu.ifi.dbs.elki.database.query.knn.KNNQuery;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction;
-import de.lmu.ifi.dbs.elki.distance.distancevalue.NumberDistance;
-import de.lmu.ifi.dbs.elki.evaluation.roc.ROC;
+import de.lmu.ifi.dbs.elki.evaluation.scores.ROCEvaluation;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.progress.FiniteProgress;
import de.lmu.ifi.dbs.elki.math.MathUtil;
@@ -84,11 +83,10 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
*
* @author Erich Schubert
* @param <V> Vector type
- * @param <D> Distance type
*/
@Title("Evaluate Ranking Quality")
@Description("Evaluates the effectiveness of a distance function via the obtained rankings.")
-public class EvaluateRankingQuality<V extends NumberVector<?>, D extends NumberDistance<D, ?>> extends AbstractDistanceBasedAlgorithm<V, D, CollectionResult<DoubleVector>> {
+public class EvaluateRankingQuality<V extends NumberVector> extends AbstractDistanceBasedAlgorithm<V, CollectionResult<DoubleVector>> {
/**
* The logger for this class.
*/
@@ -105,7 +103,7 @@ public class EvaluateRankingQuality<V extends NumberVector<?>, D extends NumberD
* @param distanceFunction Distance function
* @param numbins Number of bins
*/
- public EvaluateRankingQuality(DistanceFunction<? super V, D> distanceFunction, int numbins) {
+ public EvaluateRankingQuality(DistanceFunction<? super V> distanceFunction, int numbins) {
super(distanceFunction);
this.numbins = numbins;
}
@@ -118,8 +116,8 @@ public class EvaluateRankingQuality<V extends NumberVector<?>, D extends NumberD
@Override
public HistogramResult<DoubleVector> run(Database database) {
final Relation<V> relation = database.getRelation(getInputTypeRestriction()[0]);
- final DistanceQuery<V, D> distQuery = database.getDistanceQuery(relation, getDistanceFunction());
- final KNNQuery<V, D> knnQuery = database.getKNNQuery(distQuery, relation.size());
+ final DistanceQuery<V> distQuery = database.getDistanceQuery(relation, getDistanceFunction());
+ final KNNQuery<V> knnQuery = database.getKNNQuery(distQuery, relation.size());
if(LOG.isVerbose()) {
LOG.verbose("Preprocessing clusters...");
@@ -156,19 +154,15 @@ public class EvaluateRankingQuality<V extends NumberVector<?>, D extends NumberD
Collections.sort(cmem);
for(int ind = 0; ind < cmem.size(); ind++) {
- KNNList<D> knn = knnQuery.getKNNForDBID(cmem.get(ind), relation.size());
- double result = ROC.computeROCAUCDistanceResult(relation.size(), clus, knn);
+ KNNList knn = knnQuery.getKNNForDBID(cmem.get(ind), relation.size());
+ double result = new ROCEvaluation().evaluate(clus, knn);
hist.put(((double) ind) / clus.size(), result);
- if(rocloop != null) {
- rocloop.incrementProcessed(LOG);
- }
+ LOG.incrementProcessed(rocloop);
}
}
- if(rocloop != null) {
- rocloop.ensureCompleted(LOG);
- }
+ LOG.ensureCompleted(rocloop);
// Collections.sort(results);
// Transform Histogram into a Double Vector array.
@@ -196,8 +190,10 @@ public class EvaluateRankingQuality<V extends NumberVector<?>, D extends NumberD
* @author Erich Schubert
*
* @apiviz.exclude
+ *
+ * @param <V> Vector type
*/
- public static class Parameterizer<V extends NumberVector<?>, D extends NumberDistance<D, ?>> extends AbstractDistanceBasedAlgorithm.Parameterizer<V, D> {
+ public static class Parameterizer<V extends NumberVector> extends AbstractDistanceBasedAlgorithm.Parameterizer<V> {
/**
* Number of bins to use.
*/
@@ -214,7 +210,7 @@ public class EvaluateRankingQuality<V extends NumberVector<?>, D extends NumberD
}
@Override
- protected EvaluateRankingQuality<V, D> makeInstance() {
+ protected EvaluateRankingQuality<V> makeInstance() {
return new EvaluateRankingQuality<>(distanceFunction, numbins);
}
}