В машинном обучении линейная регрессия — это широко используемый метод моделирования взаимосвязи между зависимой переменной и одной или несколькими независимыми переменными, также известными как признаки или предикторы.
Почему линейная регрессия?
Линейная регрессия в машинном обучении — популярный и широко используемый метод, поскольку он относительно прост и интерпретируем и часто позволяет добиться хороших результатов при решении широкого круга задач. Кроме того, все, что мы узнаем в линейной регрессии, мы можем реализовать в других алгоритмах машинного обучения.
Линейная регрессия — это алгоритм обучения с учителем, что означает, что для обучения модели требуются размеченные данные. Существует несколько типов линейной регрессии, которые можно использовать в зависимости от конкретной проблемы и имеющихся данных. Некоторые из наиболее распространенных типов линейной регрессии включают в себя:
- Простая линейная регрессия: это самый простой тип линейной регрессии, в котором есть только одна независимая переменная и одна зависимая переменная. Цель состоит в том, чтобы найти линейную зависимость между двумя переменными.
- Множественная линейная регрессия: этот тип линейной регрессии включает более одной независимой переменной, и цель состоит в том, чтобы найти линейную связь между независимыми переменными и зависимой переменной.
- Полиномиальная регрессия: этот тип линейной регрессии используется, когда связь между независимой переменной и зависимой переменной не является линейной, но может быть аппроксимирована полиномиальной функцией.
Давайте подробно разберем простую линейную регрессию.
Простая линейная регрессия
Простая линейная регрессия — это статистический метод, используемый для моделирования взаимосвязи между двумя переменными путем подбора линейного уравнения к данным. Одна переменная (обычно обозначаемая как «x») рассматривается как предиктор или независимая переменная, а другая переменная (обычно обозначаемая как «y») является откликом или зависимой переменной.
Уравнение простой линейной регрессии:
y = β0 + β1*x + ε
Где,
y — зависимая переменная
x — независимая переменная
β0 — точка пересечения
β1 — коэффициент при x
ε — член ошибки
В простой линейной регрессии мы пытаемся найти наиболее подходящую линию, которая объясняет взаимосвязь между x и y. Эта линия называется линией регрессии.
Пример кода
Вот пример простой линейной регрессии в Python:
import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression # generate some random data for x and y x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 4, 5, 6, 7]) # visualize the data using scatter plot plt.scatter(x, y) plt.xlabel('x') plt.ylabel('y') plt.show() # create a linear regression model and fit the data model = LinearRegression() model.fit(x.reshape(-1, 1), y) # predict the values of y using the model y_pred = model.predict(x.reshape(-1, 1)) # visualize the regression line plt.scatter(x, y) plt.plot(x, y_pred, color='red') plt.xlabel('x') plt.ylabel('y') plt.show() # print the coefficients of the linear regression model print('Intercept:', model.intercept_) print('Coefficient:', model.coef_)
В этом примере мы сгенерировали некоторые случайные данные для x и y и визуализировали данные с помощью диаграммы рассеяния. Затем мы создали модель линейной регрессии, используя класс LinearRegression из scikit-learn, и подогнали данные к модели. Затем мы использовали модель, чтобы предсказать значения y для заданных значений x. Наконец, мы визуализировали линию регрессии и распечатали коэффициенты модели линейной регрессии.
Вывод этого кода будет:
Пересечение: 1,5
Коэффициент: [1,1]
Это означает, что точка пересечения линии регрессии равна 1,5, а коэффициент при x равен 1,1. Следовательно, уравнение линии регрессии имеет вид:
y = 1.5 + 1.1*x
Это уравнение можно использовать для предсказания значения y для любого заданного значения x.
Интуиция
В приведенном мной примере кода мы пытались смоделировать взаимосвязь между x и y, где x — независимая переменная, а y — зависимая переменная. Точечная диаграмма данных показала, что существует положительная корреляция между x и y, что означает, что с увеличением x увеличивается и y.
Созданная нами модель линейной регрессии использовала данные, чтобы найти наиболее подходящую линию, которая могла бы объяснить эту взаимосвязь. Линия была найдена путем минимизации суммы квадратов расстояний между фактическими точками данных и предсказанными значениями на линии. Затем эту линию можно использовать для предсказания значений y для любого заданного значения x.
В выводе кода мы видим, что пересечение линии равно 1,5, а коэффициент x равен 1,1. Это означает, что если x=0, то y=1,5, и на каждую единицу увеличения x y увеличивается на 1,1.
В целом, простая линейная регрессия является ценным инструментом для понимания взаимосвязи между двумя переменными и может использоваться для прогнозирования зависимой переменной на основе независимой переменной.
Как найти m(slop) и b(intercept)
Формула для наклона (m) и точки пересечения (b) в простой линейной регрессии может быть получена следующим образом:
Пусть (x1, y1), (x2, y2),..., (xn, yn) будут n точками данных. Мы хотим найти значения m и b, которые минимизируют сумму квадратов разностей между фактическими значениями y и предсказанными значениями y на линии. Это можно записать как:
мин Σ(yi — (mx + b))²
Чтобы найти значения m и b, минимизирующие это выражение, мы можем взять частные производные по m и b и приравнять их к нулю.
Взяв частную производную по m, получим:
∂/∂m Σ(yi — (mx + b))² = -2Σxi(yi — (mx + b))
Приравняв это значение к 0 и найдя m, мы получим:
Σxiyi — nxb = mΣxi²
Разделив обе части на Σxi², получим:
m = (Σxiyi — nxb) / Σxi²
Взяв частную производную по b, получим:
∂/∂b Σ(yi — (mx + b))² = -2Σ(yi — (mx + b))
Приравняв это значение к 0 и найдя b, мы получим:
Σyi — mΣxi = nb
Разделив обе части на n, получим:
b = ȳ — mx̄
где ȳ и x̄ - средние значения y и x соответственно. Это дает нам формулу для наклона (m) и точки пересечения (b) в терминах выборочных средних и сумм произведений и квадратов. После того, как мы вычислили m и b с помощью этих формул, мы можем использовать их для создания уравнения регрессии:
y = mx + b
Это уравнение представляет собой линию наилучшего соответствия, которая описывает взаимосвязь между x и y в данных.
Код с нуля для простой линейной регрессии
Вот пример реализации простой линейной регрессии в Python с использованием метода наименьших квадратов:
import numpy as np class SimpleLinearRegression: def __init__(self): self.slope = None self.intercept = None def fit(self, X, y): n = len(X) x_mean = np.mean(X) y_mean = np.mean(y) # Calculate the sums of squares and products ss_xy = np.sum(X*y) - n*x_mean*y_mean ss_xx = np.sum(X*X) - n*x_mean*x_mean # Calculate the slope and intercept self.slope = ss_xy / ss_xx self.intercept = y_mean - self.slope*x_mean def predict(self, X): return self.slope*X + self.intercept
Вот объяснение кода:
- Мы импортируем библиотеку NumPy для численных расчетов.
- Мы определяем класс
SimpleLinearRegression
, который содержит методы для подбора модели и создания прогнозов. - В конструкторе (
__init__
) мы инициализируем атрибутыslope
иintercept
значениемNone
. - Метод
fit
принимает переменную-предикторX
и целевую переменнуюy
в качестве входных данных. Он вычисляет выборочные средние значенияX
иy
, а затем использует их для расчета наклона и точки пересечения линии регрессии с использованием формул, полученных ранее. Эти значения хранятся в атрибутахslope
иintercept
объекта. - Метод
predict
принимает новый набор значенийX
и возвращает соответствующие предсказанные значенияy
, используя подобранную линию регрессии.
Чтобы использовать эту реализацию, вы должны создать экземпляр класса SimpleLinearRegression
, вызвать метод fit
с данными обучения, а затем вызвать метод predict
с новыми тестовыми данными для получения прогнозов. Вот пример использования:
# Create a simple linear regression object regressor = SimpleLinearRegression() # Generate some random data X = np.array([1, 2, 3, 4, 5]) y = np.array([2, 4, 5, 4, 6]) # Fit the regression line to the data regressor.fit(X, y) # Make predictions for new data X_new = np.array([6, 7, 8]) y_pred = regressor.predict(X_new) # Print the predicted values print(y_pred)
Выход: [6,4 7,8 9,2]
Метрики регрессии | MSE, MAE и RMSE | Оценка R2 и скорректированная оценка R2
Метрики регрессии — это количественные меры, которые оценивают производительность моделей регрессии. Метрики регрессии помогают оценить, насколько хорошо модель регрессии способна предсказать выходную переменную.
MAE (средняя абсолютная ошибка)
MAE — это средняя абсолютная разница между прогнозируемыми и фактическими значениями. Он измеряет среднюю величину ошибок в прогнозах. Формула для средней абсолютной ошибки (MAE):
MAE = (1/n) * Σ|i=от 1 до n| |yᵢ — ȳ|
где:
n — общее количество наблюдений
yᵢ — прогнозируемое значение для i-го наблюдения
ȳ — фактическое значение для i-го наблюдения
MAE выражается в тех же единицах, что и выходная переменная, что позволяет легко интерпретировать величину ошибок. Он менее чувствителен к выбросам по сравнению с другими показателями регрессии, такими как MSE и RMSE. Однако он не учитывает направление ошибок, а это означает, что завышенные и заниженные прогнозы обрабатываются одинаково. Он придает равный вес всем ошибкам, независимо от их величины или важности.
MSE (среднеквадратичная ошибка)
Среднеквадратическая ошибка (MSE) — это показатель регрессии, который используется для оценки производительности регрессионной модели. Он решает проблему оценки того, насколько хорошо регрессионная модель может соответствовать данным и делать точные прогнозы.
Основная проблема, которую решает MSE, заключается в количественном определении среднего квадрата разницы между прогнозируемым и фактическим значениями выходной переменной. Эта метрика наказывает за большие ошибки сильнее, чем за мелкие, поскольку возводит в квадрат каждую разницу перед усреднением. Возводя ошибки в квадрат, метрика подчеркивает важность больших ошибок, которые могут оказать большее влияние на общую производительность модели.
Таким образом, MSE и MAE решают разные задачи регрессионного моделирования. MSE подчеркивает важность больших ошибок и более чувствителен к выбросам, в то время как MAE обрабатывает все ошибки одинаково и менее чувствителен к выбросам. Выбор между этими показателями зависит от конкретных требований задачи и характера данных.
Среднеквадратичная ошибка (RMSE)
RMSE — это квадратный корень из среднеквадратичной ошибки (MSE), которая является еще одним распространенным показателем регрессии.
Необходимость в RMSE возникает из-за того, что MSE имеет квадратную единицу измерения, что может затруднить интерпретацию и сравнение различных наборов данных. Извлекая квадратный корень из MSE, RMSE выражает ошибки в тех же единицах, что и выходная переменная, что упрощает интерпретацию величины ошибок. RMSE широко используется в машинном обучении и статистике как мера производительности модели, особенно в случаях, когда выходная переменная имеет естественную шкалу или единицы измерения.
R в квадрате (R²)
Квадрат R (R²) — это показатель регрессии, который измеряет долю дисперсии зависимой переменной, которая может быть объяснена независимыми переменными в регрессионной модели. R² — это статистическая мера, которая находится в диапазоне от 0 до 1, причем более высокие значения указывают на лучшее соответствие между моделью и данными.
Необходимость в R² возникает из-за того, что модели регрессии используются для прогнозирования значений зависимой переменной на основе одной или нескольких независимых переменных. Цель регрессионного моделирования — построить модель, которая может точно предсказать значения зависимой переменной на основе независимых переменных. R² обеспечивает меру того, насколько хорошо модель соответствует данным и какая часть изменчивости зависимой переменной может быть объяснена независимыми переменными.
Формула для R²:
где:
- SSres — это сумма квадратов невязок или ошибок (разницы между прогнозируемыми и фактическими значениями) из регрессионной модели.
- SStot — это общая сумма квадратов или сумма квадратов разностей между фактическими значениями и средним значением зависимой переменной.
Значение R² = 0 указывает на то, что регрессионная модель не объясняет ни одной дисперсии зависимой переменной, а значение R² = 1 указывает на то, что регрессионная модель полностью объясняет все дисперсии зависимой переменной. Однако на практике регрессионная модель редко имеет значение R², равное точно 1.
Скорректированный R-квадрат
Скорректированный R-квадрат — это вариант R-квадрата, который корректирует количество независимых переменных в регрессионной модели. В то время как R-квадрат обеспечивает меру согласия регрессионной модели, скорректированный R-квадрат учитывает количество независимых переменных в модели и обеспечивает более консервативную оценку доли дисперсии в зависимой переменной, которая объясняется независимой переменной (переменными).
Формула для скорректированного R-квадрата:
Скорректированный R² = 1 — [(1 — R²) * (n — 1) / (n — k — 1)]
где:
- R² - это значение R-квадрата
- n - количество наблюдений в наборе данных
- k - количество независимых переменных в модели
Скорректированный R-квадрат используется для сравнения эффективности регрессионных моделей с различным количеством независимых переменных. Это наказывает за добавление в модель ненужных независимых переменных, что может привести к переоснащению и снижению эффективности обобщения. Скорректированный R-квадрат всегда будет ниже, чем R-квадрат, когда в модель добавляются дополнительные независимые переменные.
Более высокое значение скорректированного R-квадрата указывает на лучшее соответствие между моделью регрессии и данными, а более низкое значение скорректированного R-квадрата указывает на худшее соответствие. Однако, как и R-квадрат, скорректированный R-квадрат следует использовать в сочетании с другими показателями регрессии и визуализациями, чтобы полностью оценить производительность регрессионной модели.
Проверьте код по ссылке ниже: