【发布时间】:2016-08-17 23:19:48
【问题描述】:
我的数据有一个名为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而不是尝试构建自己的解决方案可能是更好的方法。
标签: python machine-learning scikit-learn cross-validation