summaryrefslogtreecommitdiff
path: root/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation
diff options
context:
space:
mode:
Diffstat (limited to 'elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation')
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/AutomaticEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/Evaluator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/NoAutomaticEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrix.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrixEvaluationResult.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/AbstractHoldout.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/DisjointCrossValidation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/Holdout.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/LeaveOneOut.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedCrossValidation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedHoldout.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/StratifiedCrossValidation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/TrainingAndTestSet.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/BCubed.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/ClusterContingencyTable.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EditDistance.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/Entropy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EvaluateClustering.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/LogClusterSizes.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/PairCounting.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/SetMatchingPurity.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/ExtractFlatClusteringFromHierarchyEvaluator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/HDBSCANHierarchyExtractionEvaluator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/SimplifiedHierarchyExtractionEvaluator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateCIndex.java141
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateConcordantPairs.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateDaviesBouldin.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluatePBMIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSilhouette.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSimplifiedSilhouette.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSquaredErrors.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateVarianceRatioCriteria.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/NoiseHandling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/ClusterPairSegmentAnalysis.java16
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segment.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segments.java14
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/histogram/ComputeOutlierHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexPurity.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexStatistics.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/JudgeOutlierScores.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionAtKCurve.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionRecallCurve.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierROCCurve.java8
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierRankingEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierSmROCCurve.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierThresholdClustering.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AbstractScoreEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AveragePrecisionEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/MaximumF1Evaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/PrecisionAtKEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ROCEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ScoreEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/AbstractVectorIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDRefIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDsTest.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DecreasingVectorIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DistanceResultAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/FilteredDistanceResultAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/IncreasingVectorIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/OutlierScoreAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/SimpleAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorNonZero.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorOverThreshold.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorZero.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/similaritymatrix/ComputeSimilarityMatrixImage.java1
65 files changed, 200 insertions, 53 deletions
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/AutomaticEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/AutomaticEvaluation.java
index 484b55c5..0763f69e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/AutomaticEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/AutomaticEvaluation.java
@@ -50,6 +50,7 @@ import de.lmu.ifi.dbs.elki.utilities.scaling.LinearScaling;
* Evaluator that tries to auto-run a number of evaluation methods.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/Evaluator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/Evaluator.java
index ad8d06db..636b4c8a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/Evaluator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/Evaluator.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.result.ResultProcessor;
* evaluations, ...
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.excludeSubtypes
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/NoAutomaticEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/NoAutomaticEvaluation.java
index c2fd7811..e6cd96a2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/NoAutomaticEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/NoAutomaticEvaluation.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* evaluation to run.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class NoAutomaticEvaluation implements Evaluator {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrix.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrix.java
index 78be5b52..73098bc5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrix.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrix.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.data.ClassLabel;
* can be derived from a confusion matrix.
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
public class ConfusionMatrix {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrixEvaluationResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrixEvaluationResult.java
index 87ad6df3..02d35025 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrixEvaluationResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrixEvaluationResult.java
@@ -30,10 +30,13 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
/**
* Provides the prediction performance measures for a classifier based on the
* confusion matrix.
- *
+ *
* Note: this API is non-final, and will be refactored soon.
*
* @author Arthur Zimek
+ * @since 0.7.0
+ *
+ * @apiviz.composedOf ConfusionMatrix
*/
public class ConfusionMatrixEvaluationResult implements Result, TextWriteable {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/AbstractHoldout.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/AbstractHoldout.java
index cbe90475..bff2fa7f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/AbstractHoldout.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/AbstractHoldout.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* Split a data set for holdout evaluation.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public abstract class AbstractHoldout implements Holdout {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/DisjointCrossValidation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/DisjointCrossValidation.java
index c3c1df82..ecb872ac 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/DisjointCrossValidation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/DisjointCrossValidation.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* perform cross-validation. The test sets are guaranteed to be disjoint.
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
public class DisjointCrossValidation extends RandomizedHoldout {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/Holdout.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/Holdout.java
index 69de2f9e..c2656147 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/Holdout.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/Holdout.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle;
* pairs of training and test data sets.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses MultipleObjectsBundle
* @apiviz.has TrainingAndTestSet
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/LeaveOneOut.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/LeaveOneOut.java
index ae638a39..e67d4a14 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/LeaveOneOut.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/LeaveOneOut.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle;
* remaining instances are training instances.
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
public class LeaveOneOut extends AbstractHoldout {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedCrossValidation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedCrossValidation.java
index 868462d9..2921fc22 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedCrossValidation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedCrossValidation.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* to perform cross-validation. The test sets are not guaranteed to be disjoint.
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
public class RandomizedCrossValidation extends RandomizedHoldout {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedHoldout.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedHoldout.java
index dd390421..aca68ed6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedHoldout.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedHoldout.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* A holdout providing a seed for randomized operations.
*
* @author Arthur Zimek
+ * @since 0.3
*/
public abstract class RandomizedHoldout extends AbstractHoldout {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/StratifiedCrossValidation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/StratifiedCrossValidation.java
index 3e0c4b2b..60af8179 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/StratifiedCrossValidation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/StratifiedCrossValidation.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* deterministic.
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
public class StratifiedCrossValidation extends AbstractHoldout {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/TrainingAndTestSet.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/TrainingAndTestSet.java
index 7ee58663..3c1af309 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/TrainingAndTestSet.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/TrainingAndTestSet.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle;
* training and test set are provided in labels.
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
public class TrainingAndTestSet {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/BCubed.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/BCubed.java
index e4958527..4cf9ec0e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/BCubed.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/BCubed.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Sascha Goldhofer
+ * @since 0.5.0
*/
@Reference(authors = "A. Bagga and B. Baldwin", //
title = "Entity-based cross-document coreferencing using the Vector Space Model", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/ClusterContingencyTable.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/ClusterContingencyTable.java
index e063b967..b269d2f9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/ClusterContingencyTable.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/ClusterContingencyTable.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* Class storing the contingency table and related data on two clusterings.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EditDistance.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EditDistance.java
index 85764e2e..e07c84eb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EditDistance.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EditDistance.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Sascha Goldhofer
+ * @since 0.5.0
*/
@Reference(authors = "Pantel, P. and Lin, D.", title = "Document clustering with committees", booktitle = "Proc. 25th ACM SIGIR conference on Research and development in information retrieval", url = "http://dx.doi.org/10.1145/564376.564412")
public class EditDistance {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/Entropy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/Entropy.java
index b7770f71..17e3abca 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/Entropy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/Entropy.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Sascha Goldhofer
+ * @since 0.5.0
*/
@Reference(authors = "Meilă, M.", //
title = "Comparing clusterings by the variation of information", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EvaluateClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EvaluateClustering.java
index a4c46191..473e713c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EvaluateClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EvaluateClustering.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.result.EvaluationResult;
import de.lmu.ifi.dbs.elki.result.Result;
import de.lmu.ifi.dbs.elki.result.ResultHierarchy;
import de.lmu.ifi.dbs.elki.result.ResultUtil;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
@@ -48,11 +49,13 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Evaluate a clustering result by comparing it to an existing cluster label.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.uses ClusterContingencyTable
* @apiviz.has EvaluateClustering.ScoreResult oneway - - «create»
*/
+@Alias("de.lmu.ifi.dbs.elki.evaluation.paircounting.EvaluatePairCountingFMeasure")
public class EvaluateClustering implements Evaluator {
/**
* Logger for debug output.
@@ -313,4 +316,4 @@ public class EvaluateClustering implements Evaluator {
return new EvaluateClustering(referencealg, noiseSpecialHandling, !selfPairing);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/LogClusterSizes.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/LogClusterSizes.java
index 9b4c2512..2b801cfb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/LogClusterSizes.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/LogClusterSizes.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy.Hierarchy.Iter;
* cluster sizes and the number of clusters.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class LogClusterSizes implements Evaluator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/PairCounting.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/PairCounting.java
index 3025f367..26f2d5db 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/PairCounting.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/PairCounting.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* Pair-counting measures.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class PairCounting {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/SetMatchingPurity.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/SetMatchingPurity.java
index bbef4b5f..46bddd77 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/SetMatchingPurity.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/SetMatchingPurity.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Sascha Goldhofer
+ * @since 0.5.0
*/
@Reference(authors = "Meilă, M", //
title = "Comparing clusterings", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/ExtractFlatClusteringFromHierarchyEvaluator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/ExtractFlatClusteringFromHierarchyEvaluator.java
index 258b983d..60f22623 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/ExtractFlatClusteringFromHierarchyEvaluator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/ExtractFlatClusteringFromHierarchyEvaluator.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* from the same clustering, this can be useful.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class ExtractFlatClusteringFromHierarchyEvaluator implements Evaluator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/HDBSCANHierarchyExtractionEvaluator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/HDBSCANHierarchyExtractionEvaluator.java
index 4fa9f44f..456d1fc6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/HDBSCANHierarchyExtractionEvaluator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/HDBSCANHierarchyExtractionEvaluator.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* from the same clustering, this can be useful.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class HDBSCANHierarchyExtractionEvaluator implements Evaluator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/SimplifiedHierarchyExtractionEvaluator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/SimplifiedHierarchyExtractionEvaluator.java
index 871ab121..0644a16c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/SimplifiedHierarchyExtractionEvaluator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/SimplifiedHierarchyExtractionEvaluator.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* from the same clustering, this can be useful.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class SimplifiedHierarchyExtractionEvaluator implements Evaluator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateCIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateCIndex.java
index e43d9cc5..a96dfc91 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateCIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateCIndex.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction;
import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.EuclideanDistanceFunction;
import de.lmu.ifi.dbs.elki.evaluation.Evaluator;
import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.logging.progress.FiniteProgress;
import de.lmu.ifi.dbs.elki.logging.statistics.DoubleStatistic;
import de.lmu.ifi.dbs.elki.logging.statistics.LongStatistic;
import de.lmu.ifi.dbs.elki.logging.statistics.StringStatistic;
@@ -43,7 +44,9 @@ import de.lmu.ifi.dbs.elki.result.EvaluationResult.MeasurementGroup;
import de.lmu.ifi.dbs.elki.result.Result;
import de.lmu.ifi.dbs.elki.result.ResultHierarchy;
import de.lmu.ifi.dbs.elki.result.ResultUtil;
-import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.DoubleArray;
+import de.lmu.ifi.dbs.elki.utilities.datastructures.heap.DoubleHeap;
+import de.lmu.ifi.dbs.elki.utilities.datastructures.heap.DoubleMaxHeap;
+import de.lmu.ifi.dbs.elki.utilities.datastructures.heap.DoubleMinHeap;
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.OptionID;
@@ -53,10 +56,13 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
/**
* Compute the C-index of a data set.
+ *
+ * Note: This requires pairwise distance computations, so it is not recommended
+ * to use this on larger data sets.
*
* Reference:
* <p>
- * L. J. Hubert and J.R. Levin <br />
+ * L. J. Hubert and J. R. Levin <br />
* A general statistical framework for assessing categorical clustering in free
* recall<br />
* Psychological Bulletin, Vol. 83(6)
@@ -64,6 +70,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
@@ -115,15 +122,9 @@ public class EvaluateCIndex<O> implements Evaluator {
public double evaluateClustering(Database db, Relation<? extends O> rel, DistanceQuery<O> dq, Clustering<?> c) {
List<? extends Cluster<?>> clusters = c.getAllClusters();
- // theta is the sum, w the number of within group distances
- double theta = 0;
- int w = 0;
- int ignorednoise = 0;
- int isize = clusters.size() <= 1 ? rel.size() : rel.size() / (clusters.size() - 1);
- DoubleArray pairDists = new DoubleArray(isize);
-
- for(int i = 0; i < clusters.size(); i++) {
- Cluster<?> cluster = clusters.get(i);
+ // Count ignored noise, and within-cluster distances
+ int ignorednoise = 0, w = 0;
+ for(Cluster<?> cluster : clusters) {
if(cluster.size() <= 1 || cluster.isNoise()) {
switch(noiseOption){
case IGNORE_NOISE:
@@ -135,41 +136,51 @@ public class EvaluateCIndex<O> implements Evaluator {
break; // Treat like a cluster
}
}
- for(DBIDIter it1 = cluster.getIDs().iter(); it1.valid(); it1.advance()) {
- O obj = rel.get(it1);
- // Compare object to every cluster, but only once
- for(int j = i; j < clusters.size(); j++) {
- Cluster<?> ocluster = clusters.get(j);
- if(ocluster.size() <= 1 || ocluster.isNoise()) {
- switch(noiseOption){
- case IGNORE_NOISE:
- continue; // Ignore this cluster.
- case TREAT_NOISE_AS_SINGLETONS:
- case MERGE_NOISE:
- break; // Treat like a cluster
- }
- }
- for(DBIDIter it2 = ocluster.getIDs().iter(); it2.valid(); it2.advance()) {
- if(DBIDUtil.compare(it1, it2) <= 0) { // Only once.
- continue;
- }
- double dist = dq.distance(obj, rel.get(it2));
- pairDists.add(dist);
- if(ocluster == cluster) { // Within-cluster distances.
- theta += dist;
- w++;
- }
+ w += (cluster.size() * (cluster.size() - 1)) >>> 1;
+ }
+
+ double theta = 0.; // Sum of within-cluster distances
+ double min = 0, max = 0; // Sum of larges and smallest
+ if(w <= (rel.size() * (rel.size() - 1L)) >>> 2) {
+ DoubleHeap maxDists = new DoubleMinHeap(w); // Careful: REALLY minHeap!
+ DoubleHeap minDists = new DoubleMaxHeap(w); // Careful: REALLY maxHeap!
+
+ FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Processing clusters for C-Index", clusters.size(), LOG) : null;
+ for(int i = 0; i < clusters.size(); i++) {
+ Cluster<?> cluster = clusters.get(i);
+ if(cluster.size() <= 1 || cluster.isNoise()) {
+ switch(noiseOption){
+ case IGNORE_NOISE:
+ LOG.incrementProcessed(prog);
+ continue; // Ignore
+ case TREAT_NOISE_AS_SINGLETONS:
+ processSingleton(cluster, rel, dq, maxDists, minDists, w);
+ LOG.incrementProcessed(prog);
+ continue;
+ case MERGE_NOISE:
+ break; // Treat like a cluster, below
}
}
+ theta += processCluster(cluster, clusters, i, dq, maxDists, minDists, w);
+ LOG.incrementProcessed(prog);
}
- }
+ LOG.ensureCompleted(prog);
- // Simulate best and worst cases:
- pairDists.sort();
- double min = 0, max = 0;
- for(int i = 0, j = pairDists.size() - 1; i < w; i++, j--) {
- min += pairDists.get(i);
- max += pairDists.get(j);
+ // Simulate best and worst cases:
+ assert (minDists.size() == w);
+ assert (maxDists.size() == w);
+ for(DoubleHeap.UnsortedIter it = minDists.unsortedIter(); it.valid(); it.advance()) {
+ min += it.get();
+ }
+ for(DoubleHeap.UnsortedIter it = maxDists.unsortedIter(); it.valid(); it.advance()) {
+ max += it.get();
+ }
+ assert (max >= min);
+ }
+ else {
+ // Since we have fewer cross-cluster distances than within-cluster
+ // distances, min=max and cIndex = 0.
+ theta = min = max = 0;
}
double cIndex = (max > min) ? (theta - min) / (max - min) : 0.;
@@ -189,6 +200,52 @@ public class EvaluateCIndex<O> implements Evaluator {
return cIndex;
}
+ protected double processCluster(Cluster<?> cluster, List<? extends Cluster<?>> clusters, int i, DistanceQuery<O> dq, DoubleHeap maxDists, DoubleHeap minDists, int w) {
+ double theta = 0.;
+ for(DBIDIter it1 = cluster.getIDs().iter(); it1.valid(); it1.advance()) {
+ // Compare object to every cluster, but only once
+ for(int j = i; j < clusters.size(); j++) {
+ Cluster<?> ocluster = clusters.get(j);
+ if(ocluster.size() <= 1 || ocluster.isNoise()) {
+ switch(noiseOption){
+ case IGNORE_NOISE:
+ continue; // Ignore this cluster.
+ case TREAT_NOISE_AS_SINGLETONS:
+ break; // Treat like a cluster
+ case MERGE_NOISE:
+ break; // Treat like a cluster
+ }
+ }
+ for(DBIDIter it2 = ocluster.getIDs().iter(); it2.valid(); it2.advance()) {
+ if(DBIDUtil.compare(it1, it2) <= 0) { // Only once.
+ continue;
+ }
+ double dist = dq.distance(it1, it2);
+ minDists.add(dist, w);
+ maxDists.add(dist, w);
+ if(ocluster == cluster) { // Within-cluster distances.
+ theta += dist;
+ }
+ }
+ }
+ }
+ return theta;
+ }
+
+ protected void processSingleton(Cluster<?> cluster, Relation<? extends O> rel, DistanceQuery<O> dq, DoubleHeap maxDists, DoubleHeap minDists, int w) {
+ // All other objects are in other clusters!
+ for(DBIDIter it1 = cluster.getIDs().iter(); it1.valid(); it1.advance()) {
+ for(DBIDIter it2 = rel.iterDBIDs(); it2.valid(); it2.advance()) {
+ if(DBIDUtil.compare(it1, it2) <= 0) { // Only once.
+ continue;
+ }
+ double dist = dq.distance(it1, it2);
+ minDists.add(dist, w);
+ maxDists.add(dist, w);
+ }
+ }
+ }
+
@Override
public void processNewResult(ResultHierarchy hier, Result result) {
List<Clustering<?>> crs = ResultUtil.getClusteringResults(result);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateConcordantPairs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateConcordantPairs.java
index c5d2c199..119e9006 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateConcordantPairs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateConcordantPairs.java
@@ -73,6 +73,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
@@ -312,7 +313,7 @@ public class EvaluateConcordantPairs<O> implements Evaluator {
/**
* Parameter for the option, how noise should be treated.
*/
- public static final OptionID NOISE_ID = new OptionID("davies-bouldin.noisehandling", "option, how noise should be treated.");
+ public static final OptionID NOISE_ID = new OptionID("concordant-pairs.noisehandling", "Control how noise should be treated.");
/**
* Distance function to use.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateDaviesBouldin.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateDaviesBouldin.java
index ddeef150..d652a13a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateDaviesBouldin.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateDaviesBouldin.java
@@ -63,6 +63,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Stephan Baier
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluatePBMIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluatePBMIndex.java
index 2c3a20e0..5a893887 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluatePBMIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluatePBMIndex.java
@@ -67,6 +67,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSilhouette.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSilhouette.java
index b40e6086..257ff1ea 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSilhouette.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSilhouette.java
@@ -92,6 +92,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* TODO: keep all silhouette values, and allow visualization!
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSimplifiedSilhouette.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSimplifiedSilhouette.java
index a3f7e889..7ae8193c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSimplifiedSilhouette.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSimplifiedSilhouette.java
@@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSquaredErrors.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSquaredErrors.java
index eec64fc4..0ea8cbf8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSquaredErrors.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSquaredErrors.java
@@ -87,6 +87,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* by k-means.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateVarianceRatioCriteria.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateVarianceRatioCriteria.java
index a48a410c..e8935593 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateVarianceRatioCriteria.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateVarianceRatioCriteria.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/NoiseHandling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/NoiseHandling.java
index 7145ed94..759636d8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/NoiseHandling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/NoiseHandling.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.evaluation.clustering.internal;
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.7.0
*/
public enum NoiseHandling {
/** Merge all noise into a cluster */
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/ClusterPairSegmentAnalysis.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/ClusterPairSegmentAnalysis.java
index 08d92c28..50deb3ce 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/ClusterPairSegmentAnalysis.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/ClusterPairSegmentAnalysis.java
@@ -29,17 +29,31 @@ import de.lmu.ifi.dbs.elki.evaluation.Evaluator;
import de.lmu.ifi.dbs.elki.result.Result;
import de.lmu.ifi.dbs.elki.result.ResultHierarchy;
import de.lmu.ifi.dbs.elki.result.ResultUtil;
+import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
/**
* Evaluate clustering results by building segments for their pairs: shared
* pairs and differences.
*
+ * Reference:
+ * <p>
+ * Evaluation of Clusterings – Metrics and Visual Support<br />
+ * Elke Achtert, Sascha Goldhofer, Hans-Peter Kriegel, Erich Schubert, Arthur
+ * Zimek<br />
+ * In: Proc. 28th International Conference on Data Engineering (ICDE) 2012
+ * </p>
+ *
* @author Sascha Goldhofer
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.uses Clustering
* @apiviz.uses Segments
*/
+@Reference(title = "Evaluation of Clusterings – Metrics and Visual Support", //
+authors = "Elke Achtert, Sascha Goldhofer, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", //
+booktitle = "Proc. 28th International Conference on Data Engineering (ICDE) 2012", //
+url = "http://dx.doi.org/10.1109/ICDE.2012.128")
public class ClusterPairSegmentAnalysis implements Evaluator {
/**
* Constructor.
@@ -55,7 +69,7 @@ public class ClusterPairSegmentAnalysis implements Evaluator {
public void processNewResult(ResultHierarchy hier, Result result) {
// Get all new clusterings
// TODO: handle clusterings added later, too. Can we update the result?
-
+
List<Clustering<?>> clusterings = ResultUtil.getClusteringResults(result);
// Abort if not enough clusterings to compare
if(clusterings.size() < 2) {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segment.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segment.java
index 1ed31b03..4df28760 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segment.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segment.java
@@ -33,6 +33,10 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
*
* As such, for each ring (= clustering), a cluster number (or the constant
* {@link #UNCLUSTERED}) is stored.
+ *
+ * @author Sascha Goldhofer
+ * @author Erich Schubert
+ * @since 0.5.0
*/
public class Segment implements Comparable<Segment> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segments.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segments.java
index 8b91d5f6..5b59b17f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segments.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segments.java
@@ -59,8 +59,8 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* a corresponding object Segment.
* </p>
*
+ * Reference:
* <p>
- * Reference:<br />
* Evaluation of Clusterings – Metrics and Visual Support<br />
* Elke Achtert, Sascha Goldhofer, Hans-Peter Kriegel, Erich Schubert, Arthur
* Zimek<br />
@@ -68,17 +68,21 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* <p>
- * Details on the experimental setup can be found at: <a
- * href="http://elki.dbs.ifi.lmu.de/wiki/Examples/ClusterEvaluation"
- * >wiki/Examples/ClusterEvaluation</a>
+ * Details on the experimental setup can be found at:
+ * <a href="http://elki.dbs.ifi.lmu.de/wiki/Examples/ClusterEvaluation" >wiki/
+ * Examples/ClusterEvaluation</a>
* </p>
*
* @author Sascha Goldhofer
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.composedOf Segment
*/
-@Reference(title = "Evaluation of Clusterings – Metrics and Visual Support", authors = "Elke Achtert, Sascha Goldhofer, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", booktitle = "Proc. 28th International Conference on Data Engineering (ICDE) 2012", url = "http://dx.doi.org/10.1109/ICDE.2012.128")
+@Reference(title = "Evaluation of Clusterings – Metrics and Visual Support", //
+authors = "Elke Achtert, Sascha Goldhofer, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", //
+booktitle = "Proc. 28th International Conference on Data Engineering (ICDE) 2012", //
+url = "http://dx.doi.org/10.1109/ICDE.2012.128")
public class Segments extends BasicResult implements Iterable<Segment> {
/**
* Class logger
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/histogram/ComputeOutlierHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/histogram/ComputeOutlierHistogram.java
index 8a6bd542..64a1ce3c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/histogram/ComputeOutlierHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/histogram/ComputeOutlierHistogram.java
@@ -66,6 +66,7 @@ import de.lmu.ifi.dbs.elki.utilities.scaling.outlier.OutlierScalingFunction;
*
* @author Lisa Reichert
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.landmark
* @apiviz.uses OutlierResult
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexPurity.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexPurity.java
index bde4eaa3..30d3590d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexPurity.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexPurity.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.DatabaseUtil;
* capabilities using the Gini index.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class IndexPurity implements Evaluator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexStatistics.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexStatistics.java
index a137b455..5e01462f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexStatistics.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexStatistics.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* information.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.has IndexMetaResult oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/JudgeOutlierScores.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/JudgeOutlierScores.java
index 6674293d..6c84be65 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/JudgeOutlierScores.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/JudgeOutlierScores.java
@@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.scaling.outlier.OutlierScalingFunction;
* hits.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.has ScoreResult oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionAtKCurve.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionAtKCurve.java
index 3ce0e782..a52b829a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionAtKCurve.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionAtKCurve.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* method.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has PrecisionAtKCurve
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionRecallCurve.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionRecallCurve.java
index 3b1d7375..576a0c9b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionRecallCurve.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionRecallCurve.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* method.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has PRCurve
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierROCCurve.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierROCCurve.java
index f0ebcd88..540cba6d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierROCCurve.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierROCCurve.java
@@ -62,13 +62,15 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* clustering obtained via the given class label.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*
* @apiviz.uses OutlierResult
* @apiviz.has ROCResult oneway - - «create»
*/
-@Alias({ "ComputeROCCurve", "de.lmu.ifi.dbs.elki.evaluation.roc.ComputeROCCurve" })
+@Alias({ "de.lmu.ifi.dbs.elki.evaluation.roc.ComputeROCCurve", //
+"de.lmu.ifi.dbs.elki.evaluation.ComputeROCCurve" })
public class OutlierROCCurve implements Evaluator {
/**
* The label we use for marking ROCAUC values.
@@ -142,7 +144,8 @@ public class OutlierROCCurve implements Evaluator {
if(nonefound) {
return;
- // logger.warning("No results found to process with ROC curve analyzer. Got "+iterables.size()+" iterables, "+orderings.size()+" orderings.");
+ // logger.warning("No results found to process with ROC curve analyzer.
+ // Got "+iterables.size()+" iterables, "+orderings.size()+" orderings.");
}
}
@@ -209,6 +212,7 @@ public class OutlierROCCurve implements Evaluator {
* </p>
*/
public static final OptionID POSITIVE_CLASS_NAME_ID = new OptionID("rocauc.positive", "Class label for the 'positive' class.");
+
/**
* Pattern for positive class.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierRankingEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierRankingEvaluation.java
index 43612178..407b4ec9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierRankingEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierRankingEvaluation.java
@@ -57,6 +57,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* Evaluate outlier scores by their ranking
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierSmROCCurve.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierSmROCCurve.java
index b39211df..49ff1a42 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierSmROCCurve.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierSmROCCurve.java
@@ -67,6 +67,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.uses OutlierResult
* @apiviz.has SmROCResult oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierThresholdClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierThresholdClustering.java
index 9220d06e..9993e457 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierThresholdClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierThresholdClustering.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.scaling.outlier.OutlierScalingFunction;
* dataset.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class OutlierThresholdClustering implements Evaluator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AbstractScoreEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AbstractScoreEvaluation.java
index 9f8e66df..bebb3e71 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AbstractScoreEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AbstractScoreEvaluation.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
* Abstract base class for evaluating a scoring result.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public abstract class AbstractScoreEvaluation implements ScoreEvaluation {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AveragePrecisionEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AveragePrecisionEvaluation.java
index fadcb3cf..51fe6c59 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AveragePrecisionEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AveragePrecisionEvaluation.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Evaluate using average precision.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class AveragePrecisionEvaluation extends AbstractScoreEvaluation {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/MaximumF1Evaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/MaximumF1Evaluation.java
index dce8a84b..4d96eaaa 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/MaximumF1Evaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/MaximumF1Evaluation.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Evaluate using the maximum F1 score.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class MaximumF1Evaluation extends AbstractScoreEvaluation {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/PrecisionAtKEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/PrecisionAtKEvaluation.java
index 3850dd3a..ba6786b9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/PrecisionAtKEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/PrecisionAtKEvaluation.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* (BEP).
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class PrecisionAtKEvaluation extends AbstractScoreEvaluation {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ROCEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ROCEvaluation.java
index 32551238..416ecda1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ROCEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ROCEvaluation.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* has been used the wrong way, and should be used backwards.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has XYCurve
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ScoreEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ScoreEvaluation.java
index 2f989609..053033e9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ScoreEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ScoreEvaluation.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter;
* Compute ranking/scoring based evaluation measures.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has ScoreIter
* @apiviz.uses Predicate
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/AbstractVectorIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/AbstractVectorIter.java
index f75844a0..70e6618c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/AbstractVectorIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/AbstractVectorIter.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.ArrayIter;
* Class to iterate over a number vector in decreasing order.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NumberVector
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDRefIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDRefIter.java
index 3b246327..918a235c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDRefIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDRefIter.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* A score iterator wrapping a DBIDRef object.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface DBIDRefIter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDsTest.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDsTest.java
index 9e1b29e9..d1c65fbe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDsTest.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDsTest.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.evaluation.scores.ScoreEvaluation.Predicate;
* @apiviz.composedOf DBIDs
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class DBIDsTest implements Predicate<DBIDRefIter> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DecreasingVectorIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DecreasingVectorIter.java
index 953f656c..9da00a3e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DecreasingVectorIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DecreasingVectorIter.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arrays.IntegerComparator;
* Class to iterate over a number vector in decreasing order.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NumberVector
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DistanceResultAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DistanceResultAdapter.java
index cd1a5142..53a165ba 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DistanceResultAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DistanceResultAdapter.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.evaluation.scores.ScoreEvaluation.ScoreIter;
* ties.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf DoubleDBIDListIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/FilteredDistanceResultAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/FilteredDistanceResultAdapter.java
index 28c23251..4309e138 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/FilteredDistanceResultAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/FilteredDistanceResultAdapter.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDListIter;
* appropriately, the score is only used to detect ties.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class FilteredDistanceResultAdapter extends DistanceResultAdapter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/IncreasingVectorIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/IncreasingVectorIter.java
index 091a6fa1..d94c2990 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/IncreasingVectorIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/IncreasingVectorIter.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arrays.IntegerComparator;
* Class to iterate over a number vector in decreasing order.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NumberVector
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/OutlierScoreAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/OutlierScoreAdapter.java
index 6dcf516a..3ff35876 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/OutlierScoreAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/OutlierScoreAdapter.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
* The ROC values would be incorrect then anyway!
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf OutlierResult
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/SimpleAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/SimpleAdapter.java
index e91f0f6d..681cdcdd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/SimpleAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/SimpleAdapter.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.evaluation.scores.ScoreEvaluation.ScoreIter;
* The ROC values would be incorrect then anyway!
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf DBIDIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorNonZero.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorNonZero.java
index 343fa662..52753243 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorNonZero.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorNonZero.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.data.NumberVector;
* @apiviz.composedOf NumberVector
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class VectorNonZero extends VectorOverThreshold {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorOverThreshold.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorOverThreshold.java
index e35db2ee..b77df57b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorOverThreshold.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorOverThreshold.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.evaluation.scores.ScoreEvaluation.Predicate;
* @apiviz.composedOf NumberVector
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class VectorOverThreshold implements Predicate<AbstractVectorIter> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorZero.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorZero.java
index 08e694f9..aeead25b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorZero.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorZero.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.evaluation.scores.ScoreEvaluation.Predicate;
* @apiviz.composedOf NumberVector
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class VectorZero implements Predicate<IncreasingVectorIter> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/similaritymatrix/ComputeSimilarityMatrixImage.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/similaritymatrix/ComputeSimilarityMatrixImage.java
index d7883620..a5cf462c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/similaritymatrix/ComputeSimilarityMatrixImage.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/similaritymatrix/ComputeSimilarityMatrixImage.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.scaling.ScalingFunction;
* Compute a similarity matrix for a distance function.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has SimilarityMatrix oneway - - «create»
*