Рассмотрим несколько примеров кода на Python с использованием библиотеки `scikit-learn`, чтобы лучше понять процесс разделения данных.
Пример 1: Базовое разбиение данных
Этот код показывает, как разделить данные на обучающую и тестовую выборки с помощью `train_test_split`.
```python
from sklearn.model_selection import train_test_split
import numpy as np
# Создадим массив данных (обычно здесь загружаются реальные данные)
X = np.array([[i] for i in range(1, 11)]) # Признаки (например, номера объектов)
y = np.array([i * 2 for i in range(1, 11)]) # Целевые значения (например, цены)
# Разделяем на 80% обучение, 20% тест
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print("Обучающая выборка (X_train):", X_train.ravel())
print("Тестовая выборка (X_test):", X_test.ravel())
```
Вывод: Обучающая и тестовая выборки будут сформированы случайным образом, но примерно 80% данных пойдет на обучение, а 20% на тестирование.
Пример 2: Добавление валидационной выборки
Иногда, помимо тестовой выборки, выделяют валидационную. Это можно сделать в два этапа.
```python
# Разделяем данные: 70% обучение, 15% валидация, 15% тест
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.3, random_state=42)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)
print("Обучающая выборка:", X_train.ravel())
print("Валидационная выборка:", X_val.ravel())
print("Тестовая выборка:", X_test.ravel())
```
Объяснение: Сначала мы отделяем 70% данных для обучения, а затем оставшиеся 30% делим пополам, чтобы получить валидационную и тестовую выборки по 15% каждая.
Пример 3: Разбиение данных в задаче машинного обучения (предсказание цен квартир)
Этот пример показывает реальное применение разбиения данных в задаче предсказания стоимости квартир.
```python
import pandas as pd
from sklearn.model_selection import train_test_split
# Загрузим данные (пример сгенерированных данных)
data = pd.DataFrame({
"Площадь": [30, 45, 60, 75, 90, 105, 120, 135, 150, 165],
"Этаж": [2, 3, 5, 1, 8, 10, 12, 15, 17, 20],
"Цена": [3.5, 5.2, 6.8, 7.1, 9.3, 10.5, 12.7, 14.2, 15.8, 17.5] # Цена в миллионах рублей
})
# Признаки (X) и целевой признак (y)
X = data[["Площадь", "Этаж"]]
y = data["Цена"]
# Разделяем на обучающую и тестовую выборки (80% обучение, 20% тест)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print("Обучающие данные:\n", X_train)
print("Тестовые данные:\n", X_test)
```
Вывод: Обучающая выборка содержит 80% данных, тестовая – 20%. Теперь можно обучить модель, например, линейной регрессии, и проверить её на тестовых данных.
Пример 4: Проверка на переобучение
Допустим, мы обучили модель и посмотрели её точность на обучающих и тестовых данных.
```python
from