我正在尝试编写10倍交叉验证的代码。
即,将数据划分为10个大小相等的块。然后,对于10次迭代中的每次迭代,取出第i个块,并将剩余的90%用于测试数据。
对于第二次迭代,我需要加入前10%和最后80%。对于第三次迭代,我加入前20%,最后70%。等
(所以第一次迭代,前10%被删除,第二次迭代,第二次10%被删除等)
我的数据包含1000个项目,每个项目包含70个np.float类型值的数组
将为10个验证中的每个验证调用此循环,其中i = 0,i = 1 .... i = 9:
def get_training(input_array, i):
training = (input_array[:i*subset_size] + input_array[(i+1)*subset_size:])
return training
之前有效,但现在我收到了错误:
operands could not be broadcast together with shapes (100,70) (800,70)
我认为这可能是由于np.float数据类型;它早些时候使用其他数据类型。
由于
答案 0 :(得分:2)
不要重新发明轮子。您可以在sklearn.cross_validation
模块中使用功能KFold
和StratifiedKFold
。
参见文档:
K-Folds交叉验证迭代器。
提供列车/测试索引以在列车测试集中拆分数据。分裂 数据集分为k个连续折叠(没有改组)。
然后每个折叠使用一次验证集,同时保留k-1 折叠形成训练集。
答案 1 :(得分:1)
尝试:
training = np.concatenate((input_array[:i*subset_size], input_array[(i+1)*subset_size:]))
(对于numpy数组,+运算符将值加在一起,假设它们具有相同的形状:)
a = np.array(range(10))
print a + a # => [ 0 2 4 6 8 10 12 14 16 18]