private void processInstanceEvent()

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