[skl] Enable cat feature without specifying tree method. (#9353)
This commit is contained in:
parent
39390cc2ee
commit
e964654b8f
@ -930,8 +930,7 @@ class XGBModel(XGBModelBase):
|
|||||||
callbacks = self.callbacks if self.callbacks is not None else callbacks
|
callbacks = self.callbacks if self.callbacks is not None else callbacks
|
||||||
|
|
||||||
tree_method = params.get("tree_method", None)
|
tree_method = params.get("tree_method", None)
|
||||||
cat_support = {"gpu_hist", "approx", "hist"}
|
if self.enable_categorical and tree_method == "exact":
|
||||||
if self.enable_categorical and tree_method not in cat_support:
|
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"Experimental support for categorical data is not implemented for"
|
"Experimental support for categorical data is not implemented for"
|
||||||
" current tree method yet."
|
" current tree method yet."
|
||||||
|
|||||||
@ -1390,7 +1390,6 @@ def test_categorical():
|
|||||||
X, y = tm.make_categorical(n_samples=32, n_features=2, n_categories=3, onehot=False)
|
X, y = tm.make_categorical(n_samples=32, n_features=2, n_categories=3, onehot=False)
|
||||||
ft = ["c"] * X.shape[1]
|
ft = ["c"] * X.shape[1]
|
||||||
reg = xgb.XGBRegressor(
|
reg = xgb.XGBRegressor(
|
||||||
tree_method="hist",
|
|
||||||
feature_types=ft,
|
feature_types=ft,
|
||||||
max_cat_to_onehot=1,
|
max_cat_to_onehot=1,
|
||||||
enable_categorical=True,
|
enable_categorical=True,
|
||||||
@ -1409,7 +1408,7 @@ def test_categorical():
|
|||||||
onehot, y = tm.make_categorical(
|
onehot, y = tm.make_categorical(
|
||||||
n_samples=32, n_features=2, n_categories=3, onehot=True
|
n_samples=32, n_features=2, n_categories=3, onehot=True
|
||||||
)
|
)
|
||||||
reg = xgb.XGBRegressor(tree_method="hist")
|
reg = xgb.XGBRegressor()
|
||||||
reg.fit(onehot, y, eval_set=[(onehot, y)])
|
reg.fit(onehot, y, eval_set=[(onehot, y)])
|
||||||
from_enc = reg.evals_result()["validation_0"]["rmse"]
|
from_enc = reg.evals_result()["validation_0"]["rmse"]
|
||||||
predt_enc = reg.predict(onehot)
|
predt_enc = reg.predict(onehot)
|
||||||
|
|||||||
@ -308,7 +308,7 @@ def test_dask_sparse(client: "Client") -> None:
|
|||||||
|
|
||||||
|
|
||||||
def run_categorical(client: "Client", tree_method: str, X, X_onehot, y) -> None:
|
def run_categorical(client: "Client", tree_method: str, X, X_onehot, y) -> None:
|
||||||
parameters = {"tree_method": tree_method, "max_cat_to_onehot": 9999} # force onehot
|
parameters = {"tree_method": tree_method, "max_cat_to_onehot": 9999} # force onehot
|
||||||
rounds = 10
|
rounds = 10
|
||||||
m = xgb.dask.DaskDMatrix(client, X_onehot, y, enable_categorical=True)
|
m = xgb.dask.DaskDMatrix(client, X_onehot, y, enable_categorical=True)
|
||||||
by_etl_results = xgb.dask.train(
|
by_etl_results = xgb.dask.train(
|
||||||
@ -364,9 +364,9 @@ def run_categorical(client: "Client", tree_method: str, X, X_onehot, y) -> None:
|
|||||||
check_model_output(reg.get_booster())
|
check_model_output(reg.get_booster())
|
||||||
|
|
||||||
reg = xgb.dask.DaskXGBRegressor(
|
reg = xgb.dask.DaskXGBRegressor(
|
||||||
enable_categorical=True, n_estimators=10
|
enable_categorical=True, n_estimators=10, tree_method="exact"
|
||||||
)
|
)
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError, match="categorical data"):
|
||||||
reg.fit(X, y)
|
reg.fit(X, y)
|
||||||
# check partition based
|
# check partition based
|
||||||
reg = xgb.dask.DaskXGBRegressor(
|
reg = xgb.dask.DaskXGBRegressor(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user