(Демистификация математики, лежащей в основе линейной регрессии, с использованием градиентного спуска)

Введение

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

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

Путешествие до сих пор

Ранее мы обсуждали математическую интуицию и реализацию на языке Python линейной регрессии методом наименьших квадратов.



Оставаясь в сфере линейной регрессии, сегодня мы начнем обсуждение с «линейной регрессии с градиентным спуском». Основные концепции регрессии по-прежнему применяются, но разница в том, что этот алгоритм будет многовариантным (более одной функции).

Линейная регрессия

Линейная регрессия – это самый простой алгоритм машинного обучения для установления взаимосвязи между независимой переменной (X) и зависимой переменной (Y).

Предположим, у нас есть несколько признаков или независимых переменных; сохраняя модель линейной, мы можем вычислить наклон для каждойнезависимой переменной. Эти «Sвертикали»называются коэффициентамииливесамирегрессионной модели.

Поскольку значения того или иного коэффициента будут зависеть от всех независимых переменных, называть их наклонами технически некорректно. Следовательно, переменная (от w₁ до w₂) должна называться весом модели. А «перехват» (b) называется предвзятостью.

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

Градиентный спуск

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

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

Ответ прост: Вычислительная эффективность.

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

Более внимательное рассмотрение показывает, что для каждого решения, которое мы должны найти, мы должны вычислить транспонированную и обратную матрицу. Кроме того, вычисление транспонирования — это хорошо, но вычисление «обратной матрицы» является затратным в вычислительном отношении.

Мы знаем, что для задачи с «n» независимыми переменными матрица будет иметь «n*n» элементов. Операция, которая инвертирует матрицу «n*n», имеет сложность O(n³).

И эта маленькая деталь дает нам общий случай сложности по методу наименьших квадратов: O(n³). Это хорошо для небольших задач, но временная сложность становится проблемой, поскольку размерность увеличивается.

В подходе градиентного спуска метод линейен по «n» для задачи с размерностью «K». Но нам также нужно многократно повторять весь набор данных. что добавит константу к сложности, но независимо от этого решение градиентного спуска всегда будет быстрее, чем.

TL;DR

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

Математика линейной регрессии с градиентным спуском

Подход простой,

  1. Инициализируйте веса и смещения равными нулю.
  2. Используйте текущую модель, чтобы делать прогнозы.
  3. Рассчитайте ошибку (стоимость) на основе прогноза.
  4. Обновите веса в соответствии с ошибкой.
  5. Повторяйте шаги со 2 по 4, пока не будет достигнут удовлетворительный результат.

Теперь, чтобы реализовать шаги, описанные выше, нам нужно решить две важные проблемы:

  1. Как настроить функцию стоимости (которая будет оценивать и представлять ошибку/потери модели)
  2. Как обновить веса.

Давайте пройдемся по этим шагам один за другим.

Функция стоимости

Функция стоимости — это не что иное, как функция, которая может вычислить ошибку для модели. И мы знаем, что ошибка для одного прогноза рассчитывается как разница между фактическим значением и прогнозируемым значением.

Теперь мы можем расширить прогнозируемое значение, используя стандартную модель регрессии, описанную выше.

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

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

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

Обновление весов

Чтобы обновить веса, нам нужно найти две вещи:

  1. Насколько нам нужно измениться и
  2. Нужно ли увеличивать или уменьшать (направление изменений)

Эти вещи можно извлечь из градиента функции стоимости.

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

Итак, мы установили, что если мы вычислим Градиент функции стоимости, мы сможем найти направление и степень, на которые нам нужно изменить веса. Теперь осталось только рассчитать сам градиент.

Вычисление градиента относительно весов

Мы продифференцируем нашу функцию стоимости по весам (w).

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

Наконец, результат

Вычисление градиента с учетом смещения

Точно так же, как и раньше, мы будем дифференцировать нашу функцию стоимости по отношению к смещению (b)

Окончательный результат

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

Теперь градиент становится:

Наше последнее правило обновления

Мы просто масштабируем правило обновления с постоянной скоростью обучения (Lr). И это наше последнее правило обновления.

Заключение

  • Вот и все для этой статьи; у вас только что было много математики в этой части машинного обучения с нуля. Поздравляем! Сегодня вы немного увеличили свои знания ML на небольшую.
  • Поскольку мы рассмотрели всю математическую интуицию, лежащую в основе линейной регрессии с градиентным спуском, в следующей статье мы воспользуемся всеми этими знаниями и Реализуйте алгоритм на python, используя только NumPy!
  • Подпишитесь на меня, чтобы не пропустить новые статьи по науке о данных, машинному обучению и искусственному интеллекту.

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

Заключительные мысли и заключительные комментарии

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