package org.neuroph.util.data.norm;

import org.neuroph.util.DataSetStats;
import org.neuroph.core.data.DataSet;
import org.neuroph.core.data.DataSetRow;

/**
 * Normalizes data sets by shifting all values in such way that data set has mean of 0 and std deviation of 1
 */
public class ZeroMeanNormalizer implements Normalizer {


    public void normalize(DataSet dataSet) {

        double[] maxInput = DataSetStats.calculateMaxByColumns(dataSet);
        double[] minInput = DataSetStats.calculateMinByColumns(dataSet);
        double[] meanInput = DataSetStats.calculateMeanByColumns(dataSet);

        for (DataSetRow row : dataSet.getRows()) {
            double[] normalizedInput = row.getInput();

            for (int i = 0; i < dataSet.getInputSize(); i++) {
                double divider = maxInput[i] - minInput[i] == 0 ? 1 : maxInput[i] - minInput[i];
                normalizedInput[i] = (normalizedInput[i] - meanInput[i]) / divider; // should we delete with std ?
            }
            row.setInput(normalizedInput);
        }

    }

}

 

Ads help maintain this website.