Exemplo n.º 1
0
 @Override
 public double evaluate(
     JavaSparkContext sparkContext, PMML model, Path modelParentPath, JavaRDD<String> testData) {
   log.info("Evaluating model");
   JavaRDD<Rating> testRatingData = parsedToRatingRDD(toParsedRDD(testData));
   testRatingData = aggregateScores(testRatingData);
   MatrixFactorizationModel mfModel = pmmlToMFModel(sparkContext, model, modelParentPath);
   double eval;
   if (implicit) {
     double auc = AUC.areaUnderCurve(sparkContext, mfModel, testRatingData);
     log.info("AUC: {}", auc);
     eval = auc;
   } else {
     double rmse = RMSE.rmse(mfModel, testRatingData);
     log.info("RMSE: {}", rmse);
     eval = 1.0 / rmse;
   }
   return eval;
 }
Exemplo n.º 2
0
  public void evaluate(List<Sample> sampleList, Algorithm algorithm) {

    List<Score> scoreList = new ArrayList<Score>();
    for (Sample sample : sampleList) {
      scoreList.add(new Score(algorithm.predict(sample.getFeature()), sample.getLabel()));
    }
    Collections.sort(scoreList, new ComparatorScore());
    double counter = 0;
    double rankSum = 0;
    double positiveSample = 0;
    double negtiveSample = 0;
    for (Score s : scoreList) {
      if (s.label > 0) {
        rankSum += scoreList.size() - counter;
        positiveSample++;
      } else {
        negtiveSample++;
      }
      counter++;
    }

    // report.
    System.out.println("AUC: " + AUC.measure(algorithm, sampleList));
    System.out.println(
        "AUC: "
            + (positiveSample > 0 && negtiveSample > 0
                ? 1.0d
                    * (rankSum - positiveSample * (positiveSample + 1) / 2)
                    / (positiveSample * negtiveSample)
                : 1));
    System.out.println("Positive sample number: " + positiveSample);
    System.out.println("Negative sample number: " + negtiveSample);
    System.out.println("Max score: " + scoreList.get(0).score);
    System.out.println("Middle score: " + scoreList.get(scoreList.size() / 2).score);
    System.out.println("Min score: " + scoreList.get(scoreList.size() - 1).score);
  }