@@ -128,8 +128,7 @@ def test_dask_missing_value_reg():
|
||||
|
||||
|
||||
def test_dask_missing_value_cls():
|
||||
# Multi-class doesn't handle empty DMatrix well. So we use lesser workers.
|
||||
with LocalCluster(n_workers=2) as cluster:
|
||||
with LocalCluster() as cluster:
|
||||
with Client(cluster) as client:
|
||||
X_0 = np.ones((kRows // 2, kCols))
|
||||
X_1 = np.zeros((kRows // 2, kCols))
|
||||
@@ -234,7 +233,7 @@ def test_sklearn_grid_search():
|
||||
assert len(means) == len(set(means))
|
||||
|
||||
|
||||
def run_empty_dmatrix(client, parameters):
|
||||
def run_empty_dmatrix_reg(client, parameters):
|
||||
|
||||
def _check_outputs(out, predictions):
|
||||
assert isinstance(out['booster'], xgb.dask.Booster)
|
||||
@@ -271,6 +270,46 @@ def run_empty_dmatrix(client, parameters):
|
||||
_check_outputs(out, predictions)
|
||||
|
||||
|
||||
def run_empty_dmatrix_cls(client, parameters):
|
||||
n_classes = 4
|
||||
|
||||
def _check_outputs(out, predictions):
|
||||
assert isinstance(out['booster'], xgb.dask.Booster)
|
||||
assert len(out['history']['validation']['merror']) == 2
|
||||
assert isinstance(predictions, np.ndarray)
|
||||
assert predictions.shape[1] == n_classes, predictions.shape
|
||||
|
||||
kRows, kCols = 1, 97
|
||||
X = dd.from_array(np.random.randn(kRows, kCols))
|
||||
y = dd.from_array(np.random.randint(low=0, high=n_classes, size=kRows))
|
||||
dtrain = xgb.dask.DaskDMatrix(client, X, y)
|
||||
parameters['objective'] = 'multi:softprob'
|
||||
parameters['num_class'] = n_classes
|
||||
|
||||
out = xgb.dask.train(client, parameters,
|
||||
dtrain=dtrain,
|
||||
evals=[(dtrain, 'validation')],
|
||||
num_boost_round=2)
|
||||
predictions = xgb.dask.predict(client=client, model=out,
|
||||
data=dtrain).compute()
|
||||
_check_outputs(out, predictions)
|
||||
|
||||
# train has more rows than evals
|
||||
valid = dtrain
|
||||
kRows += 1
|
||||
X = dd.from_array(np.random.randn(kRows, kCols))
|
||||
y = dd.from_array(np.random.randint(low=0, high=n_classes, size=kRows))
|
||||
dtrain = xgb.dask.DaskDMatrix(client, X, y)
|
||||
|
||||
out = xgb.dask.train(client, parameters,
|
||||
dtrain=dtrain,
|
||||
evals=[(valid, 'validation')],
|
||||
num_boost_round=2)
|
||||
predictions = xgb.dask.predict(client=client, model=out,
|
||||
data=valid).compute()
|
||||
_check_outputs(out, predictions)
|
||||
|
||||
|
||||
# No test for Exact, as empty DMatrix handling are mostly for distributed
|
||||
# environment and Exact doesn't support it.
|
||||
|
||||
@@ -278,11 +317,13 @@ def test_empty_dmatrix_hist():
|
||||
with LocalCluster(n_workers=5) as cluster:
|
||||
with Client(cluster) as client:
|
||||
parameters = {'tree_method': 'hist'}
|
||||
run_empty_dmatrix(client, parameters)
|
||||
run_empty_dmatrix_reg(client, parameters)
|
||||
run_empty_dmatrix_cls(client, parameters)
|
||||
|
||||
|
||||
def test_empty_dmatrix_approx():
|
||||
with LocalCluster(n_workers=5) as cluster:
|
||||
with Client(cluster) as client:
|
||||
parameters = {'tree_method': 'approx'}
|
||||
run_empty_dmatrix(client, parameters)
|
||||
run_empty_dmatrix_reg(client, parameters)
|
||||
run_empty_dmatrix_cls(client, parameters)
|
||||
|
||||
Reference in New Issue
Block a user