コード例 #1
0
  public double sfaErrorObsNormed() {
    // System.out.println("****"+sfa()+"****");
    // int nPieceWiseParmsExp = expSpikePatternData.getSpikePatternClass().getnPieceWiseParms();
    int nPieceWiseParmsModel = patternClassifier.getSpikePatternClass().getnPieceWiseParms();
    double error = 0;
    SolverResultsStat modelStats = null;
    if (nPieceWiseParmsModel > 0) { // ASP, NASP, X
      modelStats = patternClassifier.getSolverResultsStats()[nPieceWiseParmsModel - 1];
    } else { // ASP error for other comps. for example, TSWB
      patternClassifier.calculateAdaptationForNonSP(0);
      modelStats = patternClassifier.getSolverResultsStats()[1]; // idx 1 for linear regression
    }

    int modelNsfaISIs1 = 1 + modelStats.getBreakPoint(); // 0-based idx ; hence +1
    int modelNsfaISIs2 = modelSpikePattern.getISIs().length - modelNsfaISIs1; // remaining
    double[] model =
        new double[] {
          modelStats.getM1(),
          modelStats.getC1(),
          modelNsfaISIs1,
          modelStats.getM2(),
          modelStats.getC2(),
          modelNsfaISIs2
        };
    PatternFeature[] exp =
        new PatternFeature[] {
          expSpikePatternData.getSfaLinearM1(),
          expSpikePatternData.getSfaLinearb1(),
          expSpikePatternData.getNSfaISIs1(),
          expSpikePatternData.getSfaLinearM2(),
          expSpikePatternData.getSfaLinearb2(),
          expSpikePatternData.getNSfaISIs2()
        };

    // System.out.println(patternClassifier.getDynamicFeatWeightMatrix().size());
    float sfa1Weight =
        patternClassifier.getDynamicFeatWeightMatrix().get(PatternFeatureID.n_sfa_isis1);
    float sfa2weight =
        patternClassifier.getDynamicFeatWeightMatrix().get(PatternFeatureID.n_sfa_isis2);

    for (int i = 0; i < 6; i++) {
      // SFA 1
      if (i == 0) { // m1
        error += sfa1Weight * NormalizedErrorObsNormed(exp[i], model[i]);
        continue;
      }
      if (i == 1) { // b1
        error += sfa1Weight * NormalizedErrorObsNormed(exp[i], model[i]);
        continue;
      }
      if (i == 2) { // nsfaisis1		
        error += sfa1Weight * NormalizedErrorObsNormed(exp[i], model[i]);
        continue;
      }
      // SFA 2
      if (i == 3) { // m2
        error += sfa2weight * NormalizedErrorObsNormed(exp[i], model[i]);
        continue;
      }
      if (i == 4) { // b2
        error += sfa2weight * NormalizedErrorObsNormed(exp[i], model[i]);
        continue;
      }
      if (i == 5) { // nsfaisis 2
        error += sfa2weight * NormalizedErrorObsNormed(exp[i], model[i]);
        continue;
      }
    }

    if (display) {
      displayRoutineForSFA(exp, model, error);
    }
    return error;
  }