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



Все мои статьи доступны в моем блоге: patrickstar0110.blogspot.com

Здесь мы будем использовать функцию стоимости, немного отличающуюся от MSE. Здесь мы будем использовать нашу базовую функцию Sum of Squared Residual (SSR), чтобы найти оптимальные значения параметров. Сначала мы вручную найдем параметры для одной итерации. Это даст нам полное представление о том, как работает этот алгоритм.

Так чего же мы ждем? Давайте копаться!

Градиентный спуск для линейной регрессии вручную:

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

(1) Набор данных:

(2) Начальные значения параметров:

(3) Функция затрат:

(4) Функция прогнозирования:

(5) Прогнозируемые значения:

(6) Расчет стоимости:

(7) Поиск производных:

(8) Определение u:

(9) Вычисление производной:

(10) Упрощение:

(11) Объединение вычисленных значений:

(12) Найдите другой параметр:

(13) Упрощение:

(14) Расчет:

(15) Объединение вычисленных значений:

(16) Расчет значений производных:

(17) Расчетное значение другого параметра:

(18) Расчет размера шага:

(19) Обновление значений:

(20) Повторите тот же процесс для всех итераций.

Здесь мы видим, что если мы собираемся выполнить 1000 итераций вручную, для таких медлительных детей, как я, это займет целую вечность. Вот почему мы реализуем его на Python! Мы будем использовать производные формулы и некоторые циклы «for» для написания нашего кода на Python.

Давай получим статистику!

Краткое описание процесса:

(1) Инициализировать значения бета 0 и бета 1.

(2) Инициализировать скорость обучения и желаемое количество итераций.

(3) Создайте цикл for, который будет выполняться n раз, где n - количество итераций.

(4) Инициализировать переменные, которые будут содержать ошибку для конкретной итерации.

(5) Сделайте прогноз, используя линейное уравнение.

(6) Вычислите ошибку и добавьте ее в массив ошибок.

(7) Вычислите частные производные для обоих коэффициентов.

(8) Увеличьте стоимость обоих коэффициентов (поскольку в нашем наборе данных есть 3 точки данных).

(9) Обновите значения коэффициентов.

# Давайте код:

(1) Импортируйте некоторые необходимые библиотеки:

(2) Определите набор данных:

(3) Постройте точки данных:

(4) Основная функция для вычисления значений коэффициентов:

(5) Значение коэффициентов:

(6) Прогнозирование значений:

(7) Постройте линию регрессии:

(8) Прогнозирование значений:

(9) График ошибки для каждой итерации:

Вот и все. Мы сделали это! У нас есть оптимальные параметры для 1000 итераций и уменьшенная погрешность. Однако мы видим, что этот метод менее эффективен, если принять во внимание всего несколько итераций (т. Е. 10).

Чтобы найти более подробное объяснение, посетите мой блог: patrickstar0110.blogspot.com

(1) Простая линейная регрессия, объясненная ее производным:
https://youtu.be/od2boSsFtnY

(2) Как рассчитать точность модели с помощью линейной регрессии с нуля:
https://youtu.be/bM3KmaghclY

(3) Простая линейная регрессия с использованием Sklearn:
https://youtu.be/_VGjHF1X9oU

Если у вас есть дополнительные вопросы, напишите мне: [email protected]