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);
}