Пример #1
0
  /** Normalize data */
  private void normalizeData() {
    if (dataNormalized) {
      // Obtain maximum and minimum values
      unscaledMin = new double[unscaledTrainData.getNofvariables()];
      unscaledMax = new double[unscaledTrainData.getNofvariables()];
      double temp;
      for (int i = 0; i < unscaledTrainData.getNofvariables(); i++) {
        unscaledMax[i] = unscaledTrainData.getMaxValueOf(i);
        temp = unscaledTestData.getMaxValueOf(i);
        if (temp > unscaledMax[i]) unscaledMax[i] = temp;
        unscaledMin[i] = unscaledTrainData.getMinValueOf(i);
        temp = unscaledTestData.getMinValueOf(i);
        if (temp < unscaledMin[i]) unscaledMin[i] = temp;
      }

      // Obtain maximum and minimum desired values
      double[] scaledMin = new double[unscaledTrainData.getNofvariables()];
      double[] scaledMax = new double[unscaledTrainData.getNofvariables()];
      for (int i = 0; i < unscaledTrainData.getNofvariables(); i++) {
        if (i < unscaledTrainData.getNofinputs()) {
          scaledMin[i] = inputInterval.getLeft();
          scaledMax[i] = inputInterval.getRight();
        } else {
          scaledMin[i] = outputInterval.getLeft();
          scaledMax[i] = outputInterval.getRight();
        }
      }

      // Normalize trainData
      scaledTrainData = unscaledTrainData.copy();
      normalizer.scaleDS(scaledTrainData, scaledMax, scaledMin, unscaledMax, unscaledMin);

      // Normalize trainData
      scaledTestData = unscaledTestData.copy();
      normalizer.scaleDS(scaledTestData, scaledMax, scaledMin, unscaledMax, unscaledMin);
    }

    // Remove constant inputs
    int newNofinputs = 0;
    boolean[] toRemove = unscaledTrainData.obtainConstantsInputs();

    for (int i = 0; i < toRemove.length; i++) if (!toRemove[i]) newNofinputs++;

    unscaledTrainData.removeInputs(toRemove, newNofinputs);
    unscaledTestData.removeInputs(toRemove, newNofinputs);

    if (dataNormalized) {
      scaledTrainData.removeInputs(toRemove, newNofinputs);
      scaledTestData.removeInputs(toRemove, newNofinputs);

      // Log transformation
      if (logTransformation) {
        double[][] inputs = scaledTrainData.getAllInputs();

        for (int i = 0; i < inputs.length; i++)
          for (int j = 0; j < inputs[i].length; j++) inputs[i][j] = Math.log(inputs[i][j]);

        inputs = scaledTestData.getAllInputs();

        for (int i = 0; i < inputs.length; i++)
          for (int j = 0; j < inputs[i].length; j++) inputs[i][j] = Math.log(inputs[i][j]);
      }

    }

    // Log transformation
    else if (logTransformation) {
      double[][] inputs = unscaledTrainData.getAllInputs();

      for (int i = 0; i < inputs.length; i++)
        for (int j = 0; j < inputs[i].length; j++) inputs[i][j] = Math.log(inputs[i][j]);

      inputs = unscaledTestData.getAllInputs();

      for (int i = 0; i < inputs.length; i++)
        for (int j = 0; j < inputs[i].length; j++) inputs[i][j] = Math.log(inputs[i][j]);
    }
  }