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

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

Линейная регрессия - это подход или модель для прогнозирования взаимосвязи между различными переменными (в основном зависимой переменной и одной или несколькими независимыми переменными).

Пусть x - независимая переменная, y - зависимая переменная, b - точка пересечения с y и m - наклон прямой, тогда

y = mx + b

Если мы сможем найти значение m и b, мы сможем предсказать значение y для данного x (используя формулу y = mx + b). Но может быть много возможных значений m и b, с помощью которых мы можем сформировать множество линейных линий. Чтобы найти лучшую линию для данного набора данных, мы используем градиентный спуск. Но перед этим посмотрим на функцию стоимости.

Функция затрат

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

Во время обучения нашей модели мы будем иметь фактическое значение y. Мы рассчитаем функцию стоимости, используя фактическое значение y и значение y, вычисленное по формуле y = mx + b. Наша основная цель - уменьшить ошибку (найти наилучшее значение m и b).

n - количество точек данных. y - фактическое значение, а ȳ тире - это значение, вычисленное по формуле y = mx + b.

# equivalent code for cost function
for i in range(0,N):
    error += ((y[i] - (m*x[i] + b)) ** 2) / float(N)

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

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

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

Градиентный спуск работает путем вычисления производной (концепция исчисления) вышеупомянутой функции ошибок. Поскольку у нас есть 2 переменные b и m, нам нужно использовать частные производные по b и m на функции стоимости.

# equivalent code for the above math formula
for i in range(N):
    gradient_m += (2 / N)*( - x[i] * (y[i] - (m * x[i] + b)))
    gradient_b += (2 / N) * (y[i] - (m * x[i] + b))

Мы вычисляем частную производную для всех точек данных, чтобы вычислить значение градиента b и m. Когда мы используем метод линейной регрессии sklearn, алгоритм пытается минимизировать функцию стоимости. Не только линейная регрессия, каждая модель пытается минимизировать функцию затрат в процессе обучения.

Код

Вы можете обратиться к этому коду, чтобы получить больше идей.

Если у вас возникли проблемы с просмотром этого кода, вы можете проверить эту ссылку https://gist.github.com/ArjunCB28/0585aff888dd9ab69572284d16cb85c4.js.

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