/** * Classify the input. * * @param input The input to classify. */ @Override public int classify(MLData input) { if (this.classificationTarget < 0 || this.classificationTarget >= this.events.size()) { throw new BayesianError( "Must specify classification target by calling setClassificationTarget."); } int[] d = this.determineClasses(input); // properly tag all of the events for (int i = 0; i < this.events.size(); i++) { BayesianEvent event = this.events.get(i); if (i == this.classificationTarget) { this.query.defineEventType(event, EventType.Outcome); } else if (this.inputPresent[i]) { this.query.defineEventType(event, EventType.Evidence); this.query.setEventValue(event, d[i]); } else { this.query.defineEventType(event, EventType.Hidden); this.query.setEventValue(event, d[i]); } } // loop over and try each outcome choice BayesianEvent outcomeEvent = this.events.get(this.classificationTarget); this.classificationProbabilities = new double[outcomeEvent.getChoices().size()]; for (int i = 0; i < outcomeEvent.getChoices().size(); i++) { this.query.setEventValue(outcomeEvent, i); this.query.execute(); classificationProbabilities[i] = this.query.getProbability(); } return EngineArray.maxIndex(this.classificationProbabilities); }
public int winner(MLData output) { return EngineArray.maxIndex(output.getData()); }