@Test public void testQuantileNALearn() { int ndim = 5; QuantileExtraTrees et = getQET(100, ndim, false); et.learnTrees(3, 3, 5); double[] x = new double[ndim]; for (int i = 0; i < x.length; i++) { x[i] = Double.NaN; } double[] val; val = et.getQuantiles(new Matrix(x, 1, ndim), 0.5); assertTrue(Double.isNaN(val[0])); }
/** * @param ndata * @param ndim */ public static QuantileExtraTrees getQET(int ndata, int ndim, boolean useWeights) { double[] output = new double[ndata]; Matrix m = new Matrix(ndata, ndim); // generate values for all outputs for (int row = 0; row < output.length; row++) { m.set(row, 1, row / (double) output.length); m.set(row, 2, 0.5); if (row == 5 || row == 6 || row == 7) { m.set(row, 2, Double.NaN); } output[row] = m.get(row, 1) > 0.55 ? 1 : 0; } QuantileExtraTrees et = new QuantileExtraTrees(m, output); et.setHasNaN(true); if (useWeights) { double[] w = new double[ndata]; for (int i = 0; i < w.length; i++) { w[i] = 0.5; } et.setWeights(w); } return et; }