我希望得到ModelMatricsBinominalV3对象来提取 thresholds_and_metric_scores 变量 . 我有兴趣提取给定阈值的准确度,F1-分数,召回等 .
我目前的做法是:
h2oApi.predict(ModelMetricsListSchemaV3)
作品 - 但不包含 thresholds_and_metric_scores
而在PostMan中调用POST / 3 / Predictions / models / / frames / 工作正常,并在json String中返回 thresholds_and_metric_scores . 怎么可能是因为h2oApi在内部调用POST / 3 / Predictions / models / / frames / ?
This is my old implementation:
public String getModelMetrics(String modelId, String frameId, double threshold){
String url = buildHttpPath("/3/Predictions/models/" + modelId + "/frames/" + frameId);
int metricIndex = Integer.MIN_VALUE;
HttpClient client = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(url);
HttpResponse response;
String json = "";
try
{
response = client.execute(post);
json = EntityUtils.toString(response.getEntity());
}
catch (IOException exception)
{
LOG.error(exception.toString());
}
JsonObject var1 = new Gson().fromJson(json, JsonObject.class);
JsonArray var2 = var1.getAsJsonArray("model_metrics");
JsonElement var3 = var2.get(0);
JsonElement var4 = ((JsonObject) var3).get("thresholds_and_metric_scores");
JsonElement var5 = ((JsonObject) var4).get("data");
JsonArray var6 = (JsonArray) ((JsonArray) var5).get(0);
Double min = Double.MAX_VALUE;
for (int i = 0; i < var6.size(); i++)
{
Double currentElement = var6.get(i).getAsDouble();
Double diff = Math.abs(currentElement - threshold);
if (diff < min)
{
min = diff;
metricIndex = i;
}
}
LOG.info("Received threshold is: " + threshold);
LOG.info("Nearest Threshold is: " + var6.get(metricIndex).getAsDouble());
JsonArray accuracyColumn = (JsonArray) ((JsonArray) var5).get(4);
JsonArray f1Column = (JsonArray) ((JsonArray) var5).get(1);
JsonArray recallColumn = (JsonArray) ((JsonArray) var5).get(6);
JsonArray precisionColumn = (JsonArray) ((JsonArray) var5).get(5);
JsonArray tpColumn = (JsonArray) ((JsonArray) var5).get(14);
JsonArray tnColumn = (JsonArray) ((JsonArray) var5).get(11);
JsonArray fpColumn = (JsonArray) ((JsonArray) var5).get(13);
JsonArray fnColumn = (JsonArray) ((JsonArray) var5).get(12);
Double accuracy = accuracyColumn.get(metricIndex).getAsDouble();
Double f1 = f1Column.get(metricIndex).getAsDouble();
Double recall = recallColumn.get(metricIndex).getAsDouble();
Double precision = precisionColumn.get(metricIndex).getAsDouble();
int tp = tpColumn.get(metricIndex).getAsInt();
int tn = tnColumn.get(metricIndex).getAsInt();
int fp = fpColumn.get(metricIndex).getAsInt();
int fn = fnColumn.get(metricIndex).getAsInt();
return accuracy.toString() + ";" + f1.toString() + ";" + recall.toString() + ";" + precision.toString() + ";" + tp + ";" + tn + ";" + fp + ";" + fn;}
先感谢您!