Линейная регрессия и полиномиальная регрессия - одна из простых статистических моделей машинного обучения.
« Регрессия - это подход к моделированию отношений между зависимой переменной и независимой переменной»
Существуют различные типы регрессии, такие как линейная регрессия, полиномиальная регрессия и другие. В этом блоге мы собираемся обсудить, как мы можем интерпретировать линейную регрессию и полиномиальную регрессию, используя метод нормального уравнения.
Набор данных
Гипотеза линейной регрессии и полиномиальной регрессии
Функция потерь
Нам нужно найти лучший 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