Перетасуйте данные перед тем, как разрезать сгибы:
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 подобрать оба класса в каждом фолде, и все работает отлично.