В машинном обучении линейная регрессия — это широко используемый метод моделирования взаимосвязи между зависимой переменной и одной или несколькими независимыми переменными, также известными как признаки или предикторы.

Почему линейная регрессия?

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

Линейная регрессия — это алгоритм обучения с учителем, что означает, что для обучения модели требуются размеченные данные. Существует несколько типов линейной регрессии, которые можно использовать в зависимости от конкретной проблемы и имеющихся данных. Некоторые из наиболее распространенных типов линейной регрессии включают в себя:

  1. Простая линейная регрессия: это самый простой тип линейной регрессии, в котором есть только одна независимая переменная и одна зависимая переменная. Цель состоит в том, чтобы найти линейную зависимость между двумя переменными.
  2. Множественная линейная регрессия: этот тип линейной регрессии включает более одной независимой переменной, и цель состоит в том, чтобы найти линейную связь между независимыми переменными и зависимой переменной.
  3. Полиномиальная регрессия: этот тип линейной регрессии используется, когда связь между независимой переменной и зависимой переменной не является линейной, но может быть аппроксимирована полиномиальной функцией.

Давайте подробно разберем простую линейную регрессию.

Простая линейная регрессия

Простая линейная регрессия — это статистический метод, используемый для моделирования взаимосвязи между двумя переменными путем подбора линейного уравнения к данным. Одна переменная (обычно обозначаемая как «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

Вот объяснение кода:

  1. Мы импортируем библиотеку NumPy для численных расчетов.
  2. Мы определяем класс SimpleLinearRegression, который содержит методы для подбора модели и создания прогнозов.
  3. В конструкторе (__init__) мы инициализируем атрибуты slope и intercept значением None.
  4. Метод fit принимает переменную-предиктор X и целевую переменную y в качестве входных данных. Он вычисляет выборочные средние значения X и y, а затем использует их для расчета наклона и точки пересечения линии регрессии с использованием формул, полученных ранее. Эти значения хранятся в атрибутах slope и intercept объекта.
  5. Метод 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-квадрат следует использовать в сочетании с другими показателями регрессии и визуализациями, чтобы полностью оценить производительность регрессионной модели.

Проверьте код по ссылке ниже: