Урок 4. Линейная регрессия. Функции потерь и градиентный спуск

На этом занятии мы переходим к детальному разбору первого практического класса задач машинного обучения с учителем — регрессионному анализу. Мы изучим его математический аппарат, разберем ключевые метрики ошибок и функции потерь, а также напишем собственный алгоритм оптимизации (градиентный спуск) на чистом Python и NumPy.

Что такое регрессия?

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

Историческая справка

Термин «регрессия» был введен в конце XIX века сэром Фрэнсисом Гальтоном. Изучая распределение роста в популяции людей, он заметил феномен, который назвал «регрессией к среднему»: у экстремально высоких отцов сыновья в среднем оказывались чуть ниже них, стремясь к среднему росту по популяции (и наоборот — у низких отцов сыновья были в среднем чуть выше ростом). Линия, проведенная через облако точек на графике для описания этой тенденции, получила название «линии регрессии», а математический метод — регрессионного анализа.

Переход от школьной алгебры к машинному обучению

В средней школе уравнение прямой линии записывалось в следующем виде:

\(y = kx + b\)

где \(x\) — независимая переменная, \(y\) — зависимая переменная, \(k\) — угловой коэффициент наклона, а \(b\) — свободный коэффициент (смещение по оси ординат).

В машинном обучении уравнение для простой линейной регрессии записывается в следующей нотации:

\(\hat{y} = wx + b\)

  • \(\hat{y}\) (игрек с крышкой): Предсказанное значение целевой переменной (в отличие от фактического значения \(y\)).
  • \(x\): Значение признака (входные данные).
  • \(w\) (weight / вес): Весовой коэффициент признака. Он определяет наклон линии и отражает вклад (вес) данного признака в формирование предсказания.
  • \(b\) (bias / смещение / свободный член): Значение предсказания \(\hat{y}\), когда признак \(x\) равен нулю.

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

Эффективность подготовки данных: почему NumPy обязателен?

Для выполнения матричных математических операций над массивами данных стандартные списки Python (list) малоэффективны: они занимают много оперативной памяти и работают медленно, так как требуют написания явных циклов на интерпретируемом Python.

Массивы NumPy (ndarray) решают эти проблемы благодаря следующим свойствам:

  1. Производительность (Скорость): Алгоритмы NumPy написаны на компилируемых языках C и Fortran. Однородные массивы хранятся в непрерывном блоке памяти, что ускоряет доступ. Эксперименты показывают, что NumPy выполняет операции в 10–100 раз быстрее стандартных списков.
  2. Эффективность по памяти: Вместо хранения служебной информации для каждого отдельного объекта (как в списках Python), NumPy хранит только «сырые» данные без накладных расходов (в 4–5 раз меньше по объему).
  3. Функциональность: Поддерживает векторизованные операции (применение действия ко всему массиву сразу без явных циклов), механизм трансляции (Broadcasting) для вычислений над массивами разной формы и продвинутую индексацию.

Оценка качества моделей: MAE против MSE

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

1. Средняя абсолютная ошибка (MAE — Mean Absolute Error)

Представляет собой простое среднее арифметическое абсолютных значений ошибок:

$$ \text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_i – \hat{y}_i| $$

  • Особенности: Легко интерпретируется (измеряется в тех же единицах, что и целевой признак — например, в рублях или штуках). Обладает устойчивостью (робастностью) к выбросам, так как не завышает штраф за случайные единичные крупные промахи.

2. Среднеквадратичная ошибка (MSE — Mean Squared Error)

Представляет собой среднее арифметическое квадратов ошибок:

$$ \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i – \hat{y}_i)^2 $$

  • Особенности: Наказывает модель за крупные промахи гораздо сильнее (квадратично). MSE очень чувствительна к выбросам. С точки зрения математики она удобна, так как является гладкой дифференцируемой функцией, что критически важно для работы оптимизаторов.

Функции потерь (Loss Functions)

