Как настроить итератор перекрестной проверки подлинности 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