Как настроить итератор перекрестной проверки подлинности sklearn по индексам?

Похоже на Пользовательский перекрестный валидатор split sklearn Я хочу определить свои собственные расщепления для GridSearchCV, для которых мне нужно настроить встроенный итератор перекрестной проверки.

Я хочу передать свой собственный набор тестов тестовых тестов для перекрестной проверки в GridSearch вместо того, чтобы позволить итератору определять их для меня. Я просмотрел доступные cv-итераторы на странице документации sklearn, но не смог найти его.

Например, я хочу реализовать что-то вроде этого Данные имеют 9 образцов В 2 раза cv я создаю свой собственный набор тестовых индексов

>>> train_indices = [[1,3,5,7,9],[2,4,6,8]]
>>> test_indices = [[2,4,6,8],[1,3,5,7,9]]
                 1st fold^    2nd fold^
>>> custom_cv = sklearn.cross_validation.customcv(train_indices,test_indices)
>>> clf = GridSearchCV(X,y,params,cv=custom_cv)

Что можно использовать для работы как customcv?

Ответ 1

На самом деле, итераторы перекрестной проверки - это просто: Итераторы. На каждой итерации они возвращают кортеж поезда/теста. Затем это должно работать для вас:

custom_cv = zip(train_indices, test_indices)

Кроме того, для конкретного случая, о котором вы упоминаете, вы можете сделать

import numpy as np
labels = np.arange(0, 10) % 2
from sklearn.cross_validation import LeaveOneLabelOut
cv = LeaveOneLabelOut(labels)

Заметим, что list(cv) дает

[(array([1, 3, 5, 7, 9]), array([0, 2, 4, 6, 8])),
 (array([0, 2, 4, 6, 8]), array([1, 3, 5, 7, 9]))]

Ответ 2

На самом деле вышеприведенное решение возвращает каждую строку в виде сгиба, что действительно нужно:

    [(train_indices, test_indices)] # for one fold

    [(train_indices, test_indices), # 1stfold
    (train_indices, test_indices)] # 2nd fold etc