Python для итерации цикла с несколькими переменными - PullRequest
1 голос
/ 12 октября 2019

Я выполняю 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)

1 Ответ

3 голосов
/ 12 октября 2019

Вы можете использовать параллельную итерацию с 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)):
   ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...