Scikit Learn: 5-кратная перекрестная проверка и разделение теста на поезд - PullRequest
0 голосов
/ 28 июня 2018

Мне интересно, когда я делю тестовый сплит (20% тест, 80% 80%) и затем применяю 5-кратную перекрестную проверку, означает ли это, что все данные были в тестовом наборе один раз? или каждый раз случайным образом выбирается, что в каждом сгибе одни и те же события, возможно, включались в тест более одного раза, а некоторые, возможно, никогда не включались в тестовый набор?

#20% of the data will be used as test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=seed) 

cv_results= cross_val_score(model, X_train, y_train, cv=kfold, scoring=scoring)

1 Ответ

0 голосов
/ 28 июня 2018

Все ли данные были в тестовом наборе один раз? Да, по крайней мере, в данных, которые вы передаете в метод перекрестной проверки. Например:

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), набор тестов для каждого разбиения будет содержать одну точку данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...