Как разделить обучающую и тестовую выборки в Python: подробная инструкция

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

Вот где на помощь приходит Python! В этой статье мы покажем, как с помощью инструментов SciPy и scikit-learn можно разделить выборку на обучающую и тестовую, и что при этом нужно учитывать.

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

Как разделить выборки в Python: подробная инструкция

Содержание

Шаг 1: Загрузка данных

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

Шаг 2: Разделение выборки

Второй шаг — это разделить вашу выборку на две: обучающую и тестовую. Для этого воспользуйтесь функцией train_test_split() из библиотеки sklearn. Выберите соотношение между обучающей и тестовой выборкой, а также установите значение параметра random_state для получения одинаковых результатов при каждом запуске кода.

Шаг 3: Применение модели

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

Шаг 4: Оценка модели

Четвертый и последний шаг — это оценка модели на тестовой выборке. Для этого использовать метод score() из библиотеки sklearn. Метод score() возвращает значение, которое указывает на эффективность модели, где значение 1 означает, что модель предсказывает значения точно, а значение 0 — что модель предсказывает случайным образом.

Пользуйтесь этой подробной инструкцией, чтобы разделить выборки и применить модель в Python.

Зачем нужно разделять выборки

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

Если не разделять данные, то модель может показывать отличное качество на обучающей выборке, но при этом плохо работать на новых, ранее неизвестных данных. Такая ситуация называется переобучением (overfitting).

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

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

Основные методы разделения выборок

1. Случайное разделение выборки

Случайное разделение выборки – это наиболее распространенный метод, при котором данные случайным образом разбиваются на обучающую и тестовую выборки. Для этого можно использовать функцию train_test_split из библиотеки scikit-learn.

2. Стратифицированное разбиение выборки

Стратифицированное разбиение выборки – это метод, при котором разбиение происходит таким образом, чтобы в обучающей и тестовой выборках сохранялось соотношение классов. Это полезно в случае несбалансированных данных, когда один класс содержит больше примеров, чем другие. Для данного метода в scikit-learn используется функция StratifiedShuffleSplit.

3. Временное разбиение выборки

Еще по теме:   Оптимальный способ перевода математических выражений в форму обратной польской записи на Python

Если данные упорядочены по времени, то используют метод временного разбиения выборки, при котором данные разбиваются на обучающую и тестовую выборки в хронологическом порядке. Это помогает избежать переобучения на будущие данные, которые могут отличаться от прошлых. Для этого метода в scikit-learn используется функция TimeSeriesSplit.

4. Разбиение выборки на кросс-валидацию

Разбиение выборки на кросс-валидацию – это метод, при котором данные разбиваются на несколько фолдов, и на каждом фолде модель обучается на части данных и проверяется на другой части. Он помогает получить более точную оценку алгоритма и сгладить различия в выборке. Для данного метода в scikit-learn используются функции KFold и StratifiedKFold.

Разделение выборки на обучающую и тестовую с помощью Numpy

Когда мы занимаемся машинным обучением, нам нередко требуется разделить нашу выборку на обучающую и тестовую. Но как это сделать в Python? Одним из наиболее удобных инструментов для этого является библиотека Numpy.

С помощью функции Numpy split() мы можем разделить нашу выборку на несколько подмножеств. Мы можем указать необходимый процент обучающего и тестового набора, а также задать любое другое количество разделений нашей выборки.

Вот пример разделения выборки на 70% обучающей и 30% тестовой:

import numpy as np

# Выборка
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# Разделение на обучающую и тестовую выборки
train, test = np.split(data, [int(0.7*len(data))])

# Вывод результатов
print("Обучающая выборка:", train)
print("Тестовая выборка:", test)

Как видите, мы сначала импортируем библиотеку Numpy, а затем создаем нашу выборку. Далее мы указываем необходимый процент обучающей выборки (70%) и используем функцию split() для разделения выборки. Результаты мы выводим в консоль.

Таким образом, использование функции split() из Numpy позволяет нам легко и быстро разделить нашу выборку на обучающую и тестовую, что является необходимым шагом при работе с машинным обучением.

Разделение выборки на обучающую и тестовую с помощью Scikit-learn

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

