docs: public void run(final List<Tuple> data) {
          List<Tuple> dataCopy = new ArrayList<>(data);
          this.labels = data.parallelStream().map(x -> x.label).collect(Collectors.toSet());
          if (shuffleData) {
              Collections.shuffle(dataCopy);
          }
  
          int chunkSize = data.size() / nfold;
  
          int reminder = data.size() % chunkSize;
  
          for (int i = data.size() - 1; i > data.size() - 1 - reminder; i--) {
              LOG.info("Dropping the tail id: " + data.get(i).id);
          }
  
          for (int i = 0; i < nfold; i++) {
              System.err.println("Cross validation round " + (i + 1) + "/" + nfold);
              List<Tuple> testing = new ArrayList<>(data.subList(i, i + chunkSize));
              List<Tuple> training = new ArrayList<>(data.subList(0, i));
              training.addAll(data.subList(i + chunkSize, data.size()));
  
              eval(training, testing, i);
          }
      }