Линейная регрессия — одна из моделей регрессии sklearn, и для меня это самая простая модель. Sklearn определенно помогает нам создавать модели машинного обучения. Мы можем напрямую использовать модель только с импортом, а затем обучить ее. Нам не нужно беспокоиться о том, как на самом деле работает эта модель и как sklearn реализовал эту модель. На данный момент мы знаем, что эта модель будет выполнять линейную регрессию на основе набора данных. Но это хорошая практика, если вы знаете, что на самом деле делают модели и как работает алгоритм. Теперь мы узнаем, как реализовать алгоритм линейной регрессии вручную, как это делает sklearn LinearRegression. Во всяком случае, это будет немного математически.

Главная идея

Цель линейной регрессии — создать функцию, которая может аппроксимировать целевую переменную на основе признаков. Для простоты мы будем использовать только одну функцию (x1) и одну целевую переменную (y).

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

но здесь мы определим его как

где w0 — смещение, w1 — вес первого признака, а x1 — первый признак.

Функция потери

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

К сожалению, найти минимумы абсолютной функции слишком сложно. Поэтому вместо этого мы найдем минимумы его квадрата. По сути, если мы минимизируем квадрат функции, он также минимизирует минимумы исходной функции. Мы определим функцию потерь как

Здесь мы выполним пакетное вычисление, используя стохастический градиентный спуск, чтобы найти лучший вес (w0 и w1), который даст минимальные потери. Используя стохастический градиентный спуск, мы можем обновлять значения w0 и w1 после каждого пакетного вычисления.

Стохастический градиентный спуск

Цель использования SGD состоит в том, чтобы мы могли обновить наш вес до правильного направления локальных минимумов и в конечном итоге достичь минимальных потерь. По сути, направление обновления — это градиент функции потерь. Мы можем получить градиент, вычислив первую производную функции потерь по весу (w). Итак, мы получим эти уравнения ниже.

Для простоты мы можем увидеть наш вес w и ввести x в виде вектора.

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

Наконец, мы получаем наши окончательные уравнения для обновления нашего веса после каждой итерации во время обучения.

или мы можем написать это как

Давайте перейдем к примеру прямо сейчас.

Допустим, у нас есть эти данные.

Мы вычислим функцию потерь перед выполнением SGD, а также функцию веса и потерь после каждой итерации. Значения инициализации для w: w=[1 5] и α=0,001.

1. Первоначальный проигрыш перед выполнением SGD.

Убыток до выполнения составляет 2124 SGD. Если наш алгоритм верен, он будет уменьшать потери после каждой итерации.

2. Первая итерация

  • w0

  • w1

  • Потеря

Теперь, когда мы уже получили новое значение w = [0,936 4,672], мы можем вычислить обновленные потери.

По сравнению с потерями до выполнения первой итерации наши текущие потери меньше и составляют 1819,984. Теперь мы знаем, что наш алгоритм работает.

3. вторая итерация

  • w0

  • w1

  • Потеря

Давайте снова обновим его с нашим новым w = [0,8197 4,3115].

Обновленный убыток снова становится меньше и составляет 1549,423. Как видите, потери становятся меньше после каждой итерации. Тогда наши расчеты верны. Если мы выполним любую другую итерацию, это значительно уменьшит потери, пока не сойдется к определенной точке.

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

Извините, если я потерялся в результате расчета. На самом деле расчет делаю не я, а ChatGPT :D. Спасибо за чтение в любом случае.