public MaxentModel doTrain()

in liblinear-addon/src/main/java/LiblinearTrainer.java [100:151]


  public MaxentModel doTrain(DataIndexer indexer) throws IOException {

    List<Double> vy = new ArrayList<>();
    List<Feature[]> vx = new ArrayList<>();

    // outcomes
    int[] outcomes = indexer.getOutcomeList();

    int max_index = 0;
    
    // For each event ...
    for (int i = 0; i < indexer.getContexts().length; i++) {

      int outcome = outcomes[i];
      vy.add((double) outcome);

      int[] features = indexer.getContexts()[i];

      Feature[] x;
      if (bias >= 0) {
        x = new Feature[features.length + 1];
      } else {
        x = new Feature[features.length];
      }

      // for each feature ...
      for (int fi = 0; fi < features.length; fi++) {
        // TODO: SHOULD BE indexer.getNumTimesEventsSeen()[i] and not fi !!!
        x[fi] = new FeatureNode(features[fi] + 1, indexer.getNumTimesEventsSeen()[i]);
      } 

      if (features.length > 0) {
        max_index = Math.max(max_index, x[features.length - 1].getIndex());
      }
      
      vx.add(x);
    }

    Problem problem = constructProblem(vy, vx, max_index, bias);
    Parameter parameter = new Parameter(solverType, c, eps, p);
    
    Model liblinearModel = Linear.train(problem, parameter);

    Map<String, Integer> predMap = new HashMap<>();
    
    String[] predLabels = indexer.getPredLabels();
    for (int i = 0; i < predLabels.length; i++) {
      predMap.put(predLabels[i], i);
    }
    
    return new LiblinearModel(liblinearModel, indexer.getOutcomeLabels(), predMap);
  }