我的數據有一個名爲pid
的列,並且不應在列車測試拆分之間泄漏具有相同pid
的記錄。我具有2層層疊模型 -使用自定義摺疊進行嵌套交叉驗證
- 內部層通過交VAL-預測火車上的數據
- 我然後建立在原始列車數據的外部模型構建一個內部預測矢量+內部預測矢量
- 我然後在測試數據
該過程應重複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
使用['skelan.cross_validation.KFold'](http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.KFold.html#sklearn.cross_validation.KFold)而不是嘗試構建您的自己的解決方案可能是更好的方法。 – ChrisP