Получение нескольких расколов из каждого сгиба в StraifiedKFold - PullRequest
0 голосов
/ 22 апреля 2020

Я хочу выполнить многослойную перекрестную проверку с использованием sklearn. Индексы поезда и теста можно получить с помощью

from sklearn.model_selection import StratifiedKFold

kf = StratifiedKFold(n_splits=10)

for fold, (train_index, test_index) in enumerate(kf.split(X, y), 1):
    X_train = X[train_index]
    y_train = y[train_index]
    X_test = X[test_index]
    y_test = y[test_index]

Однако я бы хотел выделить не одну, а две складки в стороне (одна для настройки гиперпараметров). Итак, я хочу, чтобы каждая итерация состояла из 8 сгибов для обучения, 1 для настройки и 1 для тестирования. Возможно ли это с помощью sklearns StraifiedKFold? Или мне нужно написать собственный метод разбиения?

1 Ответ

1 голос
/ 22 апреля 2020

Вы можете использовать StratifiedShuffleSplit для дальнейшего разделения набора тестов на стратифицированную также:

from sklearn.model_selection import StratifiedKFold, StratifiedShuffleSplit

kf = StratifiedKFold(n_splits=10)

for fold, (train_index, test_index) in enumerate(kf.split(X, y), 1):
    X_train = X[train_index]
    y_train = y[train_index]
    X_test = X[test_index]
    y_test = y[test_index]

    #stratified split on the test set
    sss = StratifiedShuffleSplit(n_splits=1, test_size=0.5, random_state=0)
    X_test_ix, X_tune_ix = next(sss.split(X_test, y_test))

    X_test_ = X_test[X_test_ix]
    y_test_ = y_test[X_test_ix]
    X_tune = X_test[X_tune_ix]
    y_tune = y_test[X_tune_ix]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...