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

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

Набор данных

Гипотеза линейной регрессии и полиномиальной регрессии

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

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

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

Формулировка метода нормального уравнения

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

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

Код для линейной регрессии с использованием метода нормального уравнения

def fnLinearRegression_NormalEquation(X, Y):
    X_transpose = np.transpose(X)
    X_covariance = np.dot(X_transpose, X)
    X_covariance_inv = np.linalg.inv(X_covariance)
    Y_covarinace = np.dot(np.transpose(X), Y)
    Coeff = np.dot(X_covariance_inv, Y_covarinace)
    return Coeff
X_train_NE = np.c_[X_train,np.ones(X_train.shape[0])]
X_test_NE = np.c_[X_test,np.ones(X_test.shape[0])]Coeff = fnLinearRegression_NormalEquation(X_train_NE, Y_train)

Сравнение:

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

  • Необходимо выбрать скорость обучения
  • Требуется много итераций - может замедлиться
  • Хорошо работает, даже если n большое (миллионы)
  • Лучше подходит для больших данных

Нормальное уравнение

  • Не нужно выбирать скорость обучения
  • Не нужно повторять, проверять сходимость и т. Д.
  • Нормальное уравнение должно вычислять (X ^ T X) ^ - 1, и это обратная матрица (n x n), а обратное вычисление занимает O (N³) времени.
  • Медленно, если n большое

Блокнот ipython:
https://github.com/VenkateshGupt/MediumArticles/blob/master/Linear%20Regression_Normal_Equation_Method.ipynb