Все ли данные были в тестовом наборе один раз? Да, по крайней мере, в данных, которые вы передаете в метод перекрестной проверки. Например:
X = np.arange(10)
y = np.concatenate((np.ones(5), np.zeros(5)))
X
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y
array([1., 1., 1., 1., 1., 0., 0., 0., 0., 0.])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2, random_state=42)
X_train
array([5, 0, 7, 2, 9, 4, 3, 6])
X_test
array([8, 1])
kf = Kfold(n_splits=5)
for train, test in kf.split(X_train):
print(train, test)
[2 3 4 5 6 7] [0 1]
[0 1 4 5 6 7] [2 3]
[0 1 2 3 6 7] [4 5]
[0 1 2 3 4 5 7] [6]
[0 1 2 3 4 5 6] [7]
Как вы можете видеть, индексы для набора тестов выполняются от 0 до 7, означая, что все 8 значений в X_train
появятся в перекрестном проверочном тесте один раз. Этот шаблон будет сохраняться независимо от размера вашей выборки.
Размер разбиений, созданных методом перекрестной проверки split
, определяется отношением ваших данных к количеству выбранных вами разделений. Например, если бы я установил KFold(n_splits=8)
(того же размера, что и мой массив X_train
), набор тестов для каждого разбиения будет содержать одну точку данных.