diff options
Diffstat (limited to 'test/de/lmu/ifi/dbs/elki/algorithm')
15 files changed, 250 insertions, 44 deletions
diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/AbstractSimpleAlgorithmTest.java b/test/de/lmu/ifi/dbs/elki/algorithm/AbstractSimpleAlgorithmTest.java index 8b0507f0..3e260e8e 100644 --- a/test/de/lmu/ifi/dbs/elki/algorithm/AbstractSimpleAlgorithmTest.java +++ b/test/de/lmu/ifi/dbs/elki/algorithm/AbstractSimpleAlgorithmTest.java @@ -97,7 +97,7 @@ public abstract class AbstractSimpleAlgorithmTest { */ protected <T> Database makeSimpleDatabase(String filename, int expectedSize, ListParameterization params, Class<?>[] filters) { org.junit.Assert.assertTrue("Test data set not found: " + filename, (new File(filename)).exists()); - params.addParameter(FileBasedDatabaseConnection.INPUT_ID, filename); + params.addParameter(FileBasedDatabaseConnection.Parameterizer.INPUT_ID, filename); List<Class<?>> filterlist = new ArrayList<>(); filterlist.add(FixedDBIDsFilter.class); @@ -106,8 +106,8 @@ public abstract class AbstractSimpleAlgorithmTest { filterlist.add(filter); } } - params.addParameter(FileBasedDatabaseConnection.FILTERS_ID, filterlist); - params.addParameter(FixedDBIDsFilter.IDSTART_ID, 1); + params.addParameter(FileBasedDatabaseConnection.Parameterizer.FILTERS_ID, filterlist); + params.addParameter(FixedDBIDsFilter.Parameterizer.IDSTART_ID, 1); Database db = ClassGenericsUtil.parameterizeOrAbort(StaticArrayDatabase.class, params); testParameterizationOk(params); diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/TestKNNJoin.java b/test/de/lmu/ifi/dbs/elki/algorithm/TestKNNJoin.java index 3d8ef366..19509350 100644 --- a/test/de/lmu/ifi/dbs/elki/algorithm/TestKNNJoin.java +++ b/test/de/lmu/ifi/dbs/elki/algorithm/TestKNNJoin.java @@ -80,10 +80,10 @@ public class TestKNNJoin implements JUnit4Test { @Test public void testLinearScan() { ListParameterization inputparams = new ListParameterization(); - inputparams.addParameter(FileBasedDatabaseConnection.INPUT_ID, dataset); + inputparams.addParameter(FileBasedDatabaseConnection.Parameterizer.INPUT_ID, dataset); List<Class<?>> filters = Arrays.asList(new Class<?>[] { FixedDBIDsFilter.class }); - inputparams.addParameter(FileBasedDatabaseConnection.FILTERS_ID, filters); - inputparams.addParameter(FixedDBIDsFilter.IDSTART_ID, 1); + inputparams.addParameter(FileBasedDatabaseConnection.Parameterizer.FILTERS_ID, filters); + inputparams.addParameter(FixedDBIDsFilter.Parameterizer.IDSTART_ID, 1); // get database Database db = ClassGenericsUtil.parameterizeOrAbort(StaticArrayDatabase.class, inputparams); @@ -130,7 +130,7 @@ public class TestKNNJoin implements JUnit4Test { @Test public void testKNNJoinRtreeMini() { ListParameterization spatparams = new ListParameterization(); - spatparams.addParameter(StaticArrayDatabase.INDEX_ID, RStarTreeFactory.class); + spatparams.addParameter(StaticArrayDatabase.Parameterizer.INDEX_ID, RStarTreeFactory.class); spatparams.addParameter(AbstractPageFileFactory.Parameterizer.PAGE_SIZE_ID, 200); doKNNJoin(spatparams); @@ -144,7 +144,7 @@ public class TestKNNJoin implements JUnit4Test { @Test public void testKNNJoinRtreeMaxi() { ListParameterization spatparams = new ListParameterization(); - spatparams.addParameter(StaticArrayDatabase.INDEX_ID, RStarTreeFactory.class); + spatparams.addParameter(StaticArrayDatabase.Parameterizer.INDEX_ID, RStarTreeFactory.class); spatparams.addParameter(AbstractPageFileFactory.Parameterizer.PAGE_SIZE_ID, 2000); doKNNJoin(spatparams); @@ -158,7 +158,7 @@ public class TestKNNJoin implements JUnit4Test { @Test public void testKNNJoinDeLiCluTreeMini() { ListParameterization spatparams = new ListParameterization(); - spatparams.addParameter(StaticArrayDatabase.INDEX_ID, DeLiCluTreeFactory.class); + spatparams.addParameter(StaticArrayDatabase.Parameterizer.INDEX_ID, DeLiCluTreeFactory.class); spatparams.addParameter(AbstractPageFileFactory.Parameterizer.PAGE_SIZE_ID, 200); doKNNJoin(spatparams); @@ -171,10 +171,10 @@ public class TestKNNJoin implements JUnit4Test { * @throws ParameterException */ void doKNNJoin(ListParameterization inputparams) { - inputparams.addParameter(FileBasedDatabaseConnection.INPUT_ID, dataset); + inputparams.addParameter(FileBasedDatabaseConnection.Parameterizer.INPUT_ID, dataset); List<Class<?>> filters = Arrays.asList(new Class<?>[] { FixedDBIDsFilter.class }); - inputparams.addParameter(FileBasedDatabaseConnection.FILTERS_ID, filters); - inputparams.addParameter(FixedDBIDsFilter.IDSTART_ID, 1); + inputparams.addParameter(FileBasedDatabaseConnection.Parameterizer.FILTERS_ID, filters); + inputparams.addParameter(FixedDBIDsFilter.Parameterizer.IDSTART_ID, 1); // get database Database db = ClassGenericsUtil.parameterizeOrAbort(StaticArrayDatabase.class, inputparams); diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/TestDBSCANResults.java b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/TestDBSCANResults.java index 714f345c..34dd2e3d 100644 --- a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/TestDBSCANResults.java +++ b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/TestDBSCANResults.java @@ -60,8 +60,8 @@ public class TestDBSCANResults extends AbstractSimpleAlgorithmTest implements JU // setup algorithm ListParameterization params = new ListParameterization(); - params.addParameter(DBSCAN.EPSILON_ID, 0.04); - params.addParameter(DBSCAN.MINPTS_ID, 20); + params.addParameter(DBSCAN.Parameterizer.EPSILON_ID, 0.04); + params.addParameter(DBSCAN.Parameterizer.MINPTS_ID, 20); DBSCAN<DoubleVector, DoubleDistance> dbscan = ClassGenericsUtil.parameterizeOrAbort(DBSCAN.class, params); testParameterizationOk(params); @@ -84,8 +84,8 @@ public class TestDBSCANResults extends AbstractSimpleAlgorithmTest implements JU // Setup algorithm ListParameterization params = new ListParameterization(); - params.addParameter(DBSCAN.EPSILON_ID, 11.5); - params.addParameter(DBSCAN.MINPTS_ID, 120); + params.addParameter(DBSCAN.Parameterizer.EPSILON_ID, 11.5); + params.addParameter(DBSCAN.Parameterizer.MINPTS_ID, 120); DBSCAN<DoubleVector, DoubleDistance> dbscan = ClassGenericsUtil.parameterizeOrAbort(DBSCAN.class, params); testParameterizationOk(params); @@ -107,8 +107,8 @@ public class TestDBSCANResults extends AbstractSimpleAlgorithmTest implements JU // setup algorithm ListParameterization params = new ListParameterization(); - params.addParameter(DBSCAN.EPSILON_ID, 0.04); - params.addParameter(DBSCAN.MINPTS_ID, 20); + params.addParameter(DBSCAN.Parameterizer.EPSILON_ID, 0.04); + params.addParameter(DBSCAN.Parameterizer.MINPTS_ID, 20); GeneralizedDBSCAN dbscan = ClassGenericsUtil.parameterizeOrAbort(GeneralizedDBSCAN.class, params); testParameterizationOk(params); @@ -131,8 +131,8 @@ public class TestDBSCANResults extends AbstractSimpleAlgorithmTest implements JU // Setup algorithm ListParameterization params = new ListParameterization(); - params.addParameter(DBSCAN.EPSILON_ID, 11.5); - params.addParameter(DBSCAN.MINPTS_ID, 120); + params.addParameter(DBSCAN.Parameterizer.EPSILON_ID, 11.5); + params.addParameter(DBSCAN.Parameterizer.MINPTS_ID, 120); GeneralizedDBSCAN dbscan = ClassGenericsUtil.parameterizeOrAbort(GeneralizedDBSCAN.class, params); testParameterizationOk(params); diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/TestDeLiCluResults.java b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/TestDeLiCluResults.java index 1323c5fa..b70c0f67 100644 --- a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/TestDeLiCluResults.java +++ b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/TestDeLiCluResults.java @@ -62,7 +62,7 @@ public class TestDeLiCluResults extends AbstractSimpleAlgorithmTest implements J public void testDeLiCluResults() { ListParameterization indexparams = new ListParameterization(); // We need a special index for this algorithm: - indexparams.addParameter(StaticArrayDatabase.INDEX_ID, DeLiCluTreeFactory.class); + indexparams.addParameter(StaticArrayDatabase.Parameterizer.INDEX_ID, DeLiCluTreeFactory.class); indexparams.addParameter(AbstractPageFileFactory.Parameterizer.PAGE_SIZE_ID, 1000); Database db = makeSimpleDatabase(UNITTEST + "hierarchical-2d.ascii", 710, indexparams, null); diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/TestEMResults.java b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/TestEMResults.java index 421141a3..065307be 100644 --- a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/TestEMResults.java +++ b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/TestEMResults.java @@ -57,14 +57,14 @@ public class TestEMResults extends AbstractSimpleAlgorithmTest implements JUnit4 // Setup algorithm ListParameterization params = new ListParameterization(); - params.addParameter(KMeans.SEED_ID, 1); - params.addParameter(EM.K_ID, 5); + params.addParameter(KMeans.SEED_ID, 0); + params.addParameter(EM.Parameterizer.K_ID, 6); EM<DoubleVector> em = ClassGenericsUtil.parameterizeOrAbort(EM.class, params); testParameterizationOk(params); // run EM on database Clustering<EMModel<DoubleVector>> result = em.run(db); - testFMeasure(db, result, 0.961587); - testClusterSizes(result, new int[] { 5, 91, 98, 200, 316 }); + testFMeasure(db, result, 0.7551098); + testClusterSizes(result, new int[] { 50, 99, 102, 120, 141, 198 }); } }
\ No newline at end of file diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/TestCOPACResults.java b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/TestCOPACResults.java index 8af036bf..94c59557 100644 --- a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/TestCOPACResults.java +++ b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/TestCOPACResults.java @@ -66,8 +66,8 @@ public class TestCOPACResults extends AbstractSimpleAlgorithmTest implements JUn // these parameters are not picked too smartly - room for improvement. ListParameterization params = new ListParameterization(); params.addParameter(COPAC.PARTITION_ALGORITHM_ID, DBSCAN.class); - params.addParameter(DBSCAN.EPSILON_ID, 0.02); - params.addParameter(DBSCAN.MINPTS_ID, 50); + params.addParameter(DBSCAN.Parameterizer.EPSILON_ID, 0.02); + params.addParameter(DBSCAN.Parameterizer.MINPTS_ID, 50); params.addParameter(COPAC.PREPROCESSOR_ID, KNNQueryFilteredPCAIndex.Factory.class); params.addParameter(KNNQueryFilteredPCAIndex.Factory.K_ID, 15); @@ -94,8 +94,8 @@ public class TestCOPACResults extends AbstractSimpleAlgorithmTest implements JUn // Setup algorithm ListParameterization params = new ListParameterization(); params.addParameter(COPAC.PARTITION_ALGORITHM_ID, DBSCAN.class); - params.addParameter(DBSCAN.EPSILON_ID, 0.5); - params.addParameter(DBSCAN.MINPTS_ID, 20); + params.addParameter(DBSCAN.Parameterizer.EPSILON_ID, 0.5); + params.addParameter(DBSCAN.Parameterizer.MINPTS_ID, 20); params.addParameter(COPAC.PREPROCESSOR_ID, KNNQueryFilteredPCAIndex.Factory.class); params.addParameter(KNNQueryFilteredPCAIndex.Factory.K_ID, 45); // PCA diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/TestERiCResults.java b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/TestERiCResults.java index 92a61e5e..76e8cca2 100644 --- a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/TestERiCResults.java +++ b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/TestERiCResults.java @@ -66,8 +66,8 @@ public class TestERiCResults extends AbstractSimpleAlgorithmTest implements JUni // ERiC ListParameterization params = new ListParameterization(); params.addParameter(COPAC.PARTITION_ALGORITHM_ID, DBSCAN.class); - params.addParameter(DBSCAN.MINPTS_ID, 30); - params.addParameter(DBSCAN.EPSILON_ID, 0); + params.addParameter(DBSCAN.Parameterizer.MINPTS_ID, 30); + params.addParameter(DBSCAN.Parameterizer.EPSILON_ID, 0); // ERiC Distance function in DBSCAN: params.addParameter(COPAC.PARTITION_DISTANCE_ID, ERiCDistanceFunction.class); params.addParameter(ERiCDistanceFunction.DELTA_ID, 0.20); @@ -104,8 +104,8 @@ public class TestERiCResults extends AbstractSimpleAlgorithmTest implements JUni ListParameterization params = new ListParameterization(); // ERiC params.addParameter(COPAC.PARTITION_ALGORITHM_ID, DBSCAN.class); - params.addParameter(DBSCAN.MINPTS_ID, 15); - params.addParameter(DBSCAN.EPSILON_ID, 0); + params.addParameter(DBSCAN.Parameterizer.MINPTS_ID, 15); + params.addParameter(DBSCAN.Parameterizer.EPSILON_ID, 0); // ERiC Distance function in DBSCAN: params.addParameter(COPAC.PARTITION_DISTANCE_ID, ERiCDistanceFunction.class); params.addParameter(ERiCDistanceFunction.DELTA_ID, 1.0); diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/TestKMeansResults.java b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/TestKMeansResults.java index 3419352a..3601b977 100644 --- a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/TestKMeansResults.java +++ b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/TestKMeansResults.java @@ -61,7 +61,7 @@ public class TestKMeansResults extends AbstractSimpleAlgorithmTest implements JU // Setup algorithm ListParameterization params = new ListParameterization(); params.addParameter(KMeans.K_ID, 5); - params.addParameter(KMeans.INIT_ID, FirstKInitialMeans.class); + params.addParameter(KMeans.SEED_ID, 2); AbstractKMeans<DoubleVector, DoubleDistance, ?> kmeans = ClassGenericsUtil.parameterizeOrAbort(KMeansLloyd.class, params); testParameterizationOk(params); @@ -84,7 +84,7 @@ public class TestKMeansResults extends AbstractSimpleAlgorithmTest implements JU // Setup algorithm ListParameterization params = new ListParameterization(); params.addParameter(KMeans.K_ID, 5); - params.addParameter(KMeans.INIT_ID, FirstKInitialMeans.class); + params.addParameter(KMeans.SEED_ID, 2); AbstractKMeans<DoubleVector, DoubleDistance, ?> kmeans = ClassGenericsUtil.parameterizeOrAbort(KMeansMacQueen.class, params); testParameterizationOk(params); @@ -107,7 +107,7 @@ public class TestKMeansResults extends AbstractSimpleAlgorithmTest implements JU // Setup algorithm ListParameterization params = new ListParameterization(); params.addParameter(KMeans.K_ID, 5); - params.addParameter(KMeans.INIT_ID, FirstKInitialMeans.class); + params.addParameter(KMeans.SEED_ID, 2); AbstractKMeans<DoubleVector, DoubleDistance, ?> kmedians = ClassGenericsUtil.parameterizeOrAbort(KMediansLloyd.class, params); testParameterizationOk(params); diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/TestP3C.java b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/TestP3C.java new file mode 100644 index 00000000..4d02351f --- /dev/null +++ b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/TestP3C.java @@ -0,0 +1,84 @@ +package de.lmu.ifi.dbs.elki.algorithm.clustering.subspace; + +/* + This file is part of ELKI: + Environment for Developing KDD-Applications Supported by Index-Structures + + Copyright (C) 2012 + 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 <http://www.gnu.org/licenses/>. + */ + +import org.junit.Test; + +import de.lmu.ifi.dbs.elki.JUnit4Test; +import de.lmu.ifi.dbs.elki.algorithm.AbstractSimpleAlgorithmTest; +import de.lmu.ifi.dbs.elki.data.Clustering; +import de.lmu.ifi.dbs.elki.data.DoubleVector; +import de.lmu.ifi.dbs.elki.data.model.SubspaceModel; +import de.lmu.ifi.dbs.elki.database.Database; +import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.ListParameterization; + +/** + * Test P3C on a simple test data set. + * + * Note: both data sets are really beneficial for P3C, and with reasonably + * chosen parameters, it works perfectly. + * + * @author Erich Schubert + */ +public class TestP3C extends AbstractSimpleAlgorithmTest implements JUnit4Test { + /** + * Run P3C with fixed parameters and compare the result to a golden standard. + */ + @Test + public void testP3CSimple() { + Database db = makeSimpleDatabase(UNITTEST + "subspace-simple.csv", 600); + + ListParameterization params = new ListParameterization(); + + // setup algorithm + P3C<DoubleVector> p3c = ClassGenericsUtil.parameterizeOrAbort(P3C.class, params); + testParameterizationOk(params); + + // run P3C on database + Clustering<SubspaceModel<DoubleVector>> result = p3c.run(db); + + testFMeasure(db, result, 1.0); + testClusterSizes(result, new int[] { 200, 400 }); + } + + /** + * Run P3C with fixed parameters and compare the result to a golden standard. + */ + @Test + public void testP3COverlapping() { + Database db = makeSimpleDatabase(UNITTEST + "subspace-overlapping-3-4d.ascii", 850); + + // Setup algorithm + ListParameterization params = new ListParameterization(); + params.addParameter(P3C.Parameterizer.ALPHA_THRESHOLD_ID, 0.01); + P3C<DoubleVector> p3c = ClassGenericsUtil.parameterizeOrAbort(P3C.class, params); + testParameterizationOk(params); + + // run P3C on database + Clustering<SubspaceModel<DoubleVector>> result = p3c.run(db); + testFMeasure(db, result, 1.0); + testClusterSizes(result, new int[] { 150, 300, 400 }); + } +}
\ No newline at end of file diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/TestPreDeConResults.java b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/TestPreDeConResults.java index a07c71a1..d00a703f 100644 --- a/test/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/TestPreDeConResults.java +++ b/test/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/TestPreDeConResults.java @@ -58,7 +58,7 @@ public class TestPreDeConResults extends AbstractSimpleAlgorithmTest implements public void testPreDeConResults() { // Additional input parameters ListParameterization inp = new ListParameterization(); - inp.addParameter(ClassLabelFilter.CLASS_LABEL_INDEX_ID, 1); + inp.addParameter(ClassLabelFilter.Parameterizer.CLASS_LABEL_INDEX_ID, 1); Class<?>[] filters = new Class<?>[] { ClassLabelFilter.class }; Database db = makeSimpleDatabase(UNITTEST + "axis-parallel-subspace-clusters-6d.csv.gz", 2500, inp, filters); diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/outlier/TestABOD.java b/test/de/lmu/ifi/dbs/elki/algorithm/outlier/TestABOD.java index 3490ce9a..e213b54e 100644 --- a/test/de/lmu/ifi/dbs/elki/algorithm/outlier/TestABOD.java +++ b/test/de/lmu/ifi/dbs/elki/algorithm/outlier/TestABOD.java @@ -25,7 +25,6 @@ package de.lmu.ifi.dbs.elki.algorithm.outlier; import org.junit.Test; -import de.lmu.ifi.dbs.elki.JUnit4Test; import de.lmu.ifi.dbs.elki.algorithm.AbstractSimpleAlgorithmTest; import de.lmu.ifi.dbs.elki.data.DoubleVector; import de.lmu.ifi.dbs.elki.database.Database; @@ -36,16 +35,17 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.ListParamet /** * Tests the ABOD algorithm. * + * Note: we don't implement JUnit4Test, as this test is slow. + * * @author Lucia Cichella */ -public class TestABOD extends AbstractSimpleAlgorithmTest implements JUnit4Test { +public class TestABOD extends AbstractSimpleAlgorithmTest { @Test public void testABOD() { Database db = makeSimpleDatabase(UNITTEST + "outlier-3d-3clusters.ascii", 960); // Parameterization ListParameterization params = new ListParameterization(); - params.addParameter(ABOD.K_ID, 5); // setup Algorithm ABOD<DoubleVector> abod = ClassGenericsUtil.parameterizeOrAbort(ABOD.class, params); @@ -54,7 +54,7 @@ public class TestABOD extends AbstractSimpleAlgorithmTest implements JUnit4Test // run ABOD on database OutlierResult result = abod.run(db); - testSingleScore(result, 945, 3.7108897864090475E-4); - testAUC(db, "Noise", result, 0.9638148148148148); + testAUC(db, "Noise", result, 0.94887037037037); + testSingleScore(result, 945, 1.88108120738508E-4); } }
\ No newline at end of file diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/outlier/TestFastABOD.java b/test/de/lmu/ifi/dbs/elki/algorithm/outlier/TestFastABOD.java new file mode 100644 index 00000000..11977af6 --- /dev/null +++ b/test/de/lmu/ifi/dbs/elki/algorithm/outlier/TestFastABOD.java @@ -0,0 +1,60 @@ +package de.lmu.ifi.dbs.elki.algorithm.outlier; + +/* + This file is part of ELKI: + Environment for Developing KDD-Applications Supported by Index-Structures + + Copyright (C) 2012 + 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 <http://www.gnu.org/licenses/>. + */ + +import org.junit.Test; + +import de.lmu.ifi.dbs.elki.JUnit4Test; +import de.lmu.ifi.dbs.elki.algorithm.AbstractSimpleAlgorithmTest; +import de.lmu.ifi.dbs.elki.data.DoubleVector; +import de.lmu.ifi.dbs.elki.database.Database; +import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult; +import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.ListParameterization; + +/** + * Tests the ABOD algorithm. + * + * @author Lucia Cichella + */ +public class TestFastABOD extends AbstractSimpleAlgorithmTest implements JUnit4Test { + @Test + public void testFastABOD() { + Database db = makeSimpleDatabase(UNITTEST + "outlier-3d-3clusters.ascii", 960); + + // Parameterization + ListParameterization params = new ListParameterization(); + params.addParameter(FastABOD.Parameterizer.K_ID, 5); + + // setup Algorithm + FastABOD<DoubleVector> abod = ClassGenericsUtil.parameterizeOrAbort(FastABOD.class, params); + testParameterizationOk(params); + + // run ABOD on database + OutlierResult result = abod.run(db); + + testAUC(db, "Noise", result, 0.963259259259); + testSingleScore(result, 945, 0.68723169783); + } +}
\ No newline at end of file diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/outlier/TestLBABOD.java b/test/de/lmu/ifi/dbs/elki/algorithm/outlier/TestLBABOD.java new file mode 100644 index 00000000..5a1f56f2 --- /dev/null +++ b/test/de/lmu/ifi/dbs/elki/algorithm/outlier/TestLBABOD.java @@ -0,0 +1,62 @@ +package de.lmu.ifi.dbs.elki.algorithm.outlier; + +/* + This file is part of ELKI: + Environment for Developing KDD-Applications Supported by Index-Structures + + Copyright (C) 2012 + 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 <http://www.gnu.org/licenses/>. + */ + +import org.junit.Test; + +import de.lmu.ifi.dbs.elki.algorithm.AbstractSimpleAlgorithmTest; +import de.lmu.ifi.dbs.elki.data.DoubleVector; +import de.lmu.ifi.dbs.elki.database.Database; +import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult; +import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.ListParameterization; + +/** + * Tests the LB-ABOD algorithm. + * + * Note: we don't implement JUnit4Test, as this test is slow. + * + * @author Lucia Cichella + */ +public class TestLBABOD extends AbstractSimpleAlgorithmTest { + @Test + public void testLBABOD() { + Database db = makeSimpleDatabase(UNITTEST + "outlier-3d-3clusters.ascii", 960); + + // Parameterization + ListParameterization params = new ListParameterization(); + params.addParameter(FastABOD.Parameterizer.K_ID, 150); + params.addParameter(LBABOD.Parameterizer.L_ID, 10); + + // setup Algorithm + LBABOD<DoubleVector> abod = ClassGenericsUtil.parameterizeOrAbort(LBABOD.class, params); + testParameterizationOk(params); + + // run ABOD on database + OutlierResult result = abod.run(db); + + testAUC(db, "Noise", result, 0.928999999999); + testSingleScore(result, 945, 1.88108120738508E-4); + } +}
\ No newline at end of file diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/TestOnlineLOF.java b/test/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/TestOnlineLOF.java index cd60a58f..889cddce 100644 --- a/test/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/TestOnlineLOF.java +++ b/test/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/TestOnlineLOF.java @@ -152,7 +152,7 @@ public class TestOnlineLOF implements JUnit4Test { */ private static UpdatableDatabase getDatabase() { ListParameterization params = new ListParameterization(); - params.addParameter(FileBasedDatabaseConnection.INPUT_ID, dataset); + params.addParameter(FileBasedDatabaseConnection.Parameterizer.INPUT_ID, dataset); UpdatableDatabase db = ClassGenericsUtil.parameterizeOrAbort(HashmapDatabase.class, params); params.failOnErrors(); diff --git a/test/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/TestSOD.java b/test/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/TestSOD.java index c43f2f35..f8f47886 100644 --- a/test/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/TestSOD.java +++ b/test/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/TestSOD.java @@ -47,7 +47,7 @@ public class TestSOD extends AbstractSimpleAlgorithmTest implements JUnit4Test { // Parameterization ListParameterization params = new ListParameterization(); - params.addParameter(SOD.KNN_ID, 25); + params.addParameter(SOD.Parameterizer.KNN_ID, 25); params.addParameter(SharedNearestNeighborPreprocessor.Factory.NUMBER_OF_NEIGHBORS_ID, 19); // setup Algorithm |