diff options
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.java | 32 |
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 +} |