Ensure predict leaf output 1-dim vector where there's only 1 tree. (#6889)
This commit is contained in:
parent
54afa3ac7a
commit
8760ec4827
@ -54,8 +54,8 @@ After 1.4 release, we added a new parameter called ``strict_shape``, one can set
|
|||||||
Output is a 4-dim array with ``(n_samples, n_iterations, n_classes, n_trees_in_forest)``
|
Output is a 4-dim array with ``(n_samples, n_iterations, n_classes, n_trees_in_forest)``
|
||||||
as shape. ``n_trees_in_forest`` is specified by the ``numb_parallel_tree`` during
|
as shape. ``n_trees_in_forest`` is specified by the ``numb_parallel_tree`` during
|
||||||
training. When strict shape is set to False, output is a 2-dim array with last 3 dims
|
training. When strict shape is set to False, output is a 2-dim array with last 3 dims
|
||||||
concatenated into 1. When using ``apply`` method in scikit learn interface, this is set
|
concatenated into 1. Also the last dimension is dropped if it eqauls to 1. When using
|
||||||
to False by default.
|
``apply`` method in scikit learn interface, this is set to False by default.
|
||||||
|
|
||||||
|
|
||||||
Other than these prediction types, there's also a parameter called ``iteration_range``,
|
Other than these prediction types, there's also a parameter called ``iteration_range``,
|
||||||
|
|||||||
@ -96,6 +96,10 @@ inline void CalcPredictShape(bool strict_shape, PredictionType type, size_t rows
|
|||||||
forest = std::max(static_cast<decltype(forest)>(1), forest);
|
forest = std::max(static_cast<decltype(forest)>(1), forest);
|
||||||
shape[3] = forest;
|
shape[3] = forest;
|
||||||
*out_dim = shape.size();
|
*out_dim = shape.size();
|
||||||
|
} else if (chunksize == 1) {
|
||||||
|
*out_dim = 1;
|
||||||
|
shape.resize(*out_dim);
|
||||||
|
shape.front() = rows;
|
||||||
} else {
|
} else {
|
||||||
*out_dim = 2;
|
*out_dim = 2;
|
||||||
shape.resize(*out_dim);
|
shape.resize(*out_dim);
|
||||||
|
|||||||
@ -75,6 +75,11 @@ def run_predict_leaf(predictor):
|
|||||||
first = sliced[0, ...]
|
first = sliced[0, ...]
|
||||||
|
|
||||||
assert np.prod(first.shape) == classes * num_parallel_tree * ntree_limit
|
assert np.prod(first.shape) == classes * num_parallel_tree * ntree_limit
|
||||||
|
|
||||||
|
# When there's only 1 tree, the output is a 1 dim vector
|
||||||
|
booster = xgb.train({"tree_method": "hist"}, num_boost_round=1, dtrain=m)
|
||||||
|
assert booster.predict(m, pred_leaf=True).shape == (rows, )
|
||||||
|
|
||||||
return leaf
|
return leaf
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user