Для разделения выборки необходимо импортировать функцию train_test_split из модуля model_selection. Данная функция принимает на вход параметры: данные X, целевую переменную y, размер тестовой выборки test_size и параметр random_state для воспроизводимости результатов. В результате работы функции получаем четыре переменные: X_train, X_test, y_train, y_test, которые содержат соответственно обучающие и тестовые данные и целевую переменную.

Пример разделения выборки:

from sklearn.model_selection import train_test_split
train_data, test_data, train_labels, test_labels = train_test_split(data, labels, test_size=0.2, random_state=42)

В данном примере мы разделили данные на обучающую и тестовую выборки в соотношении 80/20 (test_size=0.2), где 80% данных использовались для обучения модели, а 20% — для ее проверки. Параметр random_state=42 гарантирует, что при каждом запуске кода мы будем получать одинаковый результат. В результате мы получили четыре переменные: train_data, test_data, train_labels, test_labels, которые содержат содержат соответственно обучающие и тестовые данные и целевую переменную.

Разделение выборки на обучающую, валидационную и тестовую

Одним из главных этапов работы с данными в машинном обучении является разделение выборки на несколько частей: обучающую, валидационную и тестовую. Обучающая выборка используется для обучения модели, валидационная — для настройки параметров модели, а тестовая — для оценки её качества.

Для разделения выборки в Python можно использовать функцию train_test_split из библиотеки scikit-learn. Эта функция позволяет случайным образом разбить данные на заданные части в указанных пропорциях. Например:

  • train_test_split(X, y, test_size=0.3) — разделение на 70% обучающей выборки и 30% тестовой выборки;
  • train_test_split(X, y, test_size=0.3, random_state=42) — разделение с фиксированным «случайным» порядком для воспроизводимости результатов.

Также можно использовать функцию KFold из библиотеки scikit-learn для более точного и контролируемого разделения данных на обучающую и тестовую выборки. Пример:

Метод Описание параметров
KFold(n_splits=5, shuffle=True, random_state=42) Разбить на 5 блоков, перемешать данные и использовать фиксированный порядок для воспроизводимости результатов.

При разделении выборки важно учитывать не только пропорции разбиения, но и равномерность распределения данных по частям. Также полезно выбрать «случайное» порядок для разбиения, чтобы не было сильной корреляции между данными в разных частях выборки.

Рекомендации по выбору соотношения выборок

Следует выбирать соотношение выборок в зависимости от цели задачи. Если важнее точность предсказаний на тестовой выборке, то ее следует выбирать больше, например, 70% от всей выборки. Если же ставится цель снижения переобучения модели, то тестовую выборку лучше сформировать меньше — от 20% до 30%.

Еще по теме:   Создание бота для ВКонтакте на языке Python: подробная инструкция по шагам

Рекомендуется оценить базовые метрики на обучающей и тестовой выборках при разных соотношениях. Можно провести несколько экспериментов и выбрать оптимальное соотношение. При этом необходимо учитывать размер данных и временные затраты на обучение модели.

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

  • Если объем данных достаточно большой, то рекомендуется выбрать соотношение 80:20 или 70:30 в пользу обучающей выборки.
  • Если данных немного, то можно выбрать соотношение 60:40 или даже 50:50.
  • При работе с временными данными (например, прогнозирование продаж), следует обучать модель на данных за прошлые периоды и тестировать на данных за последний период, поэтому соотношение 80:20 может быть особенно эффективным.

Примеры кода по разделению выборок

Для начала мы импортируем библиотеку Pandas и загружаем наш набор данных:


import pandas as pd

data = pd.read_csv('data.csv')

Затем мы используем функцию train_test_split библиотеки sklearn для разделения нашего набора данных на обучающую и тестовую выборки:


from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(data[['feature1', 'feature2', 'feature3']], 
                                                    data['target'], test_size=0.3)

Здесь мы указываем, какие колонки из нашего набора данных мы хотим использовать как признаки (features), а какую колонку используем как целевую переменную (target). Мы задаем размер тестовой выборки равным 30% от исходного набора данных.

Можно выделить отдельно обучающую и тестовую выборки с помощью индексации:


train_data = data[:n_train]
test_data = data[n_train:]

Здесь n_train — это количество примеров, которые мы хотим отнести к обучающей выборке, а оставшиеся примеры будут использоваться в качестве тестовой выборки.

Также можно использовать функцию sample библиотеки Pandas для случайной выборки примеров в обучающей и тестовой выборках:


