package water.api; import hex.klime.KLimeModel; import water.api.schemas3.ModelMetricsRegressionV3; import water.api.schemas3.TwoDimTableV3; import water.util.TwoDimTable; public class ModelMetricsKLimeV3<I extends KLimeModel.ModelMetricsKLime, S extends ModelMetricsKLimeV3<I, S>> extends ModelMetricsRegressionV3<I, S> { @API(help="Number of clusters.", direction=API.Direction.OUTPUT) public int k; @API(help="Local metrics calculated for each cluster.", direction=API.Direction.OUTPUT) public TwoDimTableV3 cluster_metrics; @Override public S fillFromImpl(I modelMetrics) { super.fillFromImpl(modelMetrics); k = modelMetrics._clusterMetrics.length; String[] clusterNames = new String[k]; for (int i = 0; i < k; i++) clusterNames[i] = Integer.toString(i); TwoDimTable cm = new TwoDimTable("Cluster Metrics", "Metrics calculated from cluster-local observations", clusterNames, new String[]{"Uses Global Model", "r2", "MSE", "RMSE", "nobs"}, new String[]{"string", "double", "double", "double", "int"}, null, "Cluster"); for (int i = 0; i < k; i++) { cm.set(i, 0, Boolean.toString(modelMetrics._usesGlobalModel[i])); cm.set(i, 1, modelMetrics._clusterMetrics[i].r2()); cm.set(i, 2, modelMetrics._clusterMetrics[i].mse()); cm.set(i, 3, modelMetrics._clusterMetrics[i].rmse()); cm.set(i, 4, modelMetrics._clusterMetrics[i]._nobs); } cluster_metrics = new TwoDimTableV3().fillFromImpl(cm); return (S) this; } }