package de.lmu.ifi.dbs.elki.algorithm.clustering.gdbscan; /* This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures Copyright (C) 2015 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ import de.lmu.ifi.dbs.elki.algorithm.clustering.correlation.FourC; import de.lmu.ifi.dbs.elki.algorithm.clustering.gdbscan.PreDeConNeighborPredicate.PreDeConModel; import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation; import de.lmu.ifi.dbs.elki.database.Database; import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; /** * The PreDeCon core point predicate -- having at least minpts. neighbors, and a * maximum preference dimensionality of lambda. * *

* Reference: *

* C. Böhm, K. Kailing, P. Kröger, A. Zimek:
* Computing Clusters of Correlation Connected Objects.
* In Proc. ACM SIGMOD Int. Conf. on Management of Data, Paris, France, 2004. *

* * @author Erich Schubert * @since 0.5.0 * * @apiviz.has Instance */ @Reference(authors = "C. Böhm, K. Kailing, P. Kröger, A. Zimek", // title = "Computing Clusters of Correlation Connected Objects", // booktitle = "Proc. ACM SIGMOD Int. Conf. on Management of Data, Paris, France, 2004, 455-466", // url = "http://dx.doi.org/10.1145/1007568.1007620") public class FourCCorePredicate implements CorePredicate { /** * The PreDeCon settings class. */ protected FourC.Settings settings; /** * Default constructor. * * @param settings PreDeCon settings */ public FourCCorePredicate(FourC.Settings settings) { super(); this.settings = settings; } @SuppressWarnings("unchecked") @Override public CorePredicate.Instance instantiate(Database database, SimpleTypeInformation type) { return (CorePredicate.Instance) new Instance(settings); } @Override public boolean acceptsType(SimpleTypeInformation type) { return (type.getRestrictionClass().isAssignableFrom(PreDeConModel.class)); } /** * Instance for a particular data set. * * @author Erich Schubert */ public static class Instance implements CorePredicate.Instance { /** * The PreDeCon settings class. */ protected FourC.Settings settings; /** * Constructor for this predicate. * * @param settings PreDeCon settings */ public Instance(FourC.Settings settings) { super(); this.settings = settings; } @Override public boolean isCorePoint(DBIDRef point, PreDeConModel model) { return (model.pdim <= settings.lambda) && (model.ids.size() >= settings.minpts); } } /** * Parameterization class * * @author Erich Schubert * * @apiviz.exclude */ public static class Parameterizer extends AbstractParameterizer { /** * The PreDeCon settings class. */ protected FourC.Settings settings; @Override protected void makeOptions(Parameterization config) { super.makeOptions(config); settings = config.tryInstantiate(FourC.Settings.class); } @Override protected FourCCorePredicate makeInstance() { return new FourCCorePredicate(settings); } } }