В статистике линейная регрессия — это регрессионный анализ, в котором используется функция наименьших квадратов, называемая уравнением линейной регрессии, для моделирования связи между одной или несколькими независимыми переменными и зависимыми переменными.Википедия.
Простая линейная регрессия
Когда есть только одна независимая переменная, это становится простой линейной регрессией.
Идея простой модели линейной регрессии
Чтобы получить простую модель линейной регрессии, предполагается, что существует выборка, содержащая четыре выборки, которая характеризуется площадью дома и ценой в качестве выходной выборки, как показано на рисунке:
Найдите прямую линию, которая лучше всего соответствует взаимосвязи между демонстрационными функциями и демонстрационными выходными данными.
Предположим, что уравнение линии наилучшего соответствия имеет вид:, то для выборочных признаковкаждое значениеПрогнозируемое значение:. И то, что мы хотим, это правдаи прогнозируемое значениеПромежуток между ними как можно меньше.
Можно использоватьПредставляет разрыв между двумя значениями, для всех выборок используйте формулу суммирования, чтобы подвести итог:
∑ я знак равно 1 м |у ( я ) -у ^ ( я ) |
Однако с этой формулой есть проблема, и ее нелегко дифференцировать.Чтобы решить эту проблему, мы можем сначалаКвадрат, поэтому окончательная формула принимает вид:
∑ я =1 м (у ( я ) - у ^ ( я ) ) 2
Наконец, замените, это:
∑ я =1 м (у ( я ) -а Икс ( я ) -b ) 2
Поэтому найденная простая модель линейной регрессии состоит в том, чтобы найти подходящие a и b такие, чтобы значение этой функции было как можно меньше, что также называется функцией потерь.
Наименьших квадратов
найти подходящие a и b такие, чтоЗначение минимально возможное, такой метод называется методом наименьших квадратов.
Как найти а и б? Пусть функция, делая производную от a и b равной 0 соответственно.
Производная по b:,придется:
б = у ¯ ¯ ¯ −a х ¯ ¯ ¯
Производная по a:,придется:
а =∑ м я =1 (х ( я ) -х ¯ ¯ ¯ )(у ( я ) -у ¯ ¯ ¯ ) ∑ м я =1 ( х ( я ) - х ¯ ¯ ¯ ¯ ) 2
Примечание. Процесс вывода формулы здесь опущен.
Реализация простой линейной регрессии
С помощью математики удобнее реализовать простую линейную регрессию.
Сначала объявите набор образцов:
import numpy as np
x = np.array([1., 2., 3., 4., 5.])
y = np.array([1., 3., 2., 3., 5.])
Среднее значение x и y используется в формуле:
x_mean = np.mean(x)
y_mean = np.mean(y)
Есть два способа найти значения a и b. Первый заключается в использовании цикла for:
# 分子
num = 0.0
# 分母
d = 0.0
for x_i, y_i in zip(x, y):
num += (x_i - x_mean) * (y_i - y_mean)
d += (x_i - x_mean) ** 2
a = num / d
b = y_mean - a * x_mean
Во-вторых, использовать умножение матриц:
num = (x - x_mean).dot(y - y_mean)
d = (x - x_mean).dot(x - x_mean)
a = num / d
b = y_mean - a * x_mean
Примечание. Более эффективно использовать умножение матриц.
Найдя a и b, простая линейная модель имеет:. Графическое представление текущего примера:
Метрики для измерения линейной регрессии
ошибка
Обученная модель обычно проверяется на точность модели с использованием тестового набора данных. Для простых моделей линейной регрессии, конечно, вы можете использоватьЧтобы измерить, но его значение связано с количеством тестовых образцов m, метод улучшения очень прост, достаточно разделить на m, то есть среднеквадратичную ошибку (Mean Squared Error):
M SE : 1 м ∑ i =1 м (y ( i) t est −y ^ ( i) t est ) 2
np.sum((y_predict - y_true) ** 2) / len(y_true)
Стоит отметить, что размерность СКО - это квадрат единицы выборки. Иногда этот квадрат не очень хорош в некоторых случаях. Чтобы устранить разницу в размерности, СКО будет укоренен и будет получен среднеквадратический , Ошибка (среднеквадратичная ошибка):
R MS E: 1 m ∑ i =1 m (y (i) t est −y ^ _test (i) ) 2 − −− −− −− −− −− −− −− −− −− √ =M SE t es t − −− −− −− √
import math
math.sqrt(np.sum((y_predict - y_true) ** 2) / len(y_true))
Другой мерой является средняя абсолютная ошибка, которая суммирует абсолютные значения разницы между прогнозируемым значением и истинным значением в наборе тестовых данных, а затем берет среднее значение:
M AE : 1 м ∑ я знак равно 1 м |y ( я ) т эс т - y ^ ( я ) т эс т |
np.sum(np.absolute(y_predict - y_true)) / len(y_true)
Примечание: в модуле метрик Scikit Learnmean_squared_error()
метод представляет MSE,mean_absolute_error()
Метод представляет MAE, нет метода для представления RMSE.
R Squared
Идя дальше, ограничение MSE, RMSE и MAE заключается в том, что измерение модели может быть выполнено только в том случае, если чем меньше значение, тем лучше модель.Обычно измерение модели использует 1 для представления наилучшего и 0 для представления наихудшего.Поэтому вводится новая модель Метрики: R в квадрате, рассчитывается как:
R 2 =1 −S S r es i d u al S S t ot a l
, указывающий на ошибку, возникшую при использовании модели;, что означает использоватьошибка в предсказании.
Более подробно прогнозируемое значение x для каждой прогнозируемой выборки является средним значением выборки., такая модель называется базовой моделью, когда наша модель равна базовой модели,равно 0, когда наша модель не делает ошибокПолучите максимальное значение 1.
Вы также можете конвертировать, и результат конвертации:
R 2 =1 −M SE ( y ^ ,y ) Варьируется
Реализация тоже проста:
1 - np.sum((y_predict - y_true) ** 2) / len(y_true) / np.var(y_true)
Примечание: в модуле метрик Scikit Learnr2_score()
Методы представляют R в квадрате.
Множественная линейная регрессия
Идея модели множественной линейной регрессии
Когда имеется более одной независимой переменной, это множественная линейная регрессия, как показано на рисунке:
Для n независимых переменных линейная модель, которую мы хотим получить, выглядит следующим образом:
y =θ 0 +θ 1 x 1 +θ 2 x 2 +.. .+θ n x n
Согласно идее простой линейной регрессии, наша цель:
оказаться,,, ...,, так чтокак можно меньше, где.
: прогнозируемое значение i-й выборки в обучающих данных;: j-я независимая переменная i-го образца в обучающих данных.
Если это представлено матрицей, это:
у ^ ( я ) = Икс ( я ) ⋅ θ
в:;.
Идя дальше, будетОн также представлен матрицей, которая имеет вид:
у ^ =Х б ⋅θ
в:,
Поэтому наша цель - сделатькак можно меньше. Решение этой формулы называется решением нормального уравнения множественной линейной регрессии (номинальное уравнение):
θ = (X T b Xb ) − 1 (X T b y )
Реализуйте множественную линейную регрессию
Реализуйте множественную линейную регрессию в классе LinearRegression, используя стиль Scikit Learn.
_init_()
Метод сначала инициализирует модель линейной регрессии,_theta
выражать,interception_
представляет собой перехват,chef_
Коэффициенты, представляющие независимые переменные в регрессионной модели:
class LinearRegression:
def __init__(self):
self.coef_ = None
self.interceiption_ = None
self._theta = None
fit_normal()
Метод обучает модель в соответствии с набором обучающих данных, X_b указывает, что добавленныйДанные выборки признаков и используйте решение нормального уравнения множественной линейной регрессии, чтобы найти:
def fit_normal(self, X_train, y_train):
X_b = np.hstack([np.ones((len(X_train), 1)), X_train])
self._theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train)
self.interception_ = self._theta[0]
self.coef_ = self._theta[1:]
return self
predict()
Этот метод является методом прогнозирования, который также использует матричное умножение:
def predict(self, X_predict):
X_b = np.hstack([np.ones((len(X_predict), 1)), X_predict])
return X_b.dot(self._theta)
score()
Рассчитайте точность модели, используя метрику R Squared для данного набора тестовых данных:
def score(self, X_test, y_test):
y_predict = self.predict(X_test)
return r2_score(y_test, y_predict)
Реализация линейной регрессии в Scikit Learn размещена в модуле linear_model и используется следующим образом:
from sklearn.linear_model import LinearRegression
Особенности линейной регрессии
Алгоритм линейной регрессии — это типичный алгоритм обучения параметрам, который может решить только проблему регрессии и имеет сильную объяснительную силу для данных.
Недостатком является то, что решение нормального уравнения для множественной линейной регрессииВременная сложность высока, т.к., который можно оптимизировать как.