summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AttributeWiseMinMaxNormalization.java
diff options
context:
space:
mode:
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.java45
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));