🔬 Как разбить выборку на тестовую и обучающую в Python: простой и эффективный способ
Чтобы разбить выборку на тестовую и обучающую в Python, вы можете использовать функцию train_test_split() из библиотеки sklearn.model_selection.
from sklearn.model_selection import train_test_split
# Входные данные
X = ваш_массив_признаков
y = ваш_массив_меток
# Разделение набора данных
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
В приведенном выше коде мы передаем наши признаки и метки в функцию train_test_split(). Мы также указываем размер тестового набора данных (в данном случае 20%) и устанавливаем начальное значение генератора случайных чисел для воспроизводимости результатов (random_state=42). Функция возвращает разделенные обучающую и тестовую выборки, которые мы сохраняем в переменные X_train, X_test, y_train и y_test соответственно.
Детальный ответ
Как разбить выборку на тестовую и обучающую в Python?
Разделение выборки на тестовую и обучающую является важным этапом при построении моделей машинного обучения. Это позволяет оценить эффективность и обобщающую способность модели. В Python существует несколько способов разделить выборку. В этой статье мы рассмотрим два популярных метода: случайное разделение и стратифицированное разделение.
1. Случайное разделение
Случайное разделение предполагает случайное распределение объектов в выборке между обучающим и тестовым набором данных. В Python для этого можно использовать библиотеку scikit-learn.
from sklearn.model_selection import train_test_split
# Загружаем данные
X, y = load_data()
# Разделяем выборку на обучающую и тестовую
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
В приведенном выше коде мы используем функцию train_test_split
из библиотеки scikit-learn для разделения выборки на обучающую и тестовую. Функция принимает на вход матрицу признаков X и вектор меток y, а также параметры test_size
(размер тестовой выборки) и random_state
(для воспроизводимости результатов).
2. Стратифицированное разделение
Стратифицированное разделение используется, чтобы убедиться, что оба набора данных, обучающий и тестовый, имеют схожие распределения по классам или значениям целевой переменной. Такое разделение полезно, когда в выборке есть дисбаланс классов или важны особенности распределения данных.
from sklearn.model_selection import StratifiedShuffleSplit
# Загружаем данные
X, y = load_data()
# Создаем объект разделения
stratified_split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
# Разделяем выборку на обучающую и тестовую
for train_index, test_index in stratified_split.split(X, y):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
В этом примере мы используем класс StratifiedShuffleSplit
из библиотеки scikit-learn для стратифицированного разделения выборки. Мы создаем экземпляр класса, указываем количество разделений (в данном случае 1), размер тестовой выборки и параметр random_state
. Затем, используя цикл, мы разделяем выборку на обучающую и тестовую.
Выбор метода разделения
Выбор между случайным и стратифицированным разделением зависит от особенностей ваших данных. Если вы имеете дело с сбалансированной выборкой и нет особых требований по распределению данных, случайное разделение должно подойти большинству случаев. Если же ваша выборка содержит дисбаланс классов или важны особенности распределения данных, рекомендуется использовать стратифицированное разделение.
В заключение, разделение выборки на тестовую и обучающую является важным шагом при построении моделей машинного обучения. В этой статье мы рассмотрели два популярных метода: случайное и стратифицированное разделение. Выбор между ними зависит от особенностей ваших данных. Всегда помните, что правильное разделение влияет на обобщающую способность модели и ее эффективность.