/**
*
*/
package org.streaminer.stream.mapper;
import org.streaminer.stream.data.Data;
import org.streaminer.stream.learner.LearnerUtils;
/**
* @author chris
*
*/
public class Normalization implements IMapper<Data, Data> {
String attribute = ".*";
Double minimum = -10.0d;
Double maximum = 10.0d;
double range = Math.abs(maximum - minimum);
double offset = 0.5d * (maximum - minimum);
/**
* @see stream.data.DataProcessor#process(stream.data.Data)
*/
@Override
public Data map(Data data) {
for (String key : data.keySet()) {
if (key.matches(attribute) && LearnerUtils.isNumerical(key, data)) {
Double value = LearnerUtils.getDouble(key, data);
data.put(key, normalize(value));
}
}
return data;
}
protected void update() {
range = Math.abs(maximum - minimum);
offset = 0.5 * range;
}
/**
* @return the minimum
*/
public Double getMinimum() {
return minimum;
}
/**
* @param minimum
* the minimum to set
*/
public void setMinimum(Double minimum) {
this.minimum = minimum;
update();
}
/**
* @return the maximum
*/
public Double getMaximum() {
return maximum;
}
/**
* @param maximum
* the maximum to set
*/
public void setMaximum(Double maximum) {
this.maximum = maximum;
update();
}
protected Double normalize(Double d) {
Double v = d;
if (d < minimum)
v = minimum;
if (d > maximum)
v = maximum;
return (v + offset) / range;
}
}