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 | 66 |
1 files changed, 34 insertions, 32 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 89c10bf2..49197bda 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) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -26,12 +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.ids.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.distancevalue.DoubleDistance; import de.lmu.ifi.dbs.elki.logging.Logging; import de.lmu.ifi.dbs.elki.math.linearalgebra.pca.PCAFilteredRunner; import de.lmu.ifi.dbs.elki.utilities.documentation.Description; @@ -53,10 +52,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter; * * @param <NV> Vector type */ -// TODO: loosen DoubleDistance restriction. @Title("Knn Query Based Local PCA Preprocessor") @Description("Materializes the local PCA and the locally weighted matrix of objects of a database. The PCA is based on k nearest neighbor queries.") -public class KNNQueryFilteredPCAIndex<NV extends NumberVector<?>> extends AbstractFilteredPCAIndex<NV> { +public class KNNQueryFilteredPCAIndex<NV extends NumberVector> extends AbstractFilteredPCAIndex<NV> { /** * Logger. */ @@ -65,10 +63,10 @@ public class KNNQueryFilteredPCAIndex<NV extends NumberVector<?>> extends Abstra /** * The kNN query instance we use. */ - private final KNNQuery<NV, DoubleDistance> knnQuery; + private final KNNQuery<NV> knnQuery; /** - * Query k. + * Number of neighbors to query. */ private final int k; @@ -80,7 +78,7 @@ public class KNNQueryFilteredPCAIndex<NV extends NumberVector<?>> extends Abstra * @param knnQuery KNN Query to use * @param k k value */ - public KNNQueryFilteredPCAIndex(Relation<NV> relation, PCAFilteredRunner<NV> pca, KNNQuery<NV, DoubleDistance> knnQuery, int k) { + public KNNQueryFilteredPCAIndex(Relation<NV> relation, PCAFilteredRunner pca, KNNQuery<NV> knnQuery, int k) { super(relation, pca); this.knnQuery = knnQuery; this.k = k; @@ -92,7 +90,7 @@ public class KNNQueryFilteredPCAIndex<NV extends NumberVector<?>> extends Abstra } @Override - protected KNNList<DoubleDistance> objectsForPCA(DBIDRef id) { + protected KNNList objectsForPCA(DBIDRef id) { return knnQuery.getKNNForDBID(id, k); } @@ -125,25 +123,11 @@ public class KNNQueryFilteredPCAIndex<NV extends NumberVector<?>> extends Abstra * @apiviz.landmark * @apiviz.uses KNNQueryFilteredPCAIndex oneway - - «create» */ - public static class Factory<V extends NumberVector<?>> extends AbstractFilteredPCAIndex.Factory<V, KNNQueryFilteredPCAIndex<V>> { + public static class Factory<V extends NumberVector> extends AbstractFilteredPCAIndex.Factory<V, KNNQueryFilteredPCAIndex<V>> { /** - * Optional parameter to specify the number of nearest neighbors considered - * in the PCA, must be an integer greater than 0. If this parameter is not - * set, k is set to three times of the dimensionality of the database - * objects. - * <p> - * Key: {@code -localpca.k} - * </p> - * <p> - * Default value: three times of the dimensionality of the database objects - * </p> + * Number of neighbors to query. */ - public static final OptionID K_ID = new OptionID("localpca.k", "The number of nearest neighbors considered in the PCA. " + "If this parameter is not set, k ist set to three " + "times of the dimensionality of the database objects."); - - /** - * Holds the value of {@link #K_ID}. - */ - private Integer k = null; + private int k; /** * Constructor. @@ -152,7 +136,7 @@ public class KNNQueryFilteredPCAIndex<NV extends NumberVector<?>> extends Abstra * @param pca PCA class * @param k k */ - public Factory(DistanceFunction<V, DoubleDistance> pcaDistanceFunction, PCAFilteredRunner<V> pca, Integer k) { + public Factory(DistanceFunction<V> pcaDistanceFunction, PCAFilteredRunner pca, int k) { super(pcaDistanceFunction, pca); this.k = k; } @@ -160,7 +144,7 @@ public class KNNQueryFilteredPCAIndex<NV extends NumberVector<?>> extends Abstra @Override 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); + KNNQuery<V> knnquery = QueryUtil.getKNNQuery(relation, pcaDistanceFunction, k); return new KNNQueryFilteredPCAIndex<>(relation, pca, knnquery, k); } @@ -171,16 +155,34 @@ public class KNNQueryFilteredPCAIndex<NV extends NumberVector<?>> extends Abstra * * @apiviz.exclude */ - public static class Parameterizer<NV extends NumberVector<?>> extends AbstractFilteredPCAIndex.Factory.Parameterizer<NV, KNNQueryFilteredPCAIndex<NV>> { + public static class Parameterizer<NV extends NumberVector> extends AbstractFilteredPCAIndex.Factory.Parameterizer<NV, KNNQueryFilteredPCAIndex<NV>> { + /** + * Optional parameter to specify the number of nearest neighbors + * considered in the PCA, must be an integer greater than 0. If this + * parameter is not set, k is set to three times of the dimensionality of + * the database objects. + * <p> + * Key: {@code -localpca.k} + * </p> + * <p> + * Default value: three times of the dimensionality of the database + * objects + * </p> + */ + public static final OptionID K_ID = new OptionID("localpca.k", "The number of nearest neighbors considered in the PCA. " + "If this parameter is not set, k ist set to three " + "times of the dimensionality of the database objects."); + + /** + * Number of neighbors to query. + */ protected int k = 0; @Override protected void makeOptions(Parameterization config) { super.makeOptions(config); - final IntParameter kP = new IntParameter(K_ID); - kP.addConstraint(CommonConstraints.GREATER_EQUAL_ONE_INT); + final IntParameter kP = new IntParameter(K_ID) // + .addConstraint(CommonConstraints.GREATER_THAN_ONE_INT); if(config.grab(kP)) { - k = kP.getValue(); + k = kP.intValue(); } } |