私のデータにはpid
という列があり、同じpid
のレコードは列車テストの分割の間に漏れてはいけません。カスタム折りたたみによるネストされたクロスバリデーション
- 内部層は、私は、元の列車のデータ+に外部モデルを構築列車データ
- にクロスヴァル予測することによって、内部予測ベクトルを構築する - 私は、2層積層モデルが持っています私は、テスト・データのパフォーマンス
このプロセスは、X5を繰り返さなければならないを評価する内部予測ベクトル
考えられる最も良い方法は、外層にpid % 25
、内層にpid % 5
と分割されていました。
コードが煩雑で、非常にpythonicではありませんでした。それを行う良い方法はありますか?私は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