train_data = data.sample(frac=0.7, random_state=42)
test_data = data.drop(train_data.index)

Здесь frac — это доля примеров, которые мы хотим использовать в обучающей выборке, random_state — это параметр, который позволяет нам воспроизводить случайность при выборке.

Избежание переобучения модели

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

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

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

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

Оценка качества модели на тестовой выборке

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

Для оценки качества модели на тестовой выборке можно использовать различные метрики, такие как точность (accuracy), полноту (recall), F1-меру (F1-score) и т.д. Все эти метрики позволяют оценить качество модели с разных сторон и выбрать наиболее подходящую для конкретной задачи.

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

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

Еще по теме:   Как обойти граф в ширину на Python: принципы, советы и примеры кода

Практические рекомендации по разделению выборки на обучающую и тестовую в Python

1. Размеры выборок

Определите соотношение размеров выборок: общепринятая практика – 80% для обучения и 20% для тестирования. Однако, в зависимости от задачи, отношение может меняться. Например, для больших выборок можно взять 90% на обучение и 10% на тест.

Примечание: если ваша выборка очень мала (меньше 100 объектов), рекомендуется использовать метод кросс-валидации.

2. Случайность

Разделите выборку случайным образом: для этого можно использовать метод train_test_split библиотеки sklearn.random. При каждом запуске кода будут создаваться новые, случайные выборки. Это важно для тестирования модели и проверки ее обобщающей способности.

3. Сохранение выборок

Сохраните выборки отдельно: обучающую и тестовую выборки необходимо сохранить отдельно друг от друга. Это позволит не перетирать данные в процессе обучения и тестирования.

4. Проверка качества модели

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

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

5. Масштабирование данных

Масштабируйте данные: перед обучением модели необходимо масштабировать данные. Для этого можно использовать методы из библиотеки sklearn.preprocessing. Масштабирование данных позволит улучшить качество модели и ускорить процесс обучения.

6. Подбор гиперпараметров

Подберите оптимальные гиперпараметры: для улучшения качества модели необходимо подобрать оптимальные гиперпараметры. Для этого можно использовать методы из библиотеки sklearn.model_selection.

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

Выводы

Разделение выборки на обучающую и тестовую является важным шагом в процессе машинного обучения. Это позволяет проверить качество модели на новых данных и избежать переобучения.

В Python для разделения выборки существует несколько функций, таких как train_test_split, KFold, StratifiedKFold и др. Они позволяют задать долю тестовых данных, перемешивание объектов и другие параметры.

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

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

Вопрос-ответ:

Как правильно выбрать размер тестовой выборки?

Размер тестовой выборки зависит от конкретной задачи и объема общей выборки. Возможно использование разных способов, но в общем случае принято отводить 20-30% от общего объема данных на тестирование. Однако, есть и другие подходы, которые могут дать лучший результат.

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

Для выбора случайных примеров в Python можно использовать специальную функцию shuffle() из библиотеки random. Например, если у вас есть список данных data, то можно перемешать его и выбрать первую часть для тестирования: random.shuffle(data) test_data = data[:n]

Как проверить, что тестовая и обучающая выборки не пересекаются?

Пересечение тестовой и обучающей выборок может привести к некорректным результатам оценки качества модели. Чтобы проверить, что выборки не пересекаются, можно воспользоваться методом set() и оператором & для нахождения общих элементов: set(test_data) & set(train_data) Если результатом будет пустое множество, значит выборки не пересекаются.

Можно ли изменить сплиттер для разделения выборок?

Да, можно изменить сплиттер для разделения выборок на свой вкус и настройки. Например, если вы хотите использовать разделение с учетом баланса классов, то можно использовать объект StratifiedShuffleSplit из библиотеки scikit-learn. Для этого нужно импортировать его и задать параметры, например, количество разбиений.

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

Выбор наилучших параметров модели может происходить после сравнения результатов на тестовой выборке с разными значениями параметров. Например, можно использовать объект GridSearchCV из библиотеки scikit-learn, который позволяет автоматически подобрать оптимальные параметры модели. После подбора оптимальных параметров используйте их для обучения модели на всей выборке, включая тестовую.

Поделиться:
Нет комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.

×
Рекомендуем посмотреть
Adblock
detector