diff options
author | Andrej Shadura <andrewsh@debian.org> | 2019-03-09 22:30:34 +0000 |
---|---|---|
committer | Andrej Shadura <andrewsh@debian.org> | 2019-03-09 22:30:34 +0000 |
commit | b7b404fd7a726774d442562d11659d7b5368cdb9 (patch) | |
tree | 6f510ddbf80c1a51e333f80411541565ac71c9e9 /src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseVarianceNormalization.java | |
parent | ace5fa7f57d49756c0e1b111a30f3b6a9436c1cb (diff) |
Import Upstream version 0.5.5
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseVarianceNormalization.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseVarianceNormalization.java | 51 |
1 files changed, 32 insertions, 19 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseVarianceNormalization.java b/src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseVarianceNormalization.java index 52a0499f..0671231d 100644 --- a/src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseVarianceNormalization.java +++ b/src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseVarianceNormalization.java @@ -53,21 +53,21 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * @apiviz.uses NumberVector */ // TODO: extract superclass AbstractAttributeWiseNormalization -public class AttributeWiseVarianceNormalization<V extends NumberVector<V, ?>> extends AbstractNormalization<V> { +public class AttributeWiseVarianceNormalization<V extends NumberVector<?>> extends AbstractNormalization<V> { /** * Class logger. */ - public static final Logging logger = Logging.getLogger(AttributeWiseVarianceNormalization.class); + private static final Logging LOG = Logging.getLogger(AttributeWiseVarianceNormalization.class); /** * Parameter for means. */ - public static final OptionID MEAN_ID = OptionID.getOrCreateOptionID("normalize.mean", "a comma separated concatenation of the mean values in each dimension that are mapped to 0. If no value is specified, the mean value of the attribute range in this dimension will be taken."); + public static final OptionID MEAN_ID = new OptionID("normalize.mean", "a comma separated concatenation of the mean values in each dimension that are mapped to 0. If no value is specified, the mean value of the attribute range in this dimension will be taken."); /** * Parameter for stddevs. */ - public static final OptionID STDDEV_ID = OptionID.getOrCreateOptionID("normalize.stddev", "a comma separated concatenation of the standard deviations in each dimension that are scaled to 1. If no value is specified, the standard deviation of the attribute range in this dimension will be taken."); + public static final OptionID STDDEV_ID = new OptionID("normalize.stddev", "a comma separated concatenation of the standard deviations in each dimension that are scaled to 1. If no value is specified, the standard deviation of the attribute range in this dimension will be taken."); /** * Stores the mean in each dimension. @@ -108,14 +108,14 @@ public class AttributeWiseVarianceNormalization<V extends NumberVector<V, ?>> ex int dimensionality = featureVector.getDimensionality(); mvs = MeanVariance.newArray(dimensionality); } - for(int d = 1; d <= featureVector.getDimensionality(); d++) { - mvs[d - 1].put(featureVector.doubleValue(d)); + for(int d = 0; d < featureVector.getDimensionality(); d++) { + mvs[d].put(featureVector.doubleValue(d)); } } @Override protected void prepareComplete() { - StringBuffer buf = logger.isVerbose() ? new StringBuffer() : null; + StringBuilder buf = LOG.isVerbose() ? new StringBuilder() : null; final int dimensionality = mvs.length; mean = new double[dimensionality]; stddev = new double[dimensionality]; @@ -134,33 +134,40 @@ public class AttributeWiseVarianceNormalization<V extends NumberVector<V, ?>> ex } mvs = null; if(buf != null) { - logger.debugFine(buf.toString()); + LOG.debugFine(buf.toString()); } } @Override protected V filterSingleObject(V featureVector) { double[] values = new double[featureVector.getDimensionality()]; - for(int d = 1; d <= featureVector.getDimensionality(); d++) { - values[d - 1] = normalize(d - 1, featureVector.doubleValue(d)); + for(int d = 0; d < featureVector.getDimensionality(); d++) { + values[d] = normalize(d, featureVector.doubleValue(d)); } - return featureVector.newNumberVector(values); + return factory.newNumberVector(values); } @Override public V restore(V featureVector) throws NonNumericFeaturesException { if(featureVector.getDimensionality() == mean.length) { double[] values = new double[featureVector.getDimensionality()]; - for(int d = 1; d <= featureVector.getDimensionality(); d++) { - values[d - 1] = restore(d - 1, featureVector.doubleValue(d)); + for(int d = 0; d < featureVector.getDimensionality(); d++) { + values[d] = restore(d, featureVector.doubleValue(d)); } - return featureVector.newNumberVector(values); + return factory.newNumberVector(values); } else { throw new NonNumericFeaturesException("Attributes cannot be resized: current dimensionality: " + featureVector.getDimensionality() + " former dimensionality: " + mean.length); } } + /** + * Normalize a single dimension. + * + * @param d Dimension + * @param val Value + * @return Normalized value + */ private double normalize(int d, double val) { if(mean.length == 1) { return (val - mean[0]) / stddev[0]; @@ -170,6 +177,12 @@ public class AttributeWiseVarianceNormalization<V extends NumberVector<V, ?>> ex } } + /** + * Restore a single dimension. + * @param d Dimension + * @param val Value + * @return Normalized value + */ private double restore(int d, double val) { if(mean.length == 1) { return (val * stddev[0]) + mean[0]; @@ -208,11 +221,11 @@ public class AttributeWiseVarianceNormalization<V extends NumberVector<V, ?>> ex @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 means: ").append(FormatUtil.format(mean)); - result.append("\n"); + result.append('\n'); result.append("normalization stddevs: ").append(FormatUtil.format(stddev)); return result.toString(); @@ -225,7 +238,7 @@ public class AttributeWiseVarianceNormalization<V extends NumberVector<V, ?>> ex * * @apiviz.exclude */ - public static class Parameterizer<V extends NumberVector<V, ?>> extends AbstractParameterizer { + public static class Parameterizer<V extends NumberVector<?>> extends AbstractParameterizer { /** * Stores the mean in each dimension. */ @@ -255,7 +268,7 @@ public class AttributeWiseVarianceNormalization<V extends NumberVector<V, ?>> ex } } - ArrayList<Parameter<?, ?>> global_1 = new ArrayList<Parameter<?, ?>>(); + ArrayList<Parameter<?>> global_1 = new ArrayList<Parameter<?>>(); global_1.add(meanP); global_1.add(stddevP); config.checkConstraint(new AllOrNoneMustBeSetGlobalConstraint(global_1)); |