code: @Override
      protected void _transform(Dataframe newData) {
          TrainingParameters trainingParameters = knowledgeBase.getTrainingParameters();
          boolean scaleResponse = trainingParameters.getScaleResponse() && newData.getYDataType() == TypeInference.DataType.NUMERICAL;
          double threshold = trainingParameters.getThreshold();
  
          Set<TypeInference.DataType> supportedXDataTypes = getSupportedXDataTypes();
          Map<Object, TypeInference.DataType> xDataTypes = newData.getXDataTypes();
  
          streamExecutor.forEach(StreamMethods.stream(newData.entries(), isParallelized()), e -> {
              Record r = e.getValue();
              AssociativeArray xData = r.getX().copy();
              Object yData = r.getY();
  
              boolean modified = false;
              for(Object column : r.getX().keySet()) {
                  if(!supportedXDataTypes.contains(xDataTypes.get(column))) {
                      continue;
                  }
                  Object value = xData.remove(column);
                  if(value != null) {
                      xData.put(column, scale(TypeInference.toDouble(value), threshold));
                  }
                  modified = true;
              }
  
              if(scaleResponse && yData != null) {
                  Double value = TypeInference.toDouble(yData);
  
                  yData = scale(value, threshold);
                  modified = true;
              }
  
              if(modified) {
                  Integer rId = e.getKey();
                  Record newR = new Record(xData, yData, r.getYPredicted(), r.getYPredictedProbabilities());
  
                  //we call below the recalculateMeta()
                  newData._unsafe_set(rId, newR);
              }
          });
  
          //Reset Meta info
          newData.recalculateMeta();
      }
docs: {@inheritDoc}