code: public void setTrainingProportion(double trainingProportion)
      {
          //+- Inf case captured in >1 <= 0 case
          if(trainingProportion > 1 || trainingProportion <= 0 || Double.isNaN(trainingProportion))
              throw new ArithmeticException("Training Proportion is invalid");
          this.trainingProportion = trainingProportion;
      }
docs: The GB version uses the whole data set at each iteration. SGB can use a
  fraction of the data set at each iteration in order to reduce overfitting
  and add randomness.
  
  @param trainingProportion the fraction of training the data set to use
  for each iteration of SGB
  @throws ArithmeticException if the trainingPortion is not a valid
  fraction in (0, 1]