Мысли о train_test_split для машинного обучения - PullRequest
0 голосов
/ 16 апреля 2020

Я только что заметил, что многие люди, как правило, используют train_test_split даже до обработки пропущенных данных, и кажется, что они разбивают данные в самом начале

, и есть также группа людей, которые имеют тенденцию проскальзывать данные непосредственно перед этапом построения модели, после того как они выполнят всю очистку данных и разработку функций, выбор объектов.

Люди, как правило, разделяют данные с самого начала, говоря, что это предотвращает утечку данных.

Я сейчас просто так растерялся из-за конвейера построения модели. Зачем нам нужно сбрасывать данные в самом начале? и очищать набор поездов и тестовый набор отдельно, когда мы можем фактически выполнить всю очистку данных и разработку функций или что-то вроде преобразования категориальной переменной в фиктивную переменную вместе для удобства?

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

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Вы должны разбить данные как можно раньше.

Проще говоря, ваш конвейер проектирования данных тоже строит модели .

Рассмотрим простую идею заполнения в пропущенных значениях. Для этого вам нужно «обучить» мини-модель генерировать среднее значение, режим или другое среднее значение для использования. Затем вы используете эту модель для «прогнозирования» пропущенных значений.

Если вы включите тестовые данные в учебный процесс для этих мини-моделей, то вы позволите учебному процессу взглянуть на эти данные и немного обмануть из-за этого. Когда он заполняет отсутствующие данные значениями, построенными с использованием тестовых данных, он оставляет мало подсказок о том, на что похож тестовый набор. Вот что означает «утечка данных» на практике. В идеальном мире вы могли бы игнорировать это, и вместо этого просто использовать все данные для обучения, используйте счет обучения, чтобы решить, какая модель лучше.

Но это не сработает, потому что на практике модель полезна только один раз. он может предсказать любые новые данные, а не только данные, доступные во время обучения. Google Translate должен работать над тем, что вы и я набираем сегодня , а не только над тем, с чем его обучали ранее.

Итак, чтобы гарантировать, что модель продолжит работать хорошо, когда это происходит, вы должны проверить его на некоторых новых данных более контролируемым образом. Использование набора тестов, который был разделен как можно раньше, а затем скрыт, является стандартным способом сделать это.

Да, это означает некоторые неудобства, чтобы разделить разработку данных для обучения по сравнению с тестированием. Но многие инструменты, такие как scikit , которые разделяют этапы fit и transform, делают его удобным для создания сквозного конвейера проектирования и моделирования данных с правильным разделением поезд / тест.

0 голосов
/ 16 апреля 2020

Основано на книге Aurelien Geron, посвященной машинному обучению Хэндсона:

почему мы должны разделить тестовый набор как можно раньше?

Наш мозг обладает силой поиск шаблона в тестовом наборе, что приводит к перегонке. если вы посмотрите на набор тестов, то можете наткнуться на какой-то интересный, на первый взгляд, паттерн в тестовых данных, который приводит вас к выбору определенного типа модели машинного обучения. когда вы оцениваете ошибку обобщения с помощью набора тестов, ваша оценка слишком оптимистична c, и вы запустите систему, которая будет работать не так, как ожидалось. это называется смещением отслеживания данных.

...