2016-04-24 2 views
0

Мои данные имеют столбец pid, и записи с тем же pid не должны просачиваться между поездами-испытаниями. У меня есть 2-х слоев сложены модель -вложенная перекрестная проверка с пользовательским складированием

  • Внутренний слой строит вектор внутреннего предсказания посредством кросс-Val-предсказания на поезд-данных
  • я затем построить внешнюю модель на оригинальном поезде-данных + внутренний предсказываемый вектор
  • я затем оценить производительность на тест-данных

Этот процесс должен быть повторен X5.

Лучший способ, о котором я мог думать, был разбит на pid % 25 во внешнем слое и pid % 5 во внутреннем слое.

Код получился громоздким и не очень питоническим. Есть ли лучший способ сделать это? Я пропустил некоторое аккуратное и чистое использование sklearn/python или есть некоторые фундаментальные недостатки в моем дизайне?

N = 5 

for external_fold in range(N): 

    ex_test = [x for x in range(N**2) if external_fold*N <= x % (N**2) < (external_fold+1)*N] 
    ex_train = [x for x in range(N**2) if x not in ex_test] 
    ex_train_index = X[(X.pid % N**2).isin(ex_train)].index 
    ex_test_index = X[(X.pid % N**2).isin(ex_test)].index 
    ... 
    for internal_fold in range(N): 
     in_train_index = X[(X.pid % N)!=internal_fold].index 
     in_test_index = X[(X.pid % N)==internal_fold].index 
     # build a vector of internal model predictions 

    # build external model and assess performance 
+0

Использование ['skelarn.cross_validation.KFold'] (http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.KFold.html#sklearn.cross_validation.KFold) вместо того, чтобы пытаться создать собственное решение может быть лучшим подходом. – ChrisP

ответ

1

У вас есть две потребности, которые только недавно были рассмотрены в Scikit-Learn, и должны быть включены в следующую выпущенную версию:

стратегии кросс-проверки с коррелированных образцов, хранившихся вместе

Новые CV splitter classes теперь включают LabelKFold и LabelShuffleSplit оба предназначены для обработки корпуса, если вы считаете, что элементы с одинаковыми pid должны находиться в одной и той же тестовой части.

Уплотненный кросс-валидация

Поперечной проверка итератор API был переработан для более эффективной поддержки вложенной перекрестной проверки. Вам больше не нужно передавать параметры, зависящие от данных, в конструктор стратегии перекрестной проверки. Таким образом, гнездование GridSearchCV в пределах GridSearchCV, каждое со своим собственным параметром cv, должно соответствовать вашим потребностям.

Обратите внимание: этот API по-прежнему очень свеж и открыт для изменения.

Смежные вопросы