diff options
Diffstat (limited to 'elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra')
63 files changed, 174 insertions, 109 deletions
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/AffineTransformation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/AffineTransformation.java index 74b19d2c..e00e3802 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/AffineTransformation.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/AffineTransformation.java @@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * transformation. * * @author Erich Schubert + * @since 0.2 * * @apiviz.composedOf Matrix * @apiviz.uses Matrix diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Centroid.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Centroid.java index 2e7ba977..dfc0f2a2 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Centroid.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Centroid.java @@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.database.relation.RelationUtil; * easier to use APIs. * * @author Erich Schubert + * @since 0.4.0 */ public class Centroid extends Vector { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CholeskyDecomposition.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CholeskyDecomposition.java index ef0d5ef7..ce0f8ab0 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CholeskyDecomposition.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CholeskyDecomposition.java @@ -23,7 +23,6 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra; along with this program. If not, see <http://www.gnu.org/licenses/>. */ - /** * Cholesky Decomposition. * <P> @@ -34,6 +33,9 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra; * a partial decomposition and sets an internal flag that may be queried by the * isSPD() method. * + * @author Arthur Zimek + * @since 0.2 + * * @apiviz.uses Matrix - - transforms */ @SuppressWarnings("serial") diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CovarianceMatrix.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CovarianceMatrix.java index 1e40430f..566e0e11 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CovarianceMatrix.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CovarianceMatrix.java @@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.database.relation.RelationUtil; * stabilized covariance matrix builder! * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.uses Vector oneway * @apiviz.uses NumberVector oneway diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenPair.java index f2d6cec3..df4da275 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenPair.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenPair.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.FormatUtil; * eigenvalue. This class is used to sort eigenpairs. * * @author Elke Achtert + * @since 0.2 * * @apiviz.composedOf Matrix */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenvalueDecomposition.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenvalueDecomposition.java index fde453c6..88ab0688 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenvalueDecomposition.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenvalueDecomposition.java @@ -39,7 +39,10 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * the eigenvectors in the sense that A*V = V*D, i.e. A.times(V) equals * V.times(D). The matrix V may be badly conditioned, or even singular, so the * validity of the equation A = V*D*inverse(V) depends upon V.cond(). - * + * + * @author Arthur Zimek + * @since 0.2 + * * @apiviz.uses Matrix - - transforms */ public class EigenvalueDecomposition implements java.io.Serializable { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LUDecomposition.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LUDecomposition.java index be33769e..361e315e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LUDecomposition.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LUDecomposition.java @@ -36,6 +36,9 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra; * decomposition is in the solution of square systems of simultaneous linear * equations. This will fail if isNonsingular() returns false. * + * @author Arthur Zimek + * @since 0.2 + * * @apiviz.uses Matrix - - transforms */ public class LUDecomposition implements java.io.Serializable { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LinearEquationSystem.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LinearEquationSystem.java index da723177..3d273520 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LinearEquationSystem.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LinearEquationSystem.java @@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.IntIntPair; * Class for systems of linear equations. * * @author Elke Achtert + * @since 0.2 */ public class LinearEquationSystem { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Matrix.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Matrix.java index cb828e50..9f6ecde9 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Matrix.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Matrix.java @@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.DoubleArray; * * @author Elke Achtert * @author Erich Schubert + * @since 0.2 * * @apiviz.uses Vector * @apiviz.landmark diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java index cc850ce4..b519ca9e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java @@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil; * easier to use APIs. * * @author Erich Schubert + * @since 0.4.0 */ public class ProjectedCentroid extends Centroid { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectionResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectionResult.java index ca1c05c2..67958078 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectionResult.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectionResult.java @@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra; * This can either come from a full PCA, or just from an axis-parallel subspace selection * * @author Erich Schubert + * @since 0.4.0 */ // TODO: cleanup public interface ProjectionResult { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/QRDecomposition.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/QRDecomposition.java index 541987e7..be07df37 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/QRDecomposition.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/QRDecomposition.java @@ -36,6 +36,9 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * decomposition is in the least squares solution of nonsquare systems of * simultaneous linear equations. This will fail if isFullRank() returns false. * + * @author Arthur Zimek + * @since 0.2 + * * @apiviz.uses Matrix - - transforms */ public class QRDecomposition implements java.io.Serializable { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SingularValueDecomposition.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SingularValueDecomposition.java index 6b311ed1..2514acc6 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SingularValueDecomposition.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SingularValueDecomposition.java @@ -39,6 +39,9 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * fail. The matrix condition number and the effective numerical rank can be * computed from this decomposition. * + * @author Arthur Zimek + * @since 0.2 + * * @apiviz.uses Matrix - - transforms */ public class SingularValueDecomposition { @@ -326,7 +329,7 @@ public class SingularValueDecomposition { // Perform the task indicated by kase. switch(kase){ - + // Deflate negligible s(p). case 1: { double f = e[p - 2]; diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SortedEigenPairs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SortedEigenPairs.java index a4cca9de..e028793c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SortedEigenPairs.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SortedEigenPairs.java @@ -33,6 +33,7 @@ import java.util.List; * eigenvectors (and -values). * * @author Elke Achtert + * @since 0.2 * * @apiviz.composedOf de.lmu.ifi.dbs.elki.math.linearalgebra.EigenPair */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/VMath.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/VMath.java index a6d4ea77..31456eff 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/VMath.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/VMath.java @@ -31,6 +31,7 @@ import java.util.Arrays; * usage and VM overhead. * * @author Erich Schubert + * @since 0.5.0 * * @apiviz.landmark */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Vector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Vector.java index 06198e4a..80e7e219 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Vector.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Vector.java @@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer; * A mathematical vector object, along with mathematical operations. * * @author Elke Achtert + * @since 0.2 * * @apiviz.landmark */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunction.java index a0da0c7b..13aa185a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunction.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunction.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.fitting; * Interface for a function used in Levenberg-Marquard-Fitting * * @author Erich Schubert + * @since 0.2 */ public interface FittingFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunctionResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunctionResult.java index bf17e4c3..52f340a8 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunctionResult.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunctionResult.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.fitting; * Result returned by a fitting function. * * @author Erich Schubert + * @since 0.2 */ public class FittingFunctionResult { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/GaussianFittingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/GaussianFittingFunction.java index 6cdcff18..7d12cdff 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/GaussianFittingFunction.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/GaussianFittingFunction.java @@ -58,6 +58,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * number of parameters (which obviously needs to be a multiple of 3) * * @author Erich Schubert + * @since 0.2 */ public class GaussianFittingFunction implements FittingFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/LevenbergMarquardtMethod.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/LevenbergMarquardtMethod.java index b77f3b79..0ca9a643 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/LevenbergMarquardtMethod.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/LevenbergMarquardtMethod.java @@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.LinearEquationSystem; * Which supposedly offers increased robustness. * * @author Erich Schubert + * @since 0.2 * * @apiviz.has FittingFunction * @apiviz.uses FittingFunctionResult oneway - - «create» diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/AbstractCovarianceMatrixBuilder.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/AbstractCovarianceMatrixBuilder.java index 8190eea5..3874b91b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/AbstractCovarianceMatrixBuilder.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/AbstractCovarianceMatrixBuilder.java @@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix; * Mostly the specification of an interface. * * @author Erich Schubert + * @since 0.2 */ public abstract class AbstractCovarianceMatrixBuilder implements CovarianceMatrixBuilder { @Override diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CompositeEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CompositeEigenPairFilter.java index c56217f8..bd88dcb8 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CompositeEigenPairFilter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CompositeEigenPairFilter.java @@ -36,15 +36,11 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectListParamet * eigenpair filters. * * @author Elke Achtert + * @since 0.2 */ // todo parameter comments public class CompositeEigenPairFilter implements EigenPairFilter { /** - * The list of filters to use. - */ - public static final OptionID EIGENPAIR_FILTER_COMPOSITE_LIST = new OptionID("pca.filter.composite.list", "A comma separated list of the class names of the filters to be used. " + "The specified filters will be applied sequentially in the given order."); - - /** * The filters to be applied. */ private List<EigenPairFilter> filters; @@ -86,6 +82,10 @@ public class CompositeEigenPairFilter implements EigenPairFilter { */ public static class Parameterizer extends AbstractParameterizer { /** + * The list of filters to use. + */ + public static final OptionID EIGENPAIR_FILTER_COMPOSITE_LIST = new OptionID("pca.filter.composite.list", "A comma separated list of the class names of the filters to be used. " + "The specified filters will be applied sequentially in the given order."); + /** * The filters to be applied. */ private List<EigenPairFilter> filters = null; diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CovarianceMatrixBuilder.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CovarianceMatrixBuilder.java index e3d10297..c2b40a85 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CovarianceMatrixBuilder.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CovarianceMatrixBuilder.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix; * Interface for computing covariance matrixes on a data set. * * @author Erich Schubert + * @since 0.2 */ public interface CovarianceMatrixBuilder { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/DropEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/DropEigenPairFilter.java index 7d642b86..40a171df 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/DropEigenPairFilter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/DropEigenPairFilter.java @@ -37,16 +37,17 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; /** * The "drop" filter looks for the largest drop in normalized relative * eigenvalues. - * + * * Let s_1 .. s_n be the eigenvalues. - * + * * Let a_k := 1/(n-k) sum_{i=k..n} s_i - * + * * Then r_k := s_k / a_k is the relative eigenvalue. - * + * * The drop filter searches for argmax_k r_k / r_{k+1} - * + * * @author Erich Schubert + * @since 0.2 */ @Title("Drop EigenPair Filter") public class DropEigenPairFilter implements EigenPairFilter { @@ -63,7 +64,7 @@ public class DropEigenPairFilter implements EigenPairFilter { /** * Constructor. - * + * * @param walpha */ public DropEigenPairFilter(double walpha) { @@ -121,9 +122,9 @@ public class DropEigenPairFilter implements EigenPairFilter { /** * Parameterization class. - * + * * @author Erich Schubert - * + * * @apiviz.exclude */ public static class Parameterizer extends AbstractParameterizer { @@ -132,7 +133,7 @@ public class DropEigenPairFilter implements EigenPairFilter { @Override protected void makeOptions(Parameterization config) { super.makeOptions(config); - DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA); + DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.Parameterizer.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA); walphaP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE); if (config.grab(walphaP)) { walpha = walphaP.getValue(); diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/EigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/EigenPairFilter.java index b0a244f6..7b3886e5 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/EigenPairFilter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/EigenPairFilter.java @@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.SortedEigenPairs; * and weak eigenpairs having small variances. * * @author Elke Achtert + * @since 0.2 * * @apiviz.uses SortedEigenPairs oneway - - reads * @apiviz.uses FilteredEigenPairs oneway - - «create» diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FilteredEigenPairs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FilteredEigenPairs.java index b8343a24..fcc09c7c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FilteredEigenPairs.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FilteredEigenPairs.java @@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.EigenPair; * by an eigenpair filter. * * @author Elke Achtert + * @since 0.2 * * @apiviz.has EigenPair */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FirstNEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FirstNEigenPairFilter.java index d2251f28..ca7d288e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FirstNEigenPairFilter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FirstNEigenPairFilter.java @@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter; * eigenpairs, where n is a user specified number. * * @author Elke Achtert + * @since 0.2 */ // todo parameter comments @Title("First n Eigenpair filter") @@ -53,11 +54,6 @@ public class FirstNEigenPairFilter implements EigenPairFilter { private static final Logging LOG = Logging.getLogger(FirstNEigenPairFilter.class); /** - * Paremeter n - */ - public static final OptionID EIGENPAIR_FILTER_N = new OptionID("pca.filter.n", "The number of strong eigenvectors: n eigenvectors with the n highest" + "eigenvalues are marked as strong eigenvectors."); - - /** * The threshold for strong eigenvectors: n eigenvectors with the n highest * eigenvalues are marked as strong eigenvectors. */ @@ -114,6 +110,10 @@ public class FirstNEigenPairFilter implements EigenPairFilter { */ public static class Parameterizer extends AbstractParameterizer { /** + * Paremeter n + */ + public static final OptionID EIGENPAIR_FILTER_N = new OptionID("pca.filter.n", "The number of strong eigenvectors: n eigenvectors with the n highest" + "eigenvalues are marked as strong eigenvectors."); + /** * The number of eigenpairs to keep. */ protected int n = 0; diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/LimitEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/LimitEigenPairFilter.java index 779ceb2e..a4047473 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/LimitEigenPairFilter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/LimitEigenPairFilter.java @@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag; * others are marked as strong eigenpairs. * * @author Elke Achtert + * @since 0.2 */ @Title("Limit-based Eigenpair Filter") @Description("Filters all eigenpairs, which are lower than a given value.") @@ -58,16 +59,6 @@ public class LimitEigenPairFilter implements EigenPairFilter { private static final Logging LOG = Logging.getLogger(LimitEigenPairFilter.class); /** - * "absolute" Flag - */ - public static final OptionID EIGENPAIR_FILTER_ABSOLUTE = new OptionID("pca.filter.absolute", "Flag to mark delta as an absolute value."); - - /** - * Parameter delta - */ - public static final OptionID EIGENPAIR_FILTER_DELTA = new OptionID("pca.filter.delta", "The threshold for strong Eigenvalues. If not otherwise specified, delta " + "is a relative value w.r.t. the (absolute) highest Eigenvalues and has to be " + "a double between 0 and 1. To mark delta as an absolute value, use " + "the option -" + EIGENPAIR_FILTER_ABSOLUTE.getName() + "."); - - /** * The default value for delta. */ public static final double DEFAULT_DELTA = 0.01; @@ -154,6 +145,16 @@ public class LimitEigenPairFilter implements EigenPairFilter { */ public static class Parameterizer extends AbstractParameterizer { /** + * "absolute" Flag + */ + public static final OptionID EIGENPAIR_FILTER_ABSOLUTE = new OptionID("pca.filter.absolute", "Flag to mark delta as an absolute value."); + + /** + * Parameter delta + */ + public static final OptionID EIGENPAIR_FILTER_DELTA = new OptionID("pca.filter.delta", "The threshold for strong Eigenvalues. If not otherwise specified, delta " + "is a relative value w.r.t. the (absolute) highest Eigenvalues and has to be " + "a double between 0 and 1. To mark delta as an absolute value, use " + "the option -" + EIGENPAIR_FILTER_ABSOLUTE.getName() + "."); + + /** * Threshold for strong eigenpairs, can be absolute or relative. */ private double delta; diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/NormalizingEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/NormalizingEigenPairFilter.java index fb95a68c..9f77f747 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/NormalizingEigenPairFilter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/NormalizingEigenPairFilter.java @@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title; * eigenvector> * eigenvalue = 1, where <,> is the standard dot product * * @author Simon Paradies + * @since 0.2 */ @Title("Perecentage based Eigenpair filter") @Description("Normalizes all eigenpairs, consisting of eigenvalue e and eigenvector v such that <v,v> * e = 1, where <,> is the standard dot product.") diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredAutotuningRunner.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredAutotuningRunner.java index 600fcf95..4abd1c6d 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredAutotuningRunner.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredAutotuningRunner.java @@ -55,6 +55,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * exhibit the clearest correlation. * * @author Erich Schubert + * @since 0.5.0 */ @Reference(authors = "Hans-Peter Kriegel, Peer Kröger, Erich Schubert, Arthur Zimek", // title = "A General Framework for Increasing the Robustness of PCA-based Correlation Clustering Algorithms",// diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredResult.java index f7ec9e79..1b7d6910 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredResult.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredResult.java @@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.SortedEigenPairs; * subspace and an "error" subspace. * * @author Erich Schubert + * @since 0.2 * * @apiviz.landmark */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredRunner.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredRunner.java index e7c31cf6..d61c7830 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredRunner.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredRunner.java @@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter; * regular runner, but afterwards, an {@link EigenPairFilter} is applied. * * @author Erich Schubert + * @since 0.2 * * @apiviz.landmark * @apiviz.has PCAFilteredResult oneway - - «create» diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAResult.java index 4c0de355..72268972 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAResult.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAResult.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.SortedEigenPairs; * Result class for Principal Component Analysis with some convenience methods * * @author Erich Schubert + * @since 0.2 * * @apiviz.landmark * @apiviz.has SortedEigenPairs diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCARunner.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCARunner.java index bdd4f32f..c4195506 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCARunner.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCARunner.java @@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter; * to a weighted covariance matrix builder) * * @author Erich Schubert + * @since 0.2 * * @apiviz.landmark * @apiviz.uses PCAResult oneway - - «create» @@ -53,18 +54,6 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter; */ public class PCARunner { /** - * Parameter to specify the class to compute the covariance matrix, must be a - * subclass of {@link CovarianceMatrixBuilder}. - * <p> - * Default value: {@link CovarianceMatrixBuilder} - * </p> - * <p> - * Key: {@code -pca.covariance} - * </p> - */ - public static final OptionID PCA_COVARIANCE_MATRIX = new OptionID("pca.covariance", "Class used to compute the covariance matrix."); - - /** * The covariance computation class. */ protected CovarianceMatrixBuilder covarianceMatrixBuilder; @@ -161,6 +150,17 @@ public class PCARunner { */ public static class Parameterizer extends AbstractParameterizer { /** + * Parameter to specify the class to compute the covariance matrix, must be a + * subclass of {@link CovarianceMatrixBuilder}. + * <p> + * Default value: {@link CovarianceMatrixBuilder} + * </p> + * <p> + * Key: {@code -pca.covariance} + * </p> + */ + public static final OptionID PCA_COVARIANCE_MATRIX = new OptionID("pca.covariance", "Class used to compute the covariance matrix."); + /** * The covariance computation class. */ protected CovarianceMatrixBuilder covarianceMatrixBuilder; diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PercentageEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PercentageEigenPairFilter.java index c32ad6fc..8b445b97 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PercentageEigenPairFilter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PercentageEigenPairFilter.java @@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * eigenpairs. * * @author Elke Achtert + * @since 0.2 */ @Title("Percentage based Eigenpair filter") @Description("Sorts the eigenpairs in decending order of their eigenvalues and returns the first eigenpairs, whose sum of eigenvalues is higher than the given percentage of the sum of all eigenvalues.") @@ -54,18 +55,6 @@ public class PercentageEigenPairFilter implements EigenPairFilter { private static final Logging LOG = Logging.getLogger(PercentageEigenPairFilter.class); /** - * The threshold for 'strong' eigenvectors: the 'strong' eigenvectors explain - * a portion of at least alpha of the total variance. - * <p> - * Default value: {@link #DEFAULT_ALPHA} - * </p> - * <p> - * Key: {@code -pca.filter.alpha} - * </p> - */ - public static final OptionID ALPHA_ID = new OptionID("pca.filter.alpha", "The share (0.0 to 1.0) of variance that needs to be explained by the 'strong' eigenvectors." + "The filter class will choose the number of strong eigenvectors by this share."); - - /** * The default value for alpha. */ public static final double DEFAULT_ALPHA = 0.85; @@ -145,6 +134,17 @@ public class PercentageEigenPairFilter implements EigenPairFilter { */ public static class Parameterizer extends AbstractParameterizer { /** + * The threshold for 'strong' eigenvectors: the 'strong' eigenvectors explain + * a portion of at least alpha of the total variance. + * <p> + * Default value: {@link #DEFAULT_ALPHA} + * </p> + * <p> + * Key: {@code -pca.filter.alpha} + * </p> + */ + public static final OptionID ALPHA_ID = new OptionID("pca.filter.alpha", "The share (0.0 to 1.0) of variance that needs to be explained by the 'strong' eigenvectors." + "The filter class will choose the number of strong eigenvectors by this share."); + /** * The threshold for strong eigenvectors: the strong eigenvectors explain a * portion of at least alpha of the total variance. */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/ProgressiveEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/ProgressiveEigenPairFilter.java index 16b6d72e..242c00f4 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/ProgressiveEigenPairFilter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/ProgressiveEigenPairFilter.java @@ -46,48 +46,44 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * gives better results when clusters of different dimensionality exist, since * different percentage alpha levels might be appropriate for different * dimensionalities. - * + * * Example calculations of alpha levels: - * + * * In a 3D space, a progressive alpha value of 0.5 equals: - * + * * - 1D subspace: 50 % + 1/3 of remainder = 0.667 - * + * * - 2D subspace: 50 % + 2/3 of remainder = 0.833 - * + * * In a 4D space, a progressive alpha value of 0.5 equals: - * + * * - 1D subspace: 50% + 1/4 of remainder = 0.625 - * + * * - 2D subspace: 50% + 2/4 of remainder = 0.750 - * + * * - 3D subspace: 50% + 3/4 of remainder = 0.875 - * + * * Reasoning why this improves over PercentageEigenPairFilter: - * + * * In a 100 dimensional space, a single Eigenvector representing over 85% of the * total variance is highly significant, whereas the strongest 85 Eigenvectors * together will by definition always represent at least 85% of the variance. * PercentageEigenPairFilter can thus not be used with these parameters and * detect both dimensionalities correctly. - * + * * The second parameter introduced here, walpha, serves a different function: It * prevents the eigenpair filter to use a statistically weak Eigenvalue just to * reach the intended level, e.g. 84% + 1% >= 85% when 1% is statistically very * weak. - * + * * @author Erich Schubert - * + * @since 0.2 + * */ @Title("Progressive Eigenpair Filter") @Description("Sorts the eigenpairs in decending order of their eigenvalues and returns the first eigenpairs, whose sum of eigenvalues explains more than the a certain percentage of the unexpected variance, where the percentage increases with subspace dimensionality.") public class ProgressiveEigenPairFilter implements EigenPairFilter { /** - * Parameter progressive alpha. - */ - public static final OptionID EIGENPAIR_FILTER_PALPHA = new OptionID("pca.filter.progressivealpha", "The share (0.0 to 1.0) of variance that needs to be explained by the 'strong' eigenvectors." + "The filter class will choose the number of strong eigenvectors by this share."); - - /** * The default value for alpha. */ public static final double DEFAULT_PALPHA = 0.5; @@ -110,7 +106,7 @@ public class ProgressiveEigenPairFilter implements EigenPairFilter { /** * Constructor. - * + * * @param palpha palpha * @param walpha walpha */ @@ -177,13 +173,18 @@ public class ProgressiveEigenPairFilter implements EigenPairFilter { /** * Parameterization class. - * + * * @author Erich Schubert - * + * * @apiviz.exclude */ public static class Parameterizer extends AbstractParameterizer { /** + * Parameter progressive alpha. + */ + public static final OptionID EIGENPAIR_FILTER_PALPHA = new OptionID("pca.filter.progressivealpha", "The share (0.0 to 1.0) of variance that needs to be explained by the 'strong' eigenvectors." + "The filter class will choose the number of strong eigenvectors by this share."); + + /** * The threshold for strong eigenvectors: the strong eigenvectors explain a * portion of at least alpha of the total variance. */ @@ -204,7 +205,7 @@ public class ProgressiveEigenPairFilter implements EigenPairFilter { palpha = palphaP.getValue(); } - DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA); + DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.Parameterizer.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA); walphaP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE); if(config.grab(walphaP)) { walpha = walphaP.getValue(); diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RANSACCovarianceMatrixBuilder.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RANSACCovarianceMatrixBuilder.java index 291f91b6..5553936b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RANSACCovarianceMatrixBuilder.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RANSACCovarianceMatrixBuilder.java @@ -74,6 +74,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter; * </p> * * @author Erich Schubert + * @since 0.5.5 */ @Reference(authors = "Hans-Peter Kriegel, Peer Kröger, Erich Schubert, Arthur Zimek", // title = "Outlier Detection in Arbitrarily Oriented Subspaces", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RelativeEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RelativeEigenPairFilter.java index 54361c4f..3011a7d8 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RelativeEigenPairFilter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RelativeEigenPairFilter.java @@ -50,16 +50,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * dimensionalities. * * @author Erich Schubert + * @since 0.2 */ @Title("Relative EigenPair Filter") @Description("Sorts the eigenpairs in decending order of their eigenvalues and returns those eigenpairs, whose eigenvalue is " + "above the average ('expected') eigenvalue of the remaining eigenvectors.") public class RelativeEigenPairFilter implements EigenPairFilter { /** - * Parameter relative alpha. - */ - public static final OptionID EIGENPAIR_FILTER_RALPHA = new OptionID("pca.filter.relativealpha", "The sensitivity niveau for weak eigenvectors: An eigenvector which is at less than " + "the given share of the statistical average variance is considered weak."); - - /** * The default value for ralpha. */ public static final double DEFAULT_RALPHA = 1.1; @@ -123,6 +119,10 @@ public class RelativeEigenPairFilter implements EigenPairFilter { * @apiviz.exclude */ public static class Parameterizer extends AbstractParameterizer { + /** + * Parameter relative alpha. + */ + public static final OptionID EIGENPAIR_FILTER_RALPHA = new OptionID("pca.filter.relativealpha", "The sensitivity niveau for weak eigenvectors: An eigenvector which is at less than " + "the given share of the statistical average variance is considered weak."); protected double ralpha; @Override diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/SignificantEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/SignificantEigenPairFilter.java index dfc5347d..64dac360 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/SignificantEigenPairFilter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/SignificantEigenPairFilter.java @@ -39,18 +39,19 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * The SignificantEigenPairFilter sorts the eigenpairs in descending order of * their eigenvalues and chooses the contrast of an Eigenvalue to the remaining * Eigenvalues is maximal. - * + * * It is closely related to the WeakEigenPairFilter and RelativeEigenPairFilter. * But while the RelativeEigenPairFilter chooses the highest dimensionality that * satisfies the relative alpha levels, the SignificantEigenPairFilter will * chose the local dimensionality such that the 'contrast' is maximal. - * + * * There are some situations where one or the other is superior, especially when * it comes to handling nested clusters and strong global correlations that are * not too interesting. These benefits usually only make a difference at higher * dimensionalities. - * + * * @author Erich Schubert + * @since 0.2 */ @Title("Significant EigenPair Filter") @Description("Sorts the eigenpairs in decending order of their eigenvalues and looks for the maxmimum contrast of current Eigenvalue / average of remaining Eigenvalues.") @@ -68,7 +69,7 @@ public class SignificantEigenPairFilter implements EigenPairFilter { /** * Constructor. - * + * * @param walpha */ public SignificantEigenPairFilter(double walpha) { @@ -122,9 +123,9 @@ public class SignificantEigenPairFilter implements EigenPairFilter { /** * Parameterization class. - * + * * @author Erich Schubert - * + * * @apiviz.exclude */ public static class Parameterizer extends AbstractParameterizer { @@ -133,7 +134,7 @@ public class SignificantEigenPairFilter implements EigenPairFilter { @Override protected void makeOptions(Parameterization config) { super.makeOptions(config); - DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA); + DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.Parameterizer.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA); walphaP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE); if(config.grab(walphaP)) { walpha = walphaP.getValue(); diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/StandardCovarianceMatrixBuilder.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/StandardCovarianceMatrixBuilder.java index 677a88eb..ea1a6787 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/StandardCovarianceMatrixBuilder.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/StandardCovarianceMatrixBuilder.java @@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix; * Reasonable default choice for a {@link CovarianceMatrixBuilder} * * @author Erich Schubert + * @since 0.2 * * @apiviz.uses CovarianceMatrix */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeakEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeakEigenPairFilter.java index 51d89450..8f76531e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeakEigenPairFilter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeakEigenPairFilter.java @@ -42,19 +42,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * as "strong", the others as "weak". * * @author Erich Schubert + * @since 0.2 */ @Title("Weak Eigenpair Filter") @Description("Sorts the eigenpairs in decending order of their eigenvalues and returns those eigenpairs, whose eigenvalue is above the average ('expected') eigenvalue.") public class WeakEigenPairFilter implements EigenPairFilter { /** - * OptionID for the weak alpha value of {@link WeakEigenPairFilter}, - * {@link de.lmu.ifi.dbs.elki.math.linearalgebra.pca.ProgressiveEigenPairFilter} - * and - * {@link de.lmu.ifi.dbs.elki.math.linearalgebra.pca.SignificantEigenPairFilter} - */ - public static final OptionID EIGENPAIR_FILTER_WALPHA = new OptionID("pca.filter.weakalpha", "The minimum strength of the statistically expected variance (1/n) share an eigenvector " + "needs to have to be considered 'strong'."); - - /** * The default value for walpha. */ public static final double DEFAULT_WALPHA = 0.95; @@ -119,6 +112,13 @@ public class WeakEigenPairFilter implements EigenPairFilter { */ public static class Parameterizer extends AbstractParameterizer { /** + * OptionID for the weak alpha value of {@link WeakEigenPairFilter}, + * {@link de.lmu.ifi.dbs.elki.math.linearalgebra.pca.ProgressiveEigenPairFilter} + * and + * {@link de.lmu.ifi.dbs.elki.math.linearalgebra.pca.SignificantEigenPairFilter} + */ + public static final OptionID EIGENPAIR_FILTER_WALPHA = new OptionID("pca.filter.weakalpha", "The minimum strength of the statistically expected variance (1/n) share an eigenvector " + "needs to have to be considered 'strong'."); + /** * The threshold for strong eigenvectors: the strong eigenvectors explain a * portion of at least alpha of the total variance. */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeightedCovarianceMatrixBuilder.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeightedCovarianceMatrixBuilder.java index a5b7d545..eba61671 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeightedCovarianceMatrixBuilder.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeightedCovarianceMatrixBuilder.java @@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter; * Computer Science 5069, Springer * * @author Erich Schubert + * @since 0.2 * * @apiviz.has WeightFunction * @apiviz.has PrimitiveDistanceFunction @@ -73,17 +74,6 @@ booktitle = "Proceedings of the 20th International Conference on Scientific and url = "http://dx.doi.org/10.1007/978-3-540-69497-7_27") public class WeightedCovarianceMatrixBuilder extends AbstractCovarianceMatrixBuilder { /** - * Parameter to specify the weight function to use in weighted PCA, must - * implement - * {@link de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions.WeightFunction} - * . - * <p> - * Key: {@code -pca.weight} - * </p> - */ - public static final OptionID WEIGHT_ID = new OptionID("pca.weight", "Weight function to use in weighted PCA."); - - /** * Holds the weight function. */ protected WeightFunction weightfunction; @@ -205,6 +195,16 @@ public class WeightedCovarianceMatrixBuilder extends AbstractCovarianceMatrixBui */ public static class Parameterizer extends AbstractParameterizer { /** + * Parameter to specify the weight function to use in weighted PCA, must + * implement + * {@link de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions.WeightFunction} + * . + * <p> + * Key: {@code -pca.weight} + * </p> + */ + public static final OptionID WEIGHT_ID = new OptionID("pca.weight", "Weight function to use in weighted PCA."); + /** * Weight function. */ protected WeightFunction weightfunction = null; diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ConstantWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ConstantWeight.java index 693cdb2e..71ae52ed 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ConstantWeight.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ConstantWeight.java @@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions; * The result is always 1.0 * * @author Erich Schubert + * @since 0.2 */ public final class ConstantWeight implements WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcStddevWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcStddevWeight.java index 03423603..76e24d18 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcStddevWeight.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcStddevWeight.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.math.statistics.distribution.NormalDistribution; * erfc(1 / sqrt(2) * distance / stddev) * * @author Erich Schubert + * @since 0.2 */ public final class ErfcStddevWeight implements WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcWeight.java index b7bc1c67..11acb0af 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcWeight.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcWeight.java @@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.math.statistics.distribution.NormalDistribution; * scaling. * * @author Erich Schubert + * @since 0.2 */ public final class ErfcWeight implements WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialStddevWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialStddevWeight.java index 3b265d47..fce17896 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialStddevWeight.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialStddevWeight.java @@ -34,6 +34,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions; * not squared. * * @author Erich Schubert + * @since 0.2 */ public final class ExponentialStddevWeight implements WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialWeight.java index c67e35d7..c45d5cac 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialWeight.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialWeight.java @@ -36,6 +36,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions; * -2.3025850929940455 is log(-.1) to achieve the intended range of 1.0 - 0.1 * * @author Erich Schubert + * @since 0.2 */ public final class ExponentialWeight implements WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussStddevWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussStddevWeight.java index bf78b576..d8f67639 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussStddevWeight.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussStddevWeight.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * with factor being 1 / sqrt(2 * PI) * * @author Erich Schubert + * @since 0.2 */ public final class GaussStddevWeight implements WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussWeight.java index fcad89a3..70826d0e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussWeight.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussWeight.java @@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions; * exp(-2.3025850929940455 * (distance/max)^2) * * @author Erich Schubert + * @since 0.2 */ public final class GaussWeight implements WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseLinearWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseLinearWeight.java index 3fb8e9e0..f2c27d5a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseLinearWeight.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseLinearWeight.java @@ -33,6 +33,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions; * This function has increasing weight, from 0.1 to 1.0 at distance == max. * * @author Erich Schubert + * @since 0.2 */ public final class InverseLinearWeight implements WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalStddevWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalStddevWeight.java index a4d4a28e..952e7a56 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalStddevWeight.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalStddevWeight.java @@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions; * 1 / (1 + distance/stddev) * * @author Erich Schubert + * @since 0.2 */ public final class InverseProportionalStddevWeight implements WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalWeight.java index fb1d71ba..810d17a9 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalWeight.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalWeight.java @@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions; * 1 / (1 + distance/max) * * @author Erich Schubert + * @since 0.2 */ public final class InverseProportionalWeight implements WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/LinearWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/LinearWeight.java index a37617b5..bc92660e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/LinearWeight.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/LinearWeight.java @@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions; * 1 - 0.9 * (distance/max) * * @author Erich Schubert + * @since 0.2 */ public final class LinearWeight implements WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticStddevWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticStddevWeight.java index e35e9a67..c02d78f1 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticStddevWeight.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticStddevWeight.java @@ -33,6 +33,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions; * max(0.0, 1.0 - (distance/(3*stddev))^2 * * @author Erich Schubert + * @since 0.2 */ public final class QuadraticStddevWeight implements WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticWeight.java index 87bd552b..d764ef08 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticWeight.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticWeight.java @@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions; * 1.0 - 0.9 * (distance/max)^2 * * @author Erich Schubert + * @since 0.2 */ public final class QuadraticWeight implements WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/WeightFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/WeightFunction.java index 49bced02..afc04fb9 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/WeightFunction.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/WeightFunction.java @@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions; * normalized according to the maximum or standard deviation. * * @author Erich Schubert + * @since 0.2 */ public interface WeightFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AbstractRandomProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AbstractRandomProjectionFamily.java index 00597ac2..7ce235de 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AbstractRandomProjectionFamily.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AbstractRandomProjectionFamily.java @@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter; * Abstract base class for random projection families. * * @author Erich Schubert + * @since 0.3 */ public abstract class AbstractRandomProjectionFamily implements RandomProjectionFamily { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AchlioptasRandomProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AchlioptasRandomProjectionFamily.java index e3504419..4c74bbfb 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AchlioptasRandomProjectionFamily.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AchlioptasRandomProjectionFamily.java @@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * TODO: faster implementation exploiting sparsity. * * @author Erich Schubert + * @since 0.6.0 */ @Reference(title = "Database-friendly random projections: Johnson-Lindenstrauss with binary coins", // authors = "D. Achlioptas", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/CauchyRandomProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/CauchyRandomProjectionFamily.java index 699478ac..47fddeab 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/CauchyRandomProjectionFamily.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/CauchyRandomProjectionFamily.java @@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * </p> * * @author Erich Schubert + * @since 0.6.0 */ @Reference(authors = "M. Datar and N. Immorlica and P. Indyk and V. S. Mirrokni", // title = "Locality-sensitive hashing scheme based on p-stable distributions", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/GaussianRandomProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/GaussianRandomProjectionFamily.java index facfe427..e5277d5e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/GaussianRandomProjectionFamily.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/GaussianRandomProjectionFamily.java @@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * </p> * * @author Erich Schubert + * @since 0.6.0 */ @Reference(authors = "M. Datar and N. Immorlica and P. Indyk and V. S. Mirrokni", // title = "Locality-sensitive hashing scheme based on p-stable distributions", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomProjectionFamily.java index 95a59276..e97e32f6 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomProjectionFamily.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomProjectionFamily.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.data.NumberVector; * Interface for random projection families. * * @author Erich Schubert + * @since 0.2 * * @apiviz.has Projection */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomSubsetProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomSubsetProjectionFamily.java index dae7e0cb..15ecfec4 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomSubsetProjectionFamily.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomSubsetProjectionFamily.java @@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * </p> * * @author Erich Schubert + * @since 0.6.0 */ @Reference(authors = "L. Breiman", // title = "Bagging predictors", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/SimplifiedRandomHyperplaneProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/SimplifiedRandomHyperplaneProjectionFamily.java index 5a505f66..3916659a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/SimplifiedRandomHyperplaneProjectionFamily.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/SimplifiedRandomHyperplaneProjectionFamily.java @@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * * @author Evgeniy Faerman * @author Erich Schubert + * @since 0.7.0 */ @Reference(authors = "M. Henzinger", // title = "Finding near-duplicate web pages: a large-scale evaluation of algorithms", // |