#python #validation #data-science #kaggle
#python #проверка #наука о данных #kaggle
Вопрос:
Поскольку Kaggle предоставляет обучающий набор и тестовый набор, я хотел бы знать способ сгенерировать набор проверки (dev set) из этого обучающего набора. Цель состоит в том, чтобы иметь три набора:
— Обучающий набор набор проверки = обучающий набор Kaggle
— Тестовый набор = тестовый набор Kaggle
Дело в том, что набор проверки должен иметь то же распределение, что и тестовый. Я хотел бы знать, существует ли (простой) способ сгенерировать набор проверки, который учитывает это свойство. Я пишу на Python 3, если это может помочь вам ответить мне.
Большое спасибо
Комментарии:
1. Может быть, это поможет? scikit-learn.org/stable/modules/generated /…
2. Не совсем. Функция train_test_split позволяет нам генерировать наборы для обучения и проверки случайным образом. Но спасибо вам за ваш ответ.
Ответ №1:
Самый простой способ разделить обучающие данные на train и validation set — это использовать метод train_test_split из sklearn.
from sklearn.model_selection import train_test_split
train_set, val_set = train_test_split(train_data, test_size=0.2)
Однако разделение данных будет происходить случайным образом и не обеспечит равномерное распределение классов или какой-либо другой функции. Давайте предположим, что мы хотим разделить на основе распределения метки цели (например, train_data[‘y’]). Тогда вместо этого мы должны использовать StratifiedShuffleSplit.
from sklearn.model_selection import StratifiedShuffleSplit
split = StratifiedShuffleSplit(n_splits=1, test_size=0.2)
for train_index, val_index in split.split(train_data, train_data['y']):
strat_train_data = train_data.loc[train_index]
strat_val_data = train_data.loc[val_index]
В этом случае обучающие данные будут разделены на наборы train и val, и распределение ‘y’ будет одинаковым в обоих strat_train_data
и strat_val_data
. Если мы хотим, чтобы разделение произошло на основе определенного признака (например, пола, группы доходов и т.д.), Соответствующим образом замените y-параметр функции split().
Комментарии:
1. Я не уверен, что это позволяет мне сгенерировать набор проверки, который имеет тот же дистрибутив, что и набор тестов. Возможно, мне следует определить, что я понимаю из «наличия того же дистрибутива». Итак, предположим, что у нас есть N объектов x1, x2, …, xN. Два набора данных — скажем, A и B — имеют одинаковое распределение тогда и только тогда, когда A (xk) и B (xk) имеют одинаковое распределение для всех 1 <= k <= N. Я хочу сгенерировать этот набор проверки, который обладает этим свойством, поскольку я прочитал, что наборы проверки и тестирования должны поступать из одного и того же дистрибутива.