@Override public void serialize(Object o, JsonGenerator j, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { j.writeStartObject(); j.writeStringField("@class", o.getClass().getName()); j.writeObjectField("value", o); j.writeEndObject(); } }
@Override public void serialize(Object o, JsonGenerator j, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { j.writeStartObject(); j.writeStringField("class", o.getClass().getName()); j.writeObjectField("value", o); j.writeEndObject(); } }
@Override public void serialize(ConfusionMatrix<Integer> cm, JsonGenerator gen, SerializerProvider provider) throws IOException, JsonProcessingException { List<Integer> classes = cm.getClasses(); Map<Integer, Multiset<Integer>> matrix = cm.getMatrix(); Map<Integer, int[][]> m2 = new LinkedHashMap<>(); for (Integer i : matrix.keySet()) { //i = Actual class Multiset<Integer> ms = matrix.get(i); int[][] arr = new int[2][ms.size()]; int used = 0; for (Integer j : ms.elementSet()) { int count = ms.count(j); arr[0][used] = j; //j = Predicted class arr[1][used] = count; //prediction count used++; } m2.put(i, arr); } gen.writeStartObject(); gen.writeObjectField("classes", classes); gen.writeObjectField("matrix", m2); gen.writeEndObject(); } }
@Override public void serialize(ROC roc, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { if (roc.isExact()) { //For exact ROC implementation: force AUC and AUPRC calculation, so result can be stored in JSON, such //that we have them once deserialized. //Due to potentially huge size, exact mode doesn't store the original predictions in JSON roc.calculateAUC(); roc.calculateAUCPR(); } jsonGenerator.writeNumberField("thresholdSteps", roc.getThresholdSteps()); jsonGenerator.writeNumberField("countActualPositive", roc.getCountActualPositive()); jsonGenerator.writeNumberField("countActualNegative", roc.getCountActualNegative()); jsonGenerator.writeObjectField("counts", roc.getCounts()); jsonGenerator.writeNumberField("auc", roc.calculateAUC()); jsonGenerator.writeNumberField("auprc", roc.calculateAUCPR()); if (roc.isExact()) { //Store ROC and PR curves only for exact mode... they are redundant + can be calculated again for thresholded mode jsonGenerator.writeObjectField("rocCurve", roc.getRocCurve()); jsonGenerator.writeObjectField("prCurve", roc.getPrecisionRecallCurve()); } jsonGenerator.writeBooleanField("isExact", roc.isExact()); jsonGenerator.writeNumberField("exampleCount", roc.getExampleCount()); jsonGenerator.writeBooleanField("rocRemoveRedundantPts", roc.isRocRemoveRedundantPts()); }