diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseMinMaxNormalization.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseMinMaxNormalization.java | 45 |
1 files changed, 22 insertions, 23 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseMinMaxNormalization.java b/src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseMinMaxNormalization.java index 4cf3c606..62c0bf12 100644 --- a/src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseMinMaxNormalization.java +++ b/src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseMinMaxNormalization.java @@ -50,16 +50,16 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * @apiviz.uses NumberVector */ // TODO: extract superclass AbstractAttributeWiseNormalization -public class AttributeWiseMinMaxNormalization<V extends NumberVector<V, ?>> extends AbstractNormalization<V> { +public class AttributeWiseMinMaxNormalization<V extends NumberVector<?>> extends AbstractNormalization<V> { /** * Parameter for minimum. */ - public static final OptionID MINIMA_ID = OptionID.getOrCreateOptionID("normalize.min", "a comma separated concatenation of the minimum values in each dimension that are mapped to 0. If no value is specified, the minimum value of the attribute range in this dimension will be taken."); + public static final OptionID MINIMA_ID = new OptionID("normalize.min", "a comma separated concatenation of the minimum values in each dimension that are mapped to 0. If no value is specified, the minimum value of the attribute range in this dimension will be taken."); /** * Parameter for maximum. */ - public static final OptionID MAXIMA_ID = OptionID.getOrCreateOptionID("normalize.max", "a comma separated concatenation of the maximum values in each dimension that are mapped to 1. If no value is specified, the maximum value of the attribute range in this dimension will be taken."); + public static final OptionID MAXIMA_ID = new OptionID("normalize.max", "a comma separated concatenation of the maximum values in each dimension that are mapped to 1. If no value is specified, the maximum value of the attribute range in this dimension will be taken."); /** * Stores the maximum in each dimension. @@ -103,13 +103,13 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<V, ?>> exte if(minima.length != featureVector.getDimensionality()) { throw new IllegalArgumentException("FeatureVectors differ in length."); } - for(int d = 1; d <= featureVector.getDimensionality(); d++) { + for(int d = 0; d < featureVector.getDimensionality(); d++) { final double val = featureVector.doubleValue(d); - if(val > maxima[d - 1]) { - maxima[d - 1] = val; + if(val > maxima[d]) { + maxima[d] = val; } - if(val < minima[d - 1]) { - minima[d - 1] = val; + if(val < minima[d]) { + minima[d] = val; } } } @@ -120,20 +120,20 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<V, ?>> exte if(minima.length != featureVector.getDimensionality()) { throw new IllegalArgumentException("FeatureVectors and given Minima/Maxima differ in length."); } - for(int d = 1; d <= featureVector.getDimensionality(); d++) { - values[d - 1] = (featureVector.doubleValue(d) - minima[d - 1]) / factor(d); + for(int d = 0; d < featureVector.getDimensionality(); d++) { + values[d] = (featureVector.doubleValue(d) - minima[d]) / factor(d); } - return featureVector.newNumberVector(values); + return factory.newNumberVector(values); } @Override public V restore(V featureVector) throws NonNumericFeaturesException { if(featureVector.getDimensionality() == maxima.length && featureVector.getDimensionality() == minima.length) { double[] values = new double[featureVector.getDimensionality()]; - for(int d = 1; d <= featureVector.getDimensionality(); d++) { - values[d - 1] = (featureVector.doubleValue(d) * (factor(d)) + minima[d - 1]); + for(int d = 0; d < featureVector.getDimensionality(); d++) { + values[d] = (featureVector.doubleValue(d) * (factor(d)) + minima[d]); } - return featureVector.newNumberVector(values); + return factory.newNumberVector(values); } else { throw new NonNumericFeaturesException("Attributes cannot be resized: current dimensionality: " + featureVector.getDimensionality() + " former dimensionality: " + maxima.length); @@ -151,7 +151,7 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<V, ?>> exte * @return a factor for normalization in a certain dimension */ private double factor(int dimension) { - return maxima[dimension - 1] != minima[dimension - 1] ? maxima[dimension - 1] - minima[dimension - 1] : maxima[dimension - 1] != 0 ? maxima[dimension - 1] : 1; + return maxima[dimension] > minima[dimension] ? maxima[dimension] - minima[dimension] : maxima[dimension] > 0 ? maxima[dimension] : 1; } @Override @@ -161,13 +161,12 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<V, ?>> exte int[] row = linearEquationSystem.getRowPermutations(); int[] col = linearEquationSystem.getColumnPermutations(); - // noinspection ForLoopReplaceableByForEach for(int i = 0; i < coeff.length; i++) { for(int r = 0; r < coeff.length; r++) { double sum = 0.0; for(int c = 0; c < coeff[0].length; c++) { - sum += minima[c] * coeff[row[r]][col[c]] / factor(c + 1); - coeff[row[r]][col[c]] = coeff[row[r]][col[c]] / factor(c + 1); + sum += minima[c] * coeff[row[r]][col[c]] / factor(c); + coeff[row[r]][col[c]] = coeff[row[r]][col[c]] / factor(c); } rhs[row[r]] = rhs[row[r]] + sum; } @@ -179,11 +178,11 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<V, ?>> exte @Override public String toString() { - StringBuffer result = new StringBuffer(); + StringBuilder result = new StringBuilder(); result.append("normalization class: ").append(getClass().getName()); - result.append("\n"); + result.append('\n'); result.append("normalization minima: ").append(FormatUtil.format(minima)); - result.append("\n"); + result.append('\n'); result.append("normalization maxima: ").append(FormatUtil.format(maxima)); return result.toString(); } @@ -200,7 +199,7 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<V, ?>> exte * * @apiviz.exclude */ - public static class Parameterizer<V extends NumberVector<V, ?>> extends AbstractParameterizer { + public static class Parameterizer<V extends NumberVector<?>> extends AbstractParameterizer { /** * Stores the maximum in each dimension. */ @@ -223,7 +222,7 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<V, ?>> exte maxima = ArrayLikeUtil.toPrimitiveDoubleArray(maximaP.getValue()); } - ArrayList<Parameter<?, ?>> global_1 = new ArrayList<Parameter<?, ?>>(); + ArrayList<Parameter<?>> global_1 = new ArrayList<Parameter<?>>(); global_1.add(minimaP); global_1.add(maximaP); config.checkConstraint(new AllOrNoneMustBeSetGlobalConstraint(global_1)); |