在Python中加入两个不同大小的列表

时间:2014-03-08 12:07:43

标签: python

我正在尝试编写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数据类型;它早些时候使用其他数据类型。

由于

2 个答案:

答案 0 :(得分:2)

不要重新发明轮子。您可以在sklearn.cross_validation模块中使用功能KFoldStratifiedKFold

参见文档:

  

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]