Как получить доступ к наборам данных после запуска k-fold с помощью scikit-learn? - PullRequest
1 голос
/ 28 марта 2020

Я пытаюсь применить метод kfold, но я не знаю, как получить доступ к сгенерированным наборам обучения и тестирования. Изучив несколько блогов и руководство пользователя scikitlearn, единственное, что люди делают, - это распечатывают обучающие и тестовые наборы. Это может работать для небольшого информационного кадра, но это бесполезно, когда дело доходит до больших информационных кадров. Кто-нибудь может мне помочь?

Данные, которые я использую: https://github.com/ageron/handson-ml/tree/master/datasets/housing

Где я сейчас нахожусь:

X = housing[['total_rooms', 'total_bedrooms']]
y = housing['median_house_value']

kf = KFold(n_splits=5) 

for train_index, test_index in kf.split(X):
    X_train, X_test = X.iloc[train_index], X.iloc[test_index]
    y_train, y_test = y.iloc[train_index], y.iloc[test_index]

Но это полезно только для получения последнего сгенерированного набора данных. Я должен быть в состоянии получить все.

Заранее спасибо.

1 Ответ

1 голос
/ 28 марта 2020

AFAIK, KFold (и фактически все, что связано с процессом перекрестной проверки) предназначено для предоставления временных наборов данных, чтобы можно было, как вы говорите, использовать их на лету для подгонки и оценки моделей, как показано в Метрики перекрестной проверки в scikit-learn для каждого разделения данных .

Тем не менее, поскольку Kfold.split() приводит к генератору Python, вы можете использовать сгенерированные индексы, чтобы получить постоянные подмножества, хотя с некоторой ручной работой. Вот пример с данными Бостона:

from sklearn.model_selection import KFold
from sklearn.datasets import load_boston

X, y = load_boston(return_X_y=True)
n_splits = 3
kf = KFold(n_splits=n_splits, shuffle=True)

folds = [next(kf.split(X)) for i in range(n_splits)]

Теперь для каждого k в range(n_splits), folds[k][0] содержит индексы обучения и folds[k][1] соответствующие индексы проверки, так что вы можете сделать :

X_train_1 = X[folds[0][0]]
X_test_1 = X[folds[0][1]]

и так далее. Обратите внимание, что те же индексы применимы и к меткам y.

...