Линейная регрессия
В двух словах, линейная модель представляет собой взвешенную сумму входных признаков плюс константу, называемую членом смещения (или членом пересечения), и использует ее для прогнозирования, как показано в следующей формуле:
В этой формуле:
-
y
прогнозируемое значение -
n
это количество функций -
первый
i
собственные значения -
первый
j
параметры модели (включая член смещенияи веса функций)
Обучение модели линейной регрессии — это процесс настройки параметров модели до тех пор, пока модель не будет наилучшим образом соответствовать обучающему набору., для этого нам сначала нужно знать, как измерить, насколько хорошо модель соответствует обучающим данным. Наиболее распространенным показателем производительности регрессионных моделей является среднеквадратическая ошибка (RMSE
), поэтому при обучении модели линейной регрессии кажется, что все дело в поиске минимизацииRMSE
изценность. Однако на практике среднеквадратическая ошибка (MSE
) минимизировать вместоRMSE
свести к минимуму, потому чтоMSE
Расчет прост, а суммаRMSE
Тот же эффект.
в тренировочном набореX
, используйте следующую формулу для расчета линейной регрессииMSE
(является гипотетической функцией):
Чтобы получить функцию минимальной стоимостизначение, есть решение в закрытой форме (математическое уравнение, которое приводит непосредственно к результату), стандартное уравнение:
В этом уравнении:
- заключается в минимизации функции стоимостиценность
- г включительноприбытьВектор целевого значения
Мы генерируем некоторые случайные линейные данные, чтобы проверить эту формулу:
import numpy as np
X = 2 * np.random.rand(100,1)
y = 4 + 3*X +np.random.randn(100,1)
Получите следующий линейный набор данных:
Теперь используем стандартное уравнение для расчета. использоватьNumPy
Предоставленный модуль линейной алгебры (np.linalg
)серединаinv()
функция, чтобы инвертировать матрицу и использоватьdot()
Функция вычисляет внутренний продукт матрицы:
X_b = np.c_[np.ones((100,1)),X] # add x0=1 to each instance
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.t).dot(y)
Функция, в которой мы фактически генерируем данные,, посмотрите на результат формулы:
>>>theta_best
array([[4.21509616],[2.77011339]])
Это то, что мы ожидали(4.21509616),(2,77011339) очень близка, но из-за наличия шума не может быть полностью восстановлена до исходной функции, наносим предсказанный результат на график:
Вычислительная сложность линейна по отношению к количеству экземпляров и признаков, которые вы хотите предсказать, и предсказание удвоенного количества экземпляров (или удвоенного количества признаков) занимает примерно в два раза больше времени.