public static void main(String[] args) throws bsh.EvalError, java.io.IOException {
    // Process the command-line options
    commandOptions.process(args);

    System.out.println("Trainer = " + trainerConstructorOption.value.toString());
    ClassifierTrainer trainer = (ClassifierTrainer) trainerConstructorOption.value;
    InstanceList ilist = InstanceList.load(new File(instanceListFilenameOption.value));

    Random r = randomSeedOption.wasInvoked() ? new Random(randomSeedOption.value) : new Random();
    double t = trainingProportionOption.value;
    double v = validationProportionOption.value;
    InstanceList[] ilists = ilist.split(r, new double[] {t, v, 1 - t - v});
    System.err.println("Training...");
    Classifier c =
        trainer.train(
            ilists[0],
            ilists[1],
            null,
            (ClassifierEvaluating) classifierEvaluatorOption.value,
            null);
    if (printTrainAccuracyOption.value)
      System.out.print("Train accuracy = " + c.getAccuracy(ilists[0]) + "  ");
    if (printTestAccuracyOption.value)
      System.out.print("Test accuracy  = " + c.getAccuracy(ilists[2]));
    if (printTrainAccuracyOption.value || printTestAccuracyOption.value) System.out.println("");
    if (outputFilenameOption.wasInvoked()) {
      try {
        ObjectOutputStream oos =
            new ObjectOutputStream(new FileOutputStream(instanceListFilenameOption.value));
        oos.writeObject(c);
        oos.close();
      } catch (Exception e) {
        e.printStackTrace();
        throw new IllegalArgumentException(
            "Couldn't write classifier to filename " + instanceListFilenameOption.value);
      }
    }
  }