Важно различать понятия метрики и функции потерь:

  • Метрика (MAE, MSE): Итоговая глобальная оценка качества модели на всем датасете.
  • Функция потерь (L1 Loss, L2 Loss): Оценка (штраф) за ошибку на одной конкретной точке данных. Сумму этих потерь модель пытается минимизировать в процессе обучения.
  • L1 Loss (Абсолютная ошибка): Штраф растет линейно. График имеет V-образную форму с острым переломом в нуле, из-за чего производная в точке минимума не определена.
  • L2 Loss (Квадратичная ошибка): Штраф растет параболически (квадратично). График представляет собой гладкую параболу, что делает L2 Loss стандартным и математически удобным выбором для большинства оптимизаторов регрессии.

Алгоритм градиентного спуска (Gradient Descent)

Как модель автоматически находит те значения параметров \(w\) и \(b\), которые минимизируют функцию потерь L2 (MSE)? Основным рабочим инструментом для этого является градиентный спуск.

Аналогия: спуск с горы в тумане

Представьте, что вы стоите на склоне горы (ландшафт функции потерь) в густом тумане. Ваша задача — дойти до самой низкой точки (минимума потерь). Вы не видите всю картину, только землю у себя под ногами.

Ваши действия:

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

Формула шага градиентного спуска для веса \(w\):

$$ w_{\text{new}} = w_{\text{old}} – \alpha \cdot \frac{\partial L}{\partial w} $$

Где:

  • \(\alpha\) (альфа) / Learning Rate (скорость обучения): Гиперпараметр, регулирующий размер шага. Если \(\alpha\) слишком мала — обучение будет идти крайне медленно. Если \(\alpha\) слишком велика — алгоритм может «перепрыгнуть» минимум и никогда к нему не сойтись (ошибка начнет расти).
  • \(\frac{\partial L}{\partial w}\): Частная производная (градиент) функции потерь по весу \(w\), указывающая направление и крутизну склона. По мере приближения к минимуму значение градиента уменьшается, что автоматически сокращает размер шага.

Параметры против Гиперпараметров

В машинном обучении важно четко различать два типа настроек:

Характеристика Параметры (\(w\), \(b\)) Гиперпараметры (\(\alpha\), кол-во эпох)
Кто определяет? Алгоритм обучения Человек (ML-специалист)
Источник Вычисляются непосредственно из данных в процессе оптимизации Задаются вручную до начала процесса обучения
Роль Составляют саму обученную модель (артефакты обучения) Управляют ходом и конфигурацией процесса обучения

Ограничения базового подхода и пути оптимизации

В простейшей реализации градиентного спуска мы сталкиваемся со следующими проблемами:

  1. Необходимость масштабирования данных (Scaling):

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

    Решение: Стандартизация (StandardScaler). Преобразует входные данные \(X\) так, чтобы их среднее значение стало равно 0, а стандартное отклонение — 1. Это превращает ландшафт функции потерь в почти идеальную круглую чашу, обеспечивая сопоставимые градиенты и кратно ускоряя сходимость.

  2. Производительность на больших данных:

    Классический пакетный градиентный спуск (Batch GD) пересчитывает градиент по всем точкам датасета на каждом шаге, что неэффективно на миллионах строк.

    Решение: Использование стохастического градиентного спуска (SGD), обновляющего веса после каждой случайной точки, или компромиссного метода Mini-batch градиентного спуска (обновление по небольшим подвыборкам — батчам), который является золотым стандартом в Deep Learning.

Множественная линейная регрессия

В реальном мире результат редко зависит только от одного фактора. Для построения более точной модели используется множественная линейная регрессия, учитывающая \(n\) признаков одновременно.

Формула для множественной регрессии:

$$ \hat{y} = w_1x_1 + w_2x_2 + \dots + w_nx_n + b $$

В векторно-матричном виде уравнение записывается лаконично:

$$ \hat{y} = W^T X + b $$

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

Переход к практике

Все рассмотренные концепции мы реализуем в коде. Ознакомьтесь с материалами в Google Colab, попробуйте изменить значения learning_rate и epochs в цикле обучения, чтобы наглядно проследить за динамикой изменения среднеквадратичной ошибки.

