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 | 56 |
1 files changed, 33 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 62c0bf12..31f72660 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 @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.datasource.filter.normalization; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -28,6 +28,7 @@ import java.util.ArrayList; import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation; import de.lmu.ifi.dbs.elki.data.type.TypeUtil; +import de.lmu.ifi.dbs.elki.logging.Logging; import de.lmu.ifi.dbs.elki.math.linearalgebra.LinearEquationSystem; import de.lmu.ifi.dbs.elki.utilities.FormatUtil; import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.ArrayLikeUtil; @@ -52,6 +53,11 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; // TODO: extract superclass AbstractAttributeWiseNormalization public class AttributeWiseMinMaxNormalization<V extends NumberVector<?>> extends AbstractNormalization<V> { /** + * Class logger. + */ + private static final Logging LOG = Logging.getLogger(AttributeWiseMinMaxNormalization.class); + + /** * Parameter for minimum. */ 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."); @@ -91,24 +97,24 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<?>> extends @Override protected void prepareProcessInstance(V featureVector) { // First object? Then initialize. - if(minima.length == 0 || maxima.length == 0) { + if (minima.length == 0 || maxima.length == 0) { int dimensionality = featureVector.getDimensionality(); minima = new double[dimensionality]; maxima = new double[dimensionality]; - for(int i = 0; i < dimensionality; i++) { + for (int i = 0; i < dimensionality; i++) { maxima[i] = -Double.MAX_VALUE; minima[i] = Double.MAX_VALUE; } } - if(minima.length != featureVector.getDimensionality()) { + if (minima.length != featureVector.getDimensionality()) { throw new IllegalArgumentException("FeatureVectors differ in length."); } - for(int d = 0; d < featureVector.getDimensionality(); d++) { + for (int d = 0; d < featureVector.getDimensionality(); d++) { final double val = featureVector.doubleValue(d); - if(val > maxima[d]) { + if (val > maxima[d]) { maxima[d] = val; } - if(val < minima[d]) { + if (val < minima[d]) { minima[d] = val; } } @@ -117,10 +123,10 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<?>> extends @Override protected V filterSingleObject(V featureVector) { double[] values = new double[featureVector.getDimensionality()]; - if(minima.length != featureVector.getDimensionality()) { + if (minima.length != featureVector.getDimensionality()) { throw new IllegalArgumentException("FeatureVectors and given Minima/Maxima differ in length."); } - for(int d = 0; d < featureVector.getDimensionality(); d++) { + for (int d = 0; d < featureVector.getDimensionality(); d++) { values[d] = (featureVector.doubleValue(d) - minima[d]) / factor(d); } return factory.newNumberVector(values); @@ -128,14 +134,13 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<?>> extends @Override public V restore(V featureVector) throws NonNumericFeaturesException { - if(featureVector.getDimensionality() == maxima.length && featureVector.getDimensionality() == minima.length) { + if (featureVector.getDimensionality() == maxima.length && featureVector.getDimensionality() == minima.length) { double[] values = new double[featureVector.getDimensionality()]; - for(int d = 0; d < featureVector.getDimensionality(); d++) { + for (int d = 0; d < featureVector.getDimensionality(); d++) { values[d] = (featureVector.doubleValue(d) * (factor(d)) + minima[d]); } return factory.newNumberVector(values); - } - else { + } else { throw new NonNumericFeaturesException("Attributes cannot be resized: current dimensionality: " + featureVector.getDimensionality() + " former dimensionality: " + maxima.length); } } @@ -161,10 +166,10 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<?>> extends int[] row = linearEquationSystem.getRowPermutations(); int[] col = linearEquationSystem.getColumnPermutations(); - for(int i = 0; i < coeff.length; i++) { - for(int r = 0; r < coeff.length; r++) { + 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++) { + for (int c = 0; c < coeff[0].length; c++) { sum += minima[c] * coeff[row[r]][col[c]] / factor(c); coeff[row[r]][col[c]] = coeff[row[r]][col[c]] / factor(c); } @@ -186,12 +191,17 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<?>> extends result.append("normalization maxima: ").append(FormatUtil.format(maxima)); return result.toString(); } - + @Override protected SimpleTypeInformation<? super V> getInputTypeRestriction() { return TypeUtil.NUMBER_VECTOR_FIELD; } + @Override + protected Logging getLogger() { + return LOG; + } + /** * Parameterization class. * @@ -214,20 +224,20 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<?>> extends protected void makeOptions(Parameterization config) { super.makeOptions(config); DoubleListParameter minimaP = new DoubleListParameter(MINIMA_ID, true); - if(config.grab(minimaP)) { + if (config.grab(minimaP)) { minima = ArrayLikeUtil.toPrimitiveDoubleArray(minimaP.getValue()); } DoubleListParameter maximaP = new DoubleListParameter(MAXIMA_ID, true); - if(config.grab(maximaP)) { + if (config.grab(maximaP)) { maxima = ArrayLikeUtil.toPrimitiveDoubleArray(maximaP.getValue()); } - ArrayList<Parameter<?>> global_1 = new ArrayList<Parameter<?>>(); + ArrayList<Parameter<?>> global_1 = new ArrayList<>(); global_1.add(minimaP); global_1.add(maximaP); config.checkConstraint(new AllOrNoneMustBeSetGlobalConstraint(global_1)); - ArrayList<ListParameter<?>> global = new ArrayList<ListParameter<?>>(); + ArrayList<ListParameter<?>> global = new ArrayList<>(); global.add(minimaP); global.add(maximaP); config.checkConstraint(new EqualSizeGlobalConstraint(global)); @@ -235,7 +245,7 @@ public class AttributeWiseMinMaxNormalization<V extends NumberVector<?>> extends @Override protected AttributeWiseMinMaxNormalization<V> makeInstance() { - return new AttributeWiseMinMaxNormalization<V>(minima, maxima); + return new AttributeWiseMinMaxNormalization<>(minima, maxima); } } -}
\ No newline at end of file +} |