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 | 48 |
1 files changed, 19 insertions, 29 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 31f72660..47b6db5f 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 @@ -23,8 +23,6 @@ package de.lmu.ifi.dbs.elki.datasource.filter.normalization; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -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; @@ -38,8 +36,6 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.AllOrNoneMustBeS import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.EqualSizeGlobalConstraint; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParameter; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ListParameter; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; /** * Class to perform and undo a normalization on real vectors with respect to @@ -97,24 +93,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; } } @@ -123,10 +119,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); @@ -134,13 +130,14 @@ 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); } } @@ -166,10 +163,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); } @@ -224,23 +221,16 @@ 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<>(); - global_1.add(minimaP); - global_1.add(maximaP); - config.checkConstraint(new AllOrNoneMustBeSetGlobalConstraint(global_1)); - - ArrayList<ListParameter<?>> global = new ArrayList<>(); - global.add(minimaP); - global.add(maximaP); - config.checkConstraint(new EqualSizeGlobalConstraint(global)); + config.checkConstraint(new AllOrNoneMustBeSetGlobalConstraint(minimaP, maximaP)); + config.checkConstraint(new EqualSizeGlobalConstraint(minimaP, maximaP)); } @Override |