План занятия

  1. Регрессионный анализ как задача машинного обучения
    • Суть задачи: прогнозирование непрерывного числового значения на основе набора независимых признаков (например, площадь квартиры → стоимость, характеристики двигателя → мощность).
    • История термина: сэр Фрэнсис Гальтон и его исследование «регрессии к среднему» при анализе соотношения роста отцов и сыновей. Понятие линии регрессии.
  2. Простая линейная регрессия
    • Математическое представление: переход от школьного уравнения прямой (\(y = kx + b\)) к нотации машинного обучения (\(\hat{y} = wx + b\)).
    • Физический смысл параметров: предсказанное целевое значение (\(\hat{y}\)), значение признака (\(x\)), весовой коэффициент (\(w\), weight) как мера вклада признака и свободный член (\(b\), bias / смещение).
  3. Обработка данных и использование NumPy (Бизнес-кейс)
    • Разбор практического кейса: зависимость продаж от объема рекламного бюджета.
    • NumPy против стандартных списков Python: ключевые преимущества в производительности (код на C/Fortran, выполнение до 40 раз быстрее), экономии оперативной памяти (до 4.5 раз за счет однородности типов) и функциональности (векторизованные операции, трансляция/broadcasting, срезы).
  4. Оценка качества моделей (Метрики и функции потерь)
    • Метод гипотез: подбор линии аппроксимации «на глаз» и необходимость объективного математического критерия оценки.
    • Метрики ошибок:
      • MAE (Mean Absolute Error): формула, интерпретируемость в исходных единицах целевой переменной, устойчивость к выбросам.
      • MSE (Mean Squared Error): формула, квадратичное штрафование за крупные промахи, высокая чувствительность к выбросам.
    • Функции потерь (Loss Functions): разница между метрикой (оценка всей выборки) и функцией потерь (штраф за ошибку на одной точке). Сравнение графиков L1 Loss (V-образный) и L2 Loss (парабола).
  5. Алгоритм градиентного спуска (Gradient Descent)
    • Аналогия: пошаговый спуск с горы в условиях густого тумана.
    • Математическая суть: вычисление частной производной функции потерь (градиента) для определения направления и крутизны склона. Формула итерационного обновления весов.
    • Скорость обучения (learning rate / \(\alpha\)): влияние размера шага на сходимость модели (проблемы застревания при слишком маленьком шаге и расхождения при слишком большом шаге).
    • Реализация на Python: пошаговое написание цикла обучения, расчет текущей ошибки, вычисление градиентов и обновление весов.
  6. Параметры против Гиперпараметров
    • Параметры (\(w, b\)): внутренние переменные модели, настраиваемые алгоритмом оптимизации автоматически в процессе обучения.
    • Гиперпараметры (\(\alpha\), количество эпох): внешние конфигурации процесса обучения, задаваемые ML-специалистом вручную.
  7. Ограничения базового подхода и пути оптимизации
    • Масштабирование данных (Scaling / StandardScaler): приведение данных к нулевому среднему и единичному стандартному отклонению. Преобразование ландшафта функции потерь в симметричную круглую чашу для ускорения сходимости.
    • Модификации градиентного спуска: пакетный (Batch GD), Стохастический (SGD) и Mini-batch градиентный спуск как золотой стандарт глубокого обучения.
  8. Множественная линейная регрессия
    • Описание зависимости целевой переменной от \(n\) признаков. Уравнение гиперплоскости: \(\hat{y} = w_1x_1 + w_2x_2 + \dots + w_nx_n + b\).
    • Матрично-векторная запись уравнения: \(\hat{y} = W^T X + b\).
    • Проблема многомерности и важность процедуры отбора значимых признаков (feature selection) для минимизации шума.

Не уходите просто так – не упустите возможность только здесь и сейчас получить скиду!

Индивидуальная консультация по Яндекс Директу или Google Ads со скидкой

25%

"*"обозначает обязательные поля

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