Алгоритмы машинного обучения: базовый курс. Тайлер Венс. Читать онлайн. Newlib. NEWLIB.NET

Автор: Тайлер Венс
Издательство: Автор
Серия:
Жанр произведения:
Год издания: 2025
isbn:
Скачать книгу
ли модель научилась решать задачу или просто запомнила ответы из обучающей выборки. Если модель показывает отличные результаты на обучающих данных, но терпит неудачу на тестовых, значит, она переобучилась и не сможет работать с реальными данными. Именно поэтому правильное разделение данных является обязательным шагом в процессе создания моделей машинного обучения.

      Рассмотрим несколько примеров кода на 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