Skip to content

Commit bda63b2

Browse files
author
Daniel Grindrod
committed
fix: Now resetting indexes for regression datasets when using group folds
1 parent b83c8a7 commit bda63b2

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

flaml/automl/task/generic_task.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,8 +442,8 @@ def prepare_data(
442442
X_train_all, y_train_all = shuffle(X_train_all, y_train_all, random_state=RANDOM_SEED)
443443
if data_is_df:
444444
X_train_all.reset_index(drop=True, inplace=True)
445-
if isinstance(y_train_all, pd.Series):
446-
y_train_all.reset_index(drop=True, inplace=True)
445+
if split_type in ["group", "uniform", "stratified"] and isinstance(y_train_all, pd.Series):
446+
y_train_all.reset_index(drop=True, inplace=True)
447447

448448
X_train, y_train = X_train_all, y_train_all
449449
state.groups_all = state.groups

test/automl/test_split.py

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from sklearn.datasets import fetch_openml
1+
import numpy as np
2+
from sklearn.datasets import fetch_openml, load_iris
23
from sklearn.metrics import accuracy_score
34
from sklearn.model_selection import GroupKFold, KFold, train_test_split
45

@@ -48,7 +49,7 @@ def test_time():
4849
_test(split_type="time")
4950

5051

51-
def test_groups():
52+
def test_groups_for_classification_task():
5253
from sklearn.externals._arff import ArffException
5354

5455
try:
@@ -88,6 +89,35 @@ def test_groups():
8889
automl.fit(X, y, **automl_settings)
8990

9091

92+
def test_groups_for_regression_task():
93+
"""Append nonsensical groups to iris dataset and use it to test that GroupKFold works for regression tasks"""
94+
iris_dict_data = load_iris(as_frame=True) # numpy arrays
95+
iris_data = iris_dict_data["frame"] # pandas dataframe data + target
96+
97+
rng = np.random.default_rng(42)
98+
iris_data["cluster"] = rng.integers(
99+
low=0, high=5, size=iris_data.shape[0]
100+
) # np.random.randint(0, 5, iris_data.shape[0])
101+
102+
automl = AutoML()
103+
X = iris_data[["sepal length (cm)", "sepal width (cm)", "petal length (cm)"]].to_numpy()
104+
y = iris_data["petal width (cm)"]
105+
X_train, X_test, y_train, y_test, groups_train, groups_test = train_test_split(
106+
X, y, iris_data["cluster"], random_state=42
107+
)
108+
automl_settings = {
109+
"max_iter": 5,
110+
"time_budget": -1,
111+
"metric": "r2",
112+
"task": "regression",
113+
"estimator_list": ["lgbm", "rf", "xgboost", "kneighbor"],
114+
"eval_method": "cv",
115+
"split_type": "uniform",
116+
"groups": groups_train,
117+
}
118+
automl.fit(X_train, y_train, **automl_settings)
119+
120+
91121
def test_stratified_groupkfold():
92122
from minio.error import ServerError
93123
from sklearn.model_selection import StratifiedGroupKFold
@@ -203,4 +233,4 @@ def get_n_splits(self, X=None, y=None, groups=None):
203233

204234

205235
if __name__ == "__main__":
206-
test_groups()
236+
test_groups_for_classification_task()

0 commit comments

Comments
 (0)