in samoa-api/src/main/java/org/apache/samoa/learners/classifiers/rules/distributed/AMRRuleSetProcessor.java [120:171]
private void processInstanceEvent(InstanceContentEvent instanceEvent) {
Instance instance = instanceEvent.getInstance();
boolean predictionCovered = false;
boolean trainingCovered = false;
boolean continuePrediction = instanceEvent.isTesting();
boolean continueTraining = instanceEvent.isTraining();
ErrorWeightedVote errorWeightedVote = newErrorWeightedVote();
for (PassiveRule aRuleSet : this.ruleSet) {
if (!continuePrediction && !continueTraining)
break;
if (aRuleSet.isCovering(instance)) {
predictionCovered = true;
if (continuePrediction) {
double[] vote = aRuleSet.getPrediction(instance);
double error = aRuleSet.getCurrentError();
errorWeightedVote.addVote(vote, error);
if (!this.unorderedRules)
continuePrediction = false;
}
if (continueTraining) {
if (!isAnomaly(instance, aRuleSet)) {
trainingCovered = true;
aRuleSet.updateStatistics(instance);
// Send instance to statistics PIs
sendInstanceToRule(instance, aRuleSet.getRuleNumberID());
if (!this.unorderedRules)
continueTraining = false;
}
}
}
}
if (predictionCovered) {
// Combined prediction
ResultContentEvent rce = newResultContentEvent(errorWeightedVote.computeWeightedVote(), instanceEvent);
resultStream.put(rce);
}
boolean defaultPrediction = instanceEvent.isTesting() && !predictionCovered;
boolean defaultTraining = instanceEvent.isTraining() && !trainingCovered;
if (defaultPrediction || defaultTraining) {
instanceEvent.setTesting(defaultPrediction);
instanceEvent.setTraining(defaultTraining);
this.defaultRuleStream.put(instanceEvent);
}
}