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.java48
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