summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/KNNQueryFilteredPCAIndex.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/KNNQueryFilteredPCAIndex.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/KNNQueryFilteredPCAIndex.java32
1 files changed, 21 insertions, 11 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/KNNQueryFilteredPCAIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/KNNQueryFilteredPCAIndex.java
index 00ce11b8..e6320833 100644
--- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/KNNQueryFilteredPCAIndex.java
+++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/KNNQueryFilteredPCAIndex.java
@@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.index.preprocessed.localpca;
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
- Copyright (C) 2012
+ Copyright (C) 2013
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
@@ -26,10 +26,11 @@ package de.lmu.ifi.dbs.elki.index.preprocessed.localpca;
import de.lmu.ifi.dbs.elki.data.NumberVector;
import de.lmu.ifi.dbs.elki.database.QueryUtil;
import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
+import de.lmu.ifi.dbs.elki.database.ids.distance.KNNList;
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.database.relation.RelationUtil;
import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction;
-import de.lmu.ifi.dbs.elki.distance.distanceresultlist.KNNResult;
import de.lmu.ifi.dbs.elki.distance.distancevalue.DoubleDistance;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.math.linearalgebra.pca.PCAFilteredRunner;
@@ -74,19 +75,24 @@ public class KNNQueryFilteredPCAIndex<NV extends NumberVector<?>> extends Abstra
/**
* Constructor.
*
- * @param database Database to use
+ * @param relation Database to use
* @param pca PCA Runner to use
* @param knnQuery KNN Query to use
* @param k k value
*/
- public KNNQueryFilteredPCAIndex(Relation<NV> database, PCAFilteredRunner<NV> pca, KNNQuery<NV, DoubleDistance> knnQuery, int k) {
- super(database, pca);
+ public KNNQueryFilteredPCAIndex(Relation<NV> relation, PCAFilteredRunner<NV> pca, KNNQuery<NV, DoubleDistance> knnQuery, int k) {
+ super(relation, pca);
this.knnQuery = knnQuery;
this.k = k;
+ // Sanity check:
+ int dim = RelationUtil.dimensionality(relation);
+ if (dim > 0 && k <= dim) {
+ LOG.warning("PCA results with k < dim are meaningless. Choose k much larger than the dimensionality.");
+ }
}
@Override
- protected KNNResult<DoubleDistance> objectsForPCA(DBIDRef id) {
+ protected KNNList<DoubleDistance> objectsForPCA(DBIDRef id) {
return knnQuery.getKNNForDBID(id, k);
}
@@ -105,6 +111,11 @@ public class KNNQueryFilteredPCAIndex<NV extends NumberVector<?>> extends Abstra
return LOG;
}
+ @Override
+ public void logStatistics() {
+ // No statistics to log.
+ }
+
/**
* Factory class.
*
@@ -150,7 +161,7 @@ public class KNNQueryFilteredPCAIndex<NV extends NumberVector<?>> extends Abstra
public KNNQueryFilteredPCAIndex<V> instantiate(Relation<V> relation) {
// TODO: set bulk flag, once the parent class supports bulk.
KNNQuery<V, DoubleDistance> knnquery = QueryUtil.getKNNQuery(relation, pcaDistanceFunction, k);
- return new KNNQueryFilteredPCAIndex<V>(relation, pca, knnquery, k);
+ return new KNNQueryFilteredPCAIndex<>(relation, pca, knnquery, k);
}
/**
@@ -168,16 +179,15 @@ public class KNNQueryFilteredPCAIndex<NV extends NumberVector<?>> extends Abstra
super.makeOptions(config);
final IntParameter kP = new IntParameter(K_ID);
kP.addConstraint(new GreaterConstraint(0));
- kP.setOptional(true);
- if(config.grab(kP)) {
+ if (config.grab(kP)) {
k = kP.getValue();
}
}
@Override
protected Factory<NV> makeInstance() {
- return new Factory<NV>(pcaDistanceFunction, pca, k);
+ return new Factory<>(pcaDistanceFunction, pca, k);
}
}
}
-} \ No newline at end of file
+}