package hex; import water.H2O; import water.fvec.Frame; public class ModelMetricsSupervised extends ModelMetrics { public final String[] _domain;// Name of classes public final double _sigma; // stddev of the response (if any) public ModelMetricsSupervised(Model model, Frame frame, long nobs, double mse, String[] domain, double sigma) { super(model, frame, nobs, mse, null); _domain = domain; _sigma = sigma; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(super.toString()); return sb.toString(); } public final double r2() { double var = _sigma*_sigma; return 1.0-_MSE /var; } public static class MetricBuilderSupervised<T extends MetricBuilderSupervised<T>> extends MetricBuilder<T> { protected final String[] _domain; protected final int _nclasses; public MetricBuilderSupervised(int nclasses, String[] domain) { assert domain==null || domain.length >= nclasses; // Domain can be larger than the number of classes, if the score set includes "junk" levels _nclasses = nclasses; _domain = domain; _work = new double[_nclasses+1]; } @Override public double[] perRow(double[] ds, float[] yact, Model m) { throw H2O.fail("Subclasses must implement perRow."); } /** * Create a model metrics object * @param m Model * @param f Frame * @param adaptedFrame *@param preds Optional predictions (can be null), only used to compute Gains/Lift table for binomial problems @return */ @Override public ModelMetrics makeModelMetrics(Model m, Frame f, Frame adaptedFrame, Frame preds) { return null; } } }