我正在对多个数据集同时执行k折叠验证。我正在使用KFold从sklearn做10倍的验证。基本上,这将一个数据集划分为10个块,并在其中9个块上训练一个分类器,然后在剩下的第10个块上测试结果,然后执行相同的例程,但将测试集切换为一个新的第10个分区,并将其与现在包含在训练集中的旧测试集一起使用。我可以使用以下方法为单个数据集编写for循环:
for train, test in kfold.split(data):
print(train)
print(test)这方面的产出如下:
[1 2 3 4 5 6 7 8 9]
[0]
[0 2 3 4 5 6 7 8 9]
[1]
[0 1 3 4 5 6 7 8 9]
[2]
[0 1 2 4 5 6 7 8 9]
[3]
[0 1 2 3 5 6 7 8 9]
[4]
[0 1 2 3 4 6 7 8 9]
[5]
[0 1 2 3 4 5 7 8 9]
[6]
[0 1 2 3 4 5 6 8 9]
[7]
[0 1 2 3 4 5 6 7 9]
[8]
[0 1 2 3 4 5 6 7 8]
[9]其中,第一个数组是从数组的初始数据集数组中使用的训练集的索引,而第二个数组是测试集的索引。我可以让它正确地迭代一个数据集。但是,如何对多个数据集同时执行此操作呢?例如,如果我想使用来自多个集合的特定折叠来创建一个分类器。我试过以下几种方法:
for train0, test0, train1, test1 in kfold.split(data0), kfold.split(data1):
# code但是我得到了以下错误:ValueError: too many values to unpack (expected 4)
发布于 2019-10-12 08:54:55
您可以在zip中使用并行迭代。
for kfold0, kfold1 in zip(kfold.split(data0), kfold.split(data1)):
train0, test0 = kfold0
train1, test1 = kfold1
...您甚至可以在循环中直接解压元组,但我个人认为这一点可读性较差:
for (train0, test0), (train1, test1) in zip(kfold.split(data0), kfold.split(data1)):
...https://stackoverflow.com/questions/58352432
复制相似问题