Как видно из документации для GroupKFold
,
вы используете ее, когда хотите иметь непересекающихся групп для K-fold .
Это означает, что, если у вас нет отдельных групп данных, которые необходимо разделить при создании K-сгиба, вы не будете использовать этот метод.
Как говорится, для данного примера , вы должны вручную создать groups
,
, который должен быть похожим на массив объектом, имеющим ту же форму, что и ваши y
.
И
количество отдельных групп должно быть как минимум равным количеству сгибов
Ниже приведен пример кода из документации:
import numpy as np
from sklearn.model_selection import GroupKFold
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([1, 2, 3, 4])
groups = np.array([0, 0, 2, 2])
group_kfold = GroupKFold(n_splits=2)
group_kfold.get_n_splits(X, y, groups)
Вы можете видеть, что groups
имеет ту же форму, что и y
,
и имеет две различные группы 0, 2
, что соответствует количеству сгибов.
РЕДАКТИРОВАНИЕ:
get_n_splits(groups)
метод GroupKFold
объект возвращает количество итераций разбиения в перекрестном валидаторе , которое мы можем передать в качестве аргумента для ключевого слова cv
для функции cross_val_score
.
clf = GridSearchCV(estimator=svm,
param_grid=p_grid,
cv=inner_cv.get_n_splits(groups=y_iris))
nested_score = cross_val_score(clf, X=X_iris, y=y_iris,
cv=outer_cv.get_n_splits(groups=y_iris))