Перед разрезанием складок перемешайте данные:
cv = KFold(n_splits=6, shuffle=True)
Объяснение:
StratifiedKFold
сокращает складки таким образом, чтобы доля классов в каждой складке была примерно такой же, как и во всем наборе данных. Kfold
этого не делает и просто вырезает складки из образцов в порядке их появления в наборе данных. Следовательно, вы можете получить или не получить все существующие классы во всех складках. В этом случае или в Iris
наборе данных образцы отсортированы по классам, это можно увидеть из целевого y
:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
Следовательно, в случае 6-кратного разделения большую часть времени вы получаете только один класс за раз, и вся тренировка модели прерывается. Перемешивание позволяет KFold подбирать оба класса в каждом сгибе, и все работает нормально.
person
Artem Trunov
schedule
27.01.2019