Skip to content

Commit

Permalink
GH-15809: add AIC and Loglikelihood to ModelMetricsBinomial
Browse files Browse the repository at this point in the history
  • Loading branch information
syzonyuliia-h2o committed Jan 17, 2024
1 parent e0dc8e8 commit 0ff937d
Show file tree
Hide file tree
Showing 7 changed files with 25 additions and 6 deletions.
2 changes: 1 addition & 1 deletion h2o-algos/src/main/java/hex/psvm/MetricBuilderPSVM.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public ModelMetrics makeModelMetrics(Model m, Frame f, Frame frameWithWeights, F
} else {
auc = AUC2.emptyAUC();
}
ModelMetricsBinomial mm = new ModelMetricsBinomial(m, f, _count, mse, _domain, sigma, auc, Double.NaN, null, _customMetric);
ModelMetricsBinomial mm = new ModelMetricsBinomial(m, f, _count, mse, _domain, sigma, auc, Double.NaN, Double.NaN, Double.NaN, null, _customMetric);
if (m != null) m.addModelMetrics(mm);
return mm;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public MetricBuilderAnomalySupervised(String[] domain) {
auc = AUC2.emptyAUC();
}
ModelMetricsBinomial mm = new ModelMetricsBinomial(m, f, _count, mse, _domain,
sigma, auc, logloss, null, _customMetric);
sigma, auc, logloss, 0, 0, null, _customMetric);
if (m != null) {
m.addModelMetrics(mm);
}
Expand Down
15 changes: 13 additions & 2 deletions h2o-core/src/main/java/hex/ModelMetricsBinomial.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,19 @@
public class ModelMetricsBinomial extends ModelMetricsSupervised {
public final AUC2 _auc;
public final double _logloss;
public final double _loglikelihood;
public final double _aic;
public double _mean_per_class_error;
public final GainsLift _gainsLift;

public ModelMetricsBinomial(Model model, Frame frame, long nobs, double mse, String[] domain,
double sigma, AUC2 auc, double logloss, GainsLift gainsLift,
double sigma, AUC2 auc, double logloss, double loglikelihood, double aic, GainsLift gainsLift,
CustomMetric customMetric) {
super(model, frame, nobs, mse, domain, sigma, customMetric);
_auc = auc;
_logloss = logloss;
_loglikelihood = loglikelihood;
_aic = aic;
_gainsLift = gainsLift;
_mean_per_class_error = cm() == null ? Double.NaN : cm().mean_per_class_error();
}
Expand All @@ -49,6 +53,8 @@ public String toString() {
sb.append(" pr_auc: " + (float)_auc.pr_auc() + "\n");
}
sb.append(" logloss: " + (float)_logloss + "\n");
sb.append(" loglikelihood: " + (float)_loglikelihood + "\n");
sb.append(" AIC: " + (float)_aic + "\n");
sb.append(" mean_per_class_error: " + (float)_mean_per_class_error + "\n");
sb.append(" default threshold: " + (_auc == null ? 0.5 : (float)_auc.defaultThreshold()) + "\n");
if (cm() != null) sb.append(" CM: " + cm().toASCII());
Expand All @@ -57,6 +63,8 @@ public String toString() {
}

public double logloss() { return _logloss; }
public double loglikelihood() { return _loglikelihood; }
public double aic() { return _aic; }
public double mean_per_class_error() { return _mean_per_class_error; }
@Override public AUC2 auc_obj() { return _auc; }
@Override public ConfusionMatrix cm() {
Expand Down Expand Up @@ -161,6 +169,7 @@ private static class BinomialMetrics extends MRTask<BinomialMetrics> {

public static class MetricBuilderBinomial<T extends MetricBuilderBinomial<T>> extends MetricBuilderSupervised<T> {
protected double _logloss;
protected double _loglikelihood;
protected AUC2.AUCBuilder _auc;

public MetricBuilderBinomial( String[] domain ) { super(2,domain); _auc = new AUC2.AUCBuilder(AUC2.NBINS); }
Expand Down Expand Up @@ -256,6 +265,8 @@ private ModelMetrics makeModelMetrics(final Model m, final Frame f, final Frame

private ModelMetrics makeModelMetrics(Model m, Frame f, GainsLift gl) {
double mse = Double.NaN;
double loglikelihood = Double.NaN;
double aic = Double.NaN;
double logloss = Double.NaN;
double sigma = Double.NaN;
final AUC2 auc;
Expand All @@ -267,7 +278,7 @@ private ModelMetrics makeModelMetrics(Model m, Frame f, GainsLift gl) {
} else {
auc = new AUC2();
}
ModelMetricsBinomial mm = new ModelMetricsBinomial(m, f, _count, mse, _domain, sigma, auc, logloss, gl, _customMetric);
ModelMetricsBinomial mm = new ModelMetricsBinomial(m, f, _count, mse, _domain, sigma, auc, logloss, loglikelihood, aic, gl, _customMetric);
if (m!=null) m.addModelMetrics(mm);
return mm;
}
Expand Down
2 changes: 1 addition & 1 deletion h2o-core/src/main/java/hex/ModelMetricsBinomialGLM.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public ModelMetricsBinomialGLM(Model model, Frame frame, long nobs, double mse,
double sigma, AUC2 auc, double logloss, double resDev, double nullDev,
double aic, long nDof, long rDof, GainsLift gainsLift,
CustomMetric customMetric, double loglikelihood) {
super(model, frame, nobs, mse, domain, sigma, auc, logloss, gainsLift, customMetric);
super(model, frame, nobs, mse, domain, sigma, auc, logloss, loglikelihood, aic, gainsLift, customMetric);
_resDev = resDev;
_nullDev = nullDev;
_AIC = aic;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public ModelMetricsBinomialGeneric(Model model, Frame frame, long nobs, double m
CustomMetric customMetric, double mean_per_class_error, TwoDimTable thresholds_and_metric_scores,
TwoDimTable max_criteria_and_metric_scores, TwoDimTable confusion_matrix, double r2,
final String description) {
super(model, frame, nobs, mse, domain, sigma, auc, logloss, null, customMetric);
super(model, frame, nobs, mse, domain, sigma, auc, logloss, 0, 0, null, customMetric);
_gainsLiftTable = gainsLiftTable;
_thresholds_and_metric_scores = thresholds_and_metric_scores;
_max_criteria_and_metric_scores = max_criteria_and_metric_scores;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ public S fillFromImpl(ModelMetricsBinomialGeneric modelMetrics) {
super.fillFromImpl(modelMetrics);
r2 = modelMetrics.r2();
logloss = modelMetrics._logloss;
loglikelihood = modelMetrics._loglikelihood;
AIC = modelMetrics._aic;

if (modelMetrics != null && modelMetrics._confusion_matrix != null) {
final ConfusionMatrixV3 convertedConfusionMatrix = new ConfusionMatrixV3();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ public class ModelMetricsBinomialV3<I extends ModelMetricsBinomial, S extends Mo
@API(help="The logarithmic loss for this scoring run.", direction=API.Direction.OUTPUT)
public double logloss;

@API(help="The negative logarithmic likelihood for this scoring run.", direction=API.Direction.OUTPUT)
public double loglikelihood;

@API(help="The AIC for this scoring run.", direction=API.Direction.OUTPUT)
public double AIC;

@API(help="The AUC for this scoring run.", direction=API.Direction.OUTPUT)
public double AUC;

Expand Down

0 comments on commit 0ff937d

Please sign in to comment.