Интуитивный подход к линейной регрессии

Обратите внимание: в этой статье больше внимания уделяется математике линейной регрессии. Вам нужно будет понять основы частных производных и некоторой линейной алгебры. Если вам не очень нравятся эти темы, добавьте эту статью в закладки, посмотрите несколько видеороликов Khan Academy, а затем прочтите. Позже ты меня поблагодаришь.

Вы когда-нибудь чувствовали, что никогда должным образом не понимаете функции градиентного спуска, регрессии или потерь? Вы отбросили эти концепции и сосредоточились на кодировании? Да, я тоже.

Чтобы понять, что происходит за алгоритмами, мы должны рассмотреть математику. Я буду честен; математика с машинным обучением сложна. Однако, как только мы разберем каждую концепцию и предпримем пошаговый подход, будет казаться, что новый мир понимания только что появился!

Сегодня мы рассмотрим простую модель линейной регрессии, чтобы понять всю математику, происходящую за кулисами. Приступим, ладно?

Что такое линейная регрессия

Регрессия - это форма прогнозного анализа, который исследует взаимосвязь между одной или несколькими независимыми переменными и зависимой переменной. Это в основном похоже на функции: вводится некоторое значение x, этим значением манипулируют с помощью определенных коэффициентов, таких как наклон или пересечение, и, наконец, выводится другое значение.

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

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

Фактически, мы узнаем об одном из его приложений сегодня с помощью задачи, предложенной Тоби Флендерсоном из Dunder Mifflin.

Тоби с трудом выбирает идеального сотрудника для найма после встречи с несколькими людьми на ярмарке вакансий. Чтобы получить больше информации, Тоби попросил нас использовать машинное обучение, чтобы помочь ему спрогнозировать зарплаты различных сотрудников. Он предоставил нам набор данных, состоящий из лет опыта и зарплаты предыдущих сотрудников Dunder Mifflin.

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

1. Изучите набор данных

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

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

К сожалению, большинство наборов данных обычно не состоят только из одного или двух объектов. Вместо этого он будет включать в себя несколько функций (x1, x2, x3… xn), что сделает проблему многомерной. По этой причине становится трудно визуализировать набор данных. Вы будете пропускать этот шаг большую часть времени, так как мы не можем визуализировать что-либо за пределами 3D.

2. Определите свою модель.

Помните y = mx + b? Да, это уравнение будет основой нашей модели с незначительным изменением названий переменных: коэффициент наклона обычно фиксируется в матрице / векторе под названием W а перехват - смещение.

Вы можете спросить, почему W вектор? Если в нашем наборе данных было несколько объектов, им будет присвоено несколько весов. По этой причине все веса обычно фиксируются в векторе, чтобы уравнение было более кратким. Например, линейное уравнение для набора данных с двумя пространственными объектами в длинной форме будет выглядеть так:

Но поскольку Тоби дал нам только одну особенность (многолетний опыт), мы оставим w в качестве скалярного значения, поскольку нужно умножать только одно значение веса.

3. Определите функцию потерь (MSE)

Хорошо, теперь мы знаем общее уравнение для линии. Но мы понятия не имеем, какой вес и смещение дадут нам лучшую посадку. Как мы можем это найти?

Что, если бы мы попытались установить для нашей линии совершенно случайный вес и смещение? Что, если бы существовал способ вычислить разницу между фактической точкой в ​​нашем наборе данных и прогнозируемыми точками на нашей линии? Что ж, есть! Взгляните на функцию потерь:

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

Для линейной регрессии используется функция потерь Среднеквадратичная ошибка (MSE). По сути, MSE измеряет среднее квадратов остатков (разницу между фактическими и прогнозируемыми значениями). Чтобы получить более интуитивное понимание, давайте углубимся в то, что означает каждая переменная.

  • Y = фактическая точка данных
  • ŷ (произносится y шляпа) = прогнозируемая точка данных
  • n = общее количество точек данных

Функция MSE работает следующим образом:

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

Здесь важно отметить, что разница между Y и Y даст нам количественную оценку того, насколько плохо работает наша текущая модель.

Давайте посмотрим, как работает наша функция MSE! Я выберу 3 для нашего случайного значения веса и 4 для нашего значения случайного смещения, чтобы вычислить MSE.

Ой! Тоби не обрадуется этой модели. Как видите, полученная нами ошибка чрезвычайно велика (6,5 * 10⁹). Это имеет смысл, поскольку расстояние между точками на линии и фактическими точками сильно различается. Но это неплохое начало.

Следующий вопрос, который мы должны задать, - как снизить значение ошибки? Было бы разумно выбрать веса и смещения, которые дают нам наименьшую возможную ошибку, не так ли?

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

4. Примените градиентный спуск (GD).

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

Градиентный спуск - это итеративный алгоритм оптимизации, который находит локальный минимум дифференцируемой функции. Другими словами, градиентный спуск найдет локальный минимум в нашей функции потерь MSE.

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

А сейчас давайте снова сосредоточимся на нашей функции ошибок. Помните квадратики? допустим, у нас есть такая функция:

Разве это не похоже на нашу функцию MSE?

Ага! Функция MSE действительно имеет квадратную форму. Это позволит нам идеально визуализировать процесс градиентного спуска.

Представьте мяч, катящийся с холма. Когда мяч достигает долины, он перестает двигаться. Суть градиентного спуска заключается в том, чтобы найти в этой долине "сладкое пятно", которое даст нам минимальное значение MSE. Но что, если бы мы не могли визуально увидеть график из-за высокой размерности? Затем все, что вам нужно учитывать, - это знак градиента.

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

Вы помните, как мы находим наклон нелинейного графика?

Да производные!

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

Вы можете спросить, почему мы не можем напрямую найти глобальный минимум с помощью первого производного теста? Что, если мы застрянем в долине, которая не является глобальным минимумом? Зачем продвигаться дюйм за дюймом через градиентный спуск?

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

Чтобы найти локальный минимум, мы должны сначала дифференцировать нашу функцию MSE по весу и смещению.

Развернуть Y ^:

Различия в отношении w:

Подсказка - используйте правило цепочки и правило константы.

Упростить:

Затем примените тот же процесс для дифференциации по b

Отлично, теперь мы можем вычислять градиенты, подставляя значения Y и Y ^!

5. Обновите вес и смещение (все еще GD)

После нахождения градиентов мы будем использовать следующие два уравнения для обновления нашего веса и смещения:

  1. Почему мы вычитаем?

Потому что вычитание направляет модель в направлении локального минимума.

  • Помните, если градиент (+), мы идем влево (-)
  • если градиент (-), идем вправо (+)

2. L означает скорость обучения.

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

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

В основном мы наблюдали, что скорость человека пропорциональна уклону горы.

Эта часть является ключевой для понимания скорости обучения.

Обычно скорость обучения определяется как небольшое число (например, 0,001), чтобы модель регрессии не выходила за рамки и не создавала больше ошибок при настройке весов и смещений. А поскольку L умножается на градиенты, поведение регулировки веса и смещения будет таким же, как у человека, спускающегося с этой горы.

Приспосабливаемся!

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

Этот процесс был одной итерацией градиентного спуска. Однако мы еще не закончили. Наша модель немного улучшилась, но все равно мусор. Мы хотим сделать Тоби гордым, а не более подавленным. Мы должны сделать еще кое-что.

6. Выполните несколько эпох

Эпоха - это определение машинного обучения для перебора всего набора данных, вычисления функции потерь и выполнения градиентного спуска.

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

Применим градиентный спуск еще 10 раз!

Отлично! Выглядит лучше. Как насчет еще 15 раз?

Ух ты! Хорошо, давайте увеличим его до 300 эпох (кстати, не пробуйте это вручную. Используйте код)

Джекпот! Похоже, это линия наилучшего соответствия.

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

Наша ошибка уменьшилась с 1,5 * 10⁹ до 3,127,096. Это уменьшение на 99,7%! Несмотря на то, что это значение может показаться большим, имейте в виду масштаб оси заработной платы и общий разброс баллов. Если бы фактические точки были упакованы еще ближе друг к другу, мы получили бы еще меньшую ошибку.

Вы спросите, а что, если мы будем увеличивать количество эпох? Это возможно, но через определенный момент уменьшение погрешности станет крайне небольшим и незначительным. Это также может привести к переоснащению или даже увеличению нашей ошибки (превышения). Для нашей модели полученная нами ошибка вполне приемлема. Наша модель достигла локального минимума.

Здесь мы визуально наблюдаем процесс прохождения нескольких эпох:

7. Выберите оптимальный вес и смещение.

После запуска нескольких эпох и получения оптимального значения ошибки это хороший показатель того, что текущий вес и смещение предоставят нам линию, наиболее подходящую для нашей модели. Давай узнаем, что это такое!

  • w = 9449.9623
  • b = 25792.2002

Таким образом, окончательное уравнение для нашей модели…

Вот и все! Теперь Тоби может использовать эту модель линейной регрессии для точного прогнозирования заработной платы предполагаемого сотрудника на основе его / ее многолетнего опыта работы.

Тоби будет очень горд!

Ключевые выводы

  • Линейная регрессия - это поиск уравнения линии, которое наилучшим образом соответствует заданному набору данных линейной формы.
  • мы начинаем со случайных значений для наших весов и смещений, используем функцию потерь для измерения ошибки и градиентный спуск, чтобы уменьшить ошибку
  • Линейная регрессия помогает нам понять две наиболее фундаментальные концепции для большинства алгоритмов машинного / глубокого обучения: функция потерь и градиентный спуск.
  • В конце концов, машинное обучение - это не чудо. Это серия сложных математических уравнений, за которыми следует нахождение локального минимума с помощью некоторого исчисления.
  • Понимание интуитивно понятного процесса моделей машинного обучения позволяет нам использовать логику для поиска решений, а не просто запоминать кучу кода.

Если вам понравилась статья или вы узнали что-то новое, оставьте несколько аплодисментов, свяжитесь со мной в LinkedIn и узнайте, чем я занимаюсь в моем ежемесячном информационном бюллетене.