package hex.gbm; import hex.gbm.DTree.TreeModel.CompressedTree; import water.*; import water.fvec.Chunk; public abstract class DTreeScorer<T extends DTreeScorer<T>> extends MRTask2<T> { /* @IN */ final protected int _ncols; /* @IN */ final protected int _nclass; /* @IN */ final protected Key[][] _treeKeys; protected transient CompressedTree[][] _trees; public DTreeScorer(int ncols, int nclass, Key[][] treeKeys) { _ncols = ncols; _nclass = nclass; _treeKeys = treeKeys; } @Override protected final void setupLocal() { int ntrees = _treeKeys.length; _trees = new CompressedTree[ntrees][]; for (int t=0; t<ntrees; t++) { Key[] treek = _treeKeys[t]; _trees[t] = new CompressedTree[treek.length]; // FIXME remove get by introducing fetch class for all trees for (int i=0; i<treek.length; i++) { if (treek[i]!=null) _trees[t][i] = UKV.get(treek[i]); } } } protected final Chunk chk_oobt(Chunk chks[]) { return chks[_ncols+1+_nclass+_nclass+_nclass]; } protected final Chunk chk_tree(Chunk chks[], int c) { return chks[_ncols+1+c]; } protected final Chunk chk_resp( Chunk chks[] ) { return chks[_ncols]; } protected void score0(double data[], float preds[], CompressedTree[] ts) { DTreeUtils.scoreTree(data, preds, ts); } }