Meine Daten eine Spalte pid
und Datensätze mit denselben pid
genannt sollte nicht zwischen Zug-Test Splits durchgesickert sein. Ich habe eine 2-Schichten gestapelt model -verschachtelte Kreuzvalidierung mit benutzerdefinierter Faltung
- innere Schicht bildet einen inneren-Prädiktionsvektor durch Kreuz val-Vorhersage auf den Bahndaten
- I dann ein externes Modell auf den ursprünglichen Zug-Daten aufzubauen + interner Prädiktionsvektor
- ich dann Leistung auf den
Testdaten beurteilen sollte Dieser Prozess X5 wiederholt werden.
Der beste Weg, an den ich denken konnte, wurde durch pid % 25
in der externen Schicht und pid % 5
in der internen Schicht geteilt.
Der Code kam umständlich und nicht sehr pythonisch. Gibt es einen besseren Weg, das zu tun? Fehle ich eine saubere und saubere Verwendung von Sklearn/Python oder gibt es einen grundlegenden Fehler in meinem Design?
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
Verwenden Sie ['skelarn.cross_validation.KFold'] (http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.KFold.html#sklearn.cross_validation.KFold), anstatt zu versuchen, Ihre eigene Lösung könnte ein besserer Ansatz sein. – ChrisP