问题描述
我正在尝试编写10倍交叉验证的代码。
也就是说,将数据分成10个大小相等的块,然后对于10个迭代中的每个迭代,取出第i个块,并将其余90%用于测试数据。
对于第二次迭代,我需要将前10%与后80%结合在一起。 对于第三次迭代,我将前20%加入后70%。 等等。
(因此,第一次迭代将删除第一个10%,第二次迭代将第二个10%删除,依此类推)
我的数据包含1000个项目,每个项目都是np.float类型的70个值的数组
将为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数据类型所致; 它之前使用的是另一种数据类型。
谢谢
1楼
不要重新发明轮子。
您可以在sklearn.cross_validation
模块中使用功能和 。
参见文档:
K折交叉验证迭代器。
提供训练/测试索引以将数据拆分为训练测试集中的数据。 将数据集拆分为k个连续的折叠(不带混排)。
然后将每个折痕用于一次验证集,而剩下的k-1个折痕则来自训练集。
2楼
尝试:
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]