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