diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca')
10 files changed, 94 insertions, 96 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/DropEigenPairFilter.java b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/DropEigenPairFilter.java index 22cefa87..7a2917c5 100644 --- a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/DropEigenPairFilter.java +++ b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/DropEigenPairFilter.java @@ -30,7 +30,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.EigenPair; import de.lmu.ifi.dbs.elki.math.linearalgebra.SortedEigenPairs; import de.lmu.ifi.dbs.elki.utilities.documentation.Title; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterEqualConstraint; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; @@ -133,7 +133,7 @@ public class DropEigenPairFilter implements EigenPairFilter { protected void makeOptions(Parameterization config) { super.makeOptions(config); DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA); - walphaP.addConstraint(new GreaterEqualConstraint(0.0)); + walphaP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE); if (config.grab(walphaP)) { walpha = walphaP.getValue(); } diff --git a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FirstNEigenPairFilter.java b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FirstNEigenPairFilter.java index f613e067..79ee4ea6 100644 --- a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FirstNEigenPairFilter.java +++ b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FirstNEigenPairFilter.java @@ -33,7 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Description; import de.lmu.ifi.dbs.elki.utilities.documentation.Title; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterEqualConstraint; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter; @@ -122,7 +122,7 @@ public class FirstNEigenPairFilter implements EigenPairFilter { protected void makeOptions(Parameterization config) { super.makeOptions(config); IntParameter nP = new IntParameter(EIGENPAIR_FILTER_N); - nP.addConstraint(new GreaterEqualConstraint(0)); + nP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_INT); if(config.grab(nP)) { n = nP.intValue(); } diff --git a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/LimitEigenPairFilter.java b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/LimitEigenPairFilter.java index b3bd04b3..4d9e7331 100644 --- a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/LimitEigenPairFilter.java +++ b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/LimitEigenPairFilter.java @@ -34,9 +34,8 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GlobalParameterConstraint; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterEqualConstraint; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.LessEqualConstraint; import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterConstraint; import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterFlagGlobalConstraint; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; @@ -98,26 +97,27 @@ public class LimitEigenPairFilter implements EigenPairFilter { @Override public FilteredEigenPairs filter(SortedEigenPairs eigenPairs) { StringBuilder msg = new StringBuilder(); - if (LOG.isDebugging()) { + if(LOG.isDebugging()) { msg.append("delta = ").append(delta); } // determine limit double limit; - if (absolute) { + if(absolute) { limit = delta; - } else { + } + else { double max = Double.NEGATIVE_INFINITY; - for (int i = 0; i < eigenPairs.size(); i++) { + for(int i = 0; i < eigenPairs.size(); i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); double eigenValue = Math.abs(eigenPair.getEigenvalue()); - if (max < eigenValue) { + if(max < eigenValue) { max = eigenValue; } } limit = max * delta; } - if (LOG.isDebugging()) { + if(LOG.isDebugging()) { msg.append("\nlimit = ").append(limit); } @@ -126,16 +126,17 @@ public class LimitEigenPairFilter implements EigenPairFilter { List<EigenPair> weakEigenPairs = new ArrayList<>(); // determine strong and weak eigenpairs - for (int i = 0; i < eigenPairs.size(); i++) { + for(int i = 0; i < eigenPairs.size(); i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); double eigenValue = Math.abs(eigenPair.getEigenvalue()); - if (eigenValue >= limit) { + if(eigenValue >= limit) { strongEigenPairs.add(eigenPair); - } else { + } + else { weakEigenPairs.add(eigenPair); } } - if (LOG.isDebugging()) { + if(LOG.isDebugging()) { msg.append("\nstrong EigenPairs = ").append(strongEigenPairs); msg.append("\nweak EigenPairs = ").append(weakEigenPairs); LOG.debugFine(msg.toString()); @@ -166,16 +167,16 @@ public class LimitEigenPairFilter implements EigenPairFilter { protected void makeOptions(Parameterization config) { super.makeOptions(config); Flag absoluteF = new Flag(EIGENPAIR_FILTER_ABSOLUTE); - if (config.grab(absoluteF)) { + if(config.grab(absoluteF)) { absolute = absoluteF.isTrue(); } DoubleParameter deltaP = new DoubleParameter(EIGENPAIR_FILTER_DELTA, DEFAULT_DELTA); - deltaP.addConstraint(new GreaterEqualConstraint(0)); - if (config.grab(deltaP)) { + deltaP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE); + if(config.grab(deltaP)) { delta = deltaP.doubleValue(); // TODO: make this a global constraint? - if (absolute && deltaP.tookDefaultValue()) { + if(absolute && deltaP.tookDefaultValue()) { config.reportError(new WrongParameterValueException("Illegal parameter setting: " + "Flag " + absoluteF.getName() + " is set, " + "but no value for " + deltaP.getName() + " is specified.")); } } @@ -187,10 +188,8 @@ public class LimitEigenPairFilter implements EigenPairFilter { List<ParameterConstraint<? super Double>> cons = new ArrayList<>(); // TODO: Keep the constraint here - applies to non-conditional case as // well, and is set above. - ParameterConstraint<Number> aboveNull = new GreaterEqualConstraint(0.); - cons.add(aboveNull); - ParameterConstraint<Number> underOne = new LessEqualConstraint(1.); - cons.add(underOne); + cons.add(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE); + cons.add(CommonConstraints.LESS_EQUAL_ONE_DOUBLE); GlobalParameterConstraint gpc = new ParameterFlagGlobalConstraint<>(deltaP, cons, absoluteF, false); config.checkConstraint(gpc); diff --git a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredRunner.java b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredRunner.java index 2318b72d..670b4559 100644 --- a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredRunner.java +++ b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredRunner.java @@ -32,8 +32,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.EigenvalueDecomposition; import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix; import de.lmu.ifi.dbs.elki.math.linearalgebra.SortedEigenPairs; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterConstraint; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterEqualConstraint; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.LessGlobalConstraint; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; @@ -207,20 +206,20 @@ public class PCAFilteredRunner<V extends NumberVector<?>> extends PCARunner<V> { protected void makeOptions(Parameterization config) { super.makeOptions(config); ObjectParameter<EigenPairFilter> filterP = new ObjectParameter<>(PCA_EIGENPAIR_FILTER, EigenPairFilter.class, PercentageEigenPairFilter.class); - if (config.grab(filterP)) { + if(config.grab(filterP)) { eigenPairFilter = filterP.instantiateClass(config); } - DoubleParameter bigP = new DoubleParameter(BIG_ID, 1.0); - bigP.addConstraint(new GreaterConstraint(0)); - if (config.grab(bigP)) { + DoubleParameter bigP = new DoubleParameter(BIG_ID, 1.); + bigP.addConstraint(CommonConstraints.GREATER_THAN_ZERO_DOUBLE); + if(config.grab(bigP)) { big = bigP.doubleValue(); } - DoubleParameter smallP = new DoubleParameter(SMALL_ID, 0.0); - smallP.addConstraint(new GreaterEqualConstraint(0)); - if (config.grab(smallP)) { + DoubleParameter smallP = new DoubleParameter(SMALL_ID, 0.); + smallP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE); + if(config.grab(smallP)) { small = smallP.doubleValue(); } diff --git a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PercentageEigenPairFilter.java b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PercentageEigenPairFilter.java index 85e29867..5602228e 100644 --- a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PercentageEigenPairFilter.java +++ b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PercentageEigenPairFilter.java @@ -33,8 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Description; import de.lmu.ifi.dbs.elki.utilities.documentation.Title; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterConstraint; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.LessConstraint; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; @@ -90,7 +89,7 @@ public class PercentageEigenPairFilter implements EigenPairFilter { @Override public FilteredEigenPairs filter(SortedEigenPairs eigenPairs) { StringBuilder msg = new StringBuilder(); - if (LOG.isDebugging()) { + if(LOG.isDebugging()) { msg.append("alpha = ").append(alpha); msg.append("\nsortedEigenPairs = ").append(eigenPairs); } @@ -101,32 +100,34 @@ public class PercentageEigenPairFilter implements EigenPairFilter { // determine sum of eigenvalues double totalSum = 0; - for (int i = 0; i < eigenPairs.size(); i++) { + for(int i = 0; i < eigenPairs.size(); i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); totalSum += eigenPair.getEigenvalue(); } - if (LOG.isDebugging()) { + if(LOG.isDebugging()) { msg.append("\ntotalSum = ").append(totalSum); } // determine strong and weak eigenpairs double currSum = 0; boolean found = false; - for (int i = 0; i < eigenPairs.size(); i++) { + for(int i = 0; i < eigenPairs.size(); i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); currSum += eigenPair.getEigenvalue(); - if (currSum / totalSum >= alpha) { - if (!found) { + if(currSum / totalSum >= alpha) { + if(!found) { found = true; strongEigenPairs.add(eigenPair); - } else { + } + else { weakEigenPairs.add(eigenPair); } - } else { + } + else { strongEigenPairs.add(eigenPair); } } - if (LOG.isDebugging()) { + if(LOG.isDebugging()) { msg.append("\nstrong EigenPairs = ").append(strongEigenPairs); msg.append("\nweak EigenPairs = ").append(weakEigenPairs); LOG.debugFine(msg.toString()); @@ -153,9 +154,9 @@ public class PercentageEigenPairFilter implements EigenPairFilter { protected void makeOptions(Parameterization config) { super.makeOptions(config); DoubleParameter alphaP = new DoubleParameter(ALPHA_ID, DEFAULT_ALPHA); - alphaP.addConstraint(new GreaterConstraint(0.0)); - alphaP.addConstraint(new LessConstraint(1.0)); - if (config.grab(alphaP)) { + alphaP.addConstraint(CommonConstraints.GREATER_THAN_ZERO_DOUBLE); + alphaP.addConstraint(CommonConstraints.LESS_THAN_ONE_DOUBLE); + if(config.grab(alphaP)) { alpha = alphaP.doubleValue(); } } diff --git a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/ProgressiveEigenPairFilter.java b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/ProgressiveEigenPairFilter.java index b99de2e1..4f412257 100644 --- a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/ProgressiveEigenPairFilter.java +++ b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/ProgressiveEigenPairFilter.java @@ -32,9 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Description; import de.lmu.ifi.dbs.elki.utilities.documentation.Title; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterConstraint; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterEqualConstraint; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.LessConstraint; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; @@ -133,7 +131,7 @@ public class ProgressiveEigenPairFilter implements EigenPairFilter { // determine sum of eigenvalues double totalSum = 0; - for (int i = 0; i < eigenPairs.size(); i++) { + for(int i = 0; i < eigenPairs.size(); i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); totalSum += eigenPair.getEigenvalue(); } @@ -143,35 +141,35 @@ public class ProgressiveEigenPairFilter implements EigenPairFilter { double currSum = 0; boolean found = false; int i; - for (i = 0; i < eigenPairs.size(); i++) { + for(i = 0; i < eigenPairs.size(); i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); // weak Eigenvector? - if (eigenPair.getEigenvalue() < expectedVariance) { + if(eigenPair.getEigenvalue() < expectedVariance) { break; } currSum += eigenPair.getEigenvalue(); // calculate progressive alpha level double alpha = 1.0 - (1.0 - palpha) * (1.0 - (i + 1) / eigenPairs.size()); - if (currSum / totalSum >= alpha || i == eigenPairs.size() - 1) { + if(currSum / totalSum >= alpha || i == eigenPairs.size() - 1) { found = true; strongEigenPairs.add(eigenPair); break; } } // if we didn't hit our alpha level, we consider all vectors to be weak! - if (!found) { + if(!found) { assert (weakEigenPairs.size() == 0); weakEigenPairs = strongEigenPairs; strongEigenPairs = new ArrayList<>(); } - for (; i < eigenPairs.size(); i++) { + for(; i < eigenPairs.size(); i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); weakEigenPairs.add(eigenPair); } // the code using this method doesn't expect an empty strong set, // if we didn't find any strong ones, we make all vectors strong - if (strongEigenPairs.size() == 0) { + if(strongEigenPairs.size() == 0) { return new FilteredEigenPairs(new ArrayList<EigenPair>(), weakEigenPairs); } return new FilteredEigenPairs(weakEigenPairs, strongEigenPairs); @@ -200,15 +198,15 @@ public class ProgressiveEigenPairFilter implements EigenPairFilter { protected void makeOptions(Parameterization config) { super.makeOptions(config); DoubleParameter palphaP = new DoubleParameter(EIGENPAIR_FILTER_PALPHA, DEFAULT_PALPHA); - palphaP.addConstraint(new GreaterConstraint(0.0)); - palphaP.addConstraint(new LessConstraint(1.0)); - if (config.grab(palphaP)) { + palphaP.addConstraint(CommonConstraints.GREATER_THAN_ZERO_DOUBLE); + palphaP.addConstraint(CommonConstraints.LESS_THAN_ONE_DOUBLE); + if(config.grab(palphaP)) { palpha = palphaP.getValue(); } DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA); - walphaP.addConstraint(new GreaterEqualConstraint(0.0)); - if (config.grab(walphaP)) { + walphaP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE); + if(config.grab(walphaP)) { walpha = walphaP.getValue(); } } diff --git a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RANSACCovarianceMatrixBuilder.java b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RANSACCovarianceMatrixBuilder.java index 3e9bccf7..2b369a32 100644 --- a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RANSACCovarianceMatrixBuilder.java +++ b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RANSACCovarianceMatrixBuilder.java @@ -38,7 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.RandomFactory; 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; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterConstraint; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter; @@ -107,31 +107,31 @@ public class RANSACCovarianceMatrixBuilder<V extends NumberVector<?>> extends Ab DBIDs best = DBIDUtil.EMPTYDBIDS; double tresh = ChiSquaredDistribution.quantile(0.85, dim); - for (int i = 0; i < iterations; i++) { + for(int i = 0; i < iterations; i++) { DBIDs sample = DBIDUtil.randomSample(ids, dim + 1, rnd); CovarianceMatrix cv = CovarianceMatrix.make(relation, sample); Vector centroid = cv.getMeanVector(); Matrix p = cv.destroyToSampleMatrix().inverse(); ModifiableDBIDs support = DBIDUtil.newHashSet(); - for (DBIDIter id = ids.iter(); id.valid(); id.advance()) { + for(DBIDIter id = ids.iter(); id.valid(); id.advance()) { Vector vec = relation.get(id).getColumnVector().minusEquals(centroid); double sqlen = vec.transposeTimesTimes(p, vec); - if (sqlen < tresh) { + if(sqlen < tresh) { support.add(id); } } - if (support.size() > best.size()) { + if(support.size() > best.size()) { best = support; } - if (support.size() >= ids.size()) { + if(support.size() >= ids.size()) { break; // Can't get better than this! } } // logger.warning("Consensus size: "+best.size()+" of "+ids.size()); // Fall back to regular PCA - if (best.size() <= dim) { + if(best.size() <= dim) { return CovarianceMatrix.make(relation, ids).destroyToSampleMatrix(); } // Return estimation based on consensus set. @@ -172,12 +172,12 @@ public class RANSACCovarianceMatrixBuilder<V extends NumberVector<?>> extends Ab protected void makeOptions(Parameterization config) { super.makeOptions(config); IntParameter iterP = new IntParameter(ITER_ID, 1000); - iterP.addConstraint(new GreaterConstraint(0)); - if (config.grab(iterP)) { + iterP.addConstraint(CommonConstraints.GREATER_EQUAL_ONE_INT); + if(config.grab(iterP)) { iterations = iterP.intValue(); } RandomParameter rndP = new RandomParameter(SEED_ID); - if (config.grab(rndP)) { + if(config.grab(rndP)) { rnd = rndP.getValue(); } } diff --git a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RelativeEigenPairFilter.java b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RelativeEigenPairFilter.java index 12da3fdf..32092ce9 100644 --- a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RelativeEigenPairFilter.java +++ b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RelativeEigenPairFilter.java @@ -32,7 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Description; import de.lmu.ifi.dbs.elki.utilities.documentation.Title; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterEqualConstraint; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; @@ -93,21 +93,21 @@ public class RelativeEigenPairFilter implements EigenPairFilter { // find the last eigenvector that is considered 'strong' by the weak rule // applied to the remaining vectors only double eigenValueSum = eigenPairs.getEigenPair(eigenPairs.size() - 1).getEigenvalue(); - for (int i = eigenPairs.size() - 2; i >= 0; i--) { + for(int i = eigenPairs.size() - 2; i >= 0; i--) { EigenPair eigenPair = eigenPairs.getEigenPair(i); eigenValueSum += eigenPair.getEigenvalue(); double needEigenvalue = eigenValueSum / (eigenPairs.size() - i) * ralpha; - if (eigenPair.getEigenvalue() >= needEigenvalue) { + if(eigenPair.getEigenvalue() >= needEigenvalue) { contrastAtMax = i; break; } } - for (int i = 0; i <= contrastAtMax /* && i < eigenPairs.size() */; i++) { + for(int i = 0; i <= contrastAtMax /* && i < eigenPairs.size() */; i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); strongEigenPairs.add(eigenPair); } - for (int i = contrastAtMax + 1; i < eigenPairs.size(); i++) { + for(int i = contrastAtMax + 1; i < eigenPairs.size(); i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); weakEigenPairs.add(eigenPair); } @@ -129,8 +129,8 @@ public class RelativeEigenPairFilter implements EigenPairFilter { protected void makeOptions(Parameterization config) { super.makeOptions(config); DoubleParameter ralphaP = new DoubleParameter(EIGENPAIR_FILTER_RALPHA, DEFAULT_RALPHA); - ralphaP.addConstraint(new GreaterEqualConstraint(0.0)); - if (config.grab(ralphaP)) { + ralphaP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE); + if(config.grab(ralphaP)) { ralpha = ralphaP.getValue(); } } diff --git a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/SignificantEigenPairFilter.java b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/SignificantEigenPairFilter.java index 73044b59..6219f77f 100644 --- a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/SignificantEigenPairFilter.java +++ b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/SignificantEigenPairFilter.java @@ -31,7 +31,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.SortedEigenPairs; import de.lmu.ifi.dbs.elki.utilities.documentation.Description; import de.lmu.ifi.dbs.elki.utilities.documentation.Title; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterEqualConstraint; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; @@ -87,32 +87,32 @@ public class SignificantEigenPairFilter implements EigenPairFilter { double maxContrast = 0.0; // calc the eigenvalue sum. double eigenValueSum = 0.0; - for (int i = 0; i < eigenPairs.size(); i++) { + for(int i = 0; i < eigenPairs.size(); i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); eigenValueSum += eigenPair.getEigenvalue(); } double weakEigenvalue = eigenValueSum / eigenPairs.size() * walpha; // now find the maximum contrast. double currSum = eigenPairs.getEigenPair(eigenPairs.size() - 1).getEigenvalue(); - for (int i = eigenPairs.size() - 2; i >= 0; i--) { + for(int i = eigenPairs.size() - 2; i >= 0; i--) { EigenPair eigenPair = eigenPairs.getEigenPair(i); currSum += eigenPair.getEigenvalue(); // weak? - if (eigenPair.getEigenvalue() < weakEigenvalue) { + if(eigenPair.getEigenvalue() < weakEigenvalue) { continue; } double contrast = eigenPair.getEigenvalue() / (currSum / (eigenPairs.size() - i)); - if (contrast > maxContrast) { + if(contrast > maxContrast) { maxContrast = contrast; contrastMaximum = i; } } - for (int i = 0; i <= contrastMaximum /* && i < eigenPairs.size() */; i++) { + for(int i = 0; i <= contrastMaximum /* && i < eigenPairs.size() */; i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); strongEigenPairs.add(eigenPair); } - for (int i = contrastMaximum + 1; i < eigenPairs.size(); i++) { + for(int i = contrastMaximum + 1; i < eigenPairs.size(); i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); weakEigenPairs.add(eigenPair); } @@ -134,8 +134,8 @@ public class SignificantEigenPairFilter implements EigenPairFilter { protected void makeOptions(Parameterization config) { super.makeOptions(config); DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA); - walphaP.addConstraint(new GreaterEqualConstraint(0.0)); - if (config.grab(walphaP)) { + walphaP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE); + if(config.grab(walphaP)) { walpha = walphaP.getValue(); } } diff --git a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeakEigenPairFilter.java b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeakEigenPairFilter.java index 66bcba30..92e1e32e 100644 --- a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeakEigenPairFilter.java +++ b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeakEigenPairFilter.java @@ -32,7 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Description; import de.lmu.ifi.dbs.elki.utilities.documentation.Title; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterEqualConstraint; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; @@ -85,25 +85,26 @@ public class WeakEigenPairFilter implements EigenPairFilter { // determine sum of eigenvalues double totalSum = 0; - for (int i = 0; i < eigenPairs.size(); i++) { + for(int i = 0; i < eigenPairs.size(); i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); totalSum += eigenPair.getEigenvalue(); } double expectEigenvalue = totalSum / eigenPairs.size() * walpha; // determine strong and weak eigenpairs - for (int i = 0; i < eigenPairs.size(); i++) { + for(int i = 0; i < eigenPairs.size(); i++) { EigenPair eigenPair = eigenPairs.getEigenPair(i); - if (eigenPair.getEigenvalue() > expectEigenvalue) { + if(eigenPair.getEigenvalue() > expectEigenvalue) { strongEigenPairs.add(eigenPair); - } else { + } + else { weakEigenPairs.add(eigenPair); } } // the code using this method doesn't expect an empty strong set, // if we didn't find any strong ones, we make all vectors strong - if (strongEigenPairs.size() == 0) { + if(strongEigenPairs.size() == 0) { return new FilteredEigenPairs(new ArrayList<EigenPair>(), weakEigenPairs); } return new FilteredEigenPairs(weakEigenPairs, strongEigenPairs); @@ -127,8 +128,8 @@ public class WeakEigenPairFilter implements EigenPairFilter { protected void makeOptions(Parameterization config) { super.makeOptions(config); DoubleParameter walphaP = new DoubleParameter(EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA); - walphaP.addConstraint(new GreaterEqualConstraint(0.0)); - if (config.grab(walphaP)) { + walphaP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE); + if(config.grab(walphaP)) { walpha = walphaP.getValue(); } } |