package hex.gbm;
import java.util.Arrays;
import water.Key;
import water.fvec.Chunk;
public class ResidualsCollector extends DTreeScorer<ResidualsCollector> {
public ResidualsCollector(int ncols, int nclass, Key[][] treeKeys) {
super(ncols, nclass, treeKeys);
}
@Override public void map(Chunk[] chks) {
double[] data = new double[_ncols];
float [] preds = new float[_nclass+1];
int ntrees = _trees.length;
Chunk cys = chk_resp(chks);
for( int tidx=0; tidx<ntrees; tidx++) { // tree
for (int row=0; row<cys._len; row++) {
// Make a prediction
for (int i=0;i<_ncols;i++) data[i] = chks[i].at0(row);
Arrays.fill(preds, 0);
score0(data, preds, _trees[tidx]);
if (_nclass==1) preds[1]=preds[0]; // regression shortcut
// Write tree predictions
for (int c=0;c<_nclass;c++) { // over all class
if (preds[1+c] != 0) {
Chunk ctree = chk_tree(chks, c);
ctree.set0(row, (float)(ctree.at0(row) + preds[1+c]));
}
}
}
}
}
}