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

Алгоритмы машинного обучения: базовый курс - Тайлер Венс


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

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


Скачать книгу