В прошлой статье мы говорили о цикле обучения модели машинного обучения на примере линейной регрессии. Сегодня поподробнее ознакомимся с этим методом машинного обучения, разберемся как её обучать методом наименьших квадратов, и даже реализуем это собственноручно.
Линейная регрессия
Линейная регрессия — это метод машинного обучения с учителем, который используется для предсказания непрерывной целевой переменной от одного или нескольких независимых признаков. В основе метода лежит предположение предполагает о том, что существует линейная связь между признаками и целевой переменной. Эта связь моделируется с помощью линейной функции. Модель линейной регрессии пытается найти лучшую прямую, которая может описывать зависимость между независимыми признаками и зависимой переменной. Это делается с помощью поиска оптимальных коэффициентов, которые могут быть использованы для описания линейной функции. Эта модель может быть использована как для предсказания, так и для анализа влияния признаков на целевую переменную.
Линейная регрессия может использоваться для решения различных задач. Примерами успешного применения этого метода могут служить такие задачи как: прогнозирование продаж, прогнозирование цены на недвижимость, анализ влияния факторов на уровень заболеваемости и т.д. Однако, она не эффективна для решения задач, где не существует линейной связи между признаками и целевой переменной.
Основная идея подбора коэффициентов в линейной регрессии — нахождение лучшей прямой, которая может описать зависимость между зависимой и целевой переменной. Формула линейной регрессии может быть записана следующим образом:
y = β0 + β1×1 + β2×2 + … + βnxn
где y — предсказываемая зависимая переменная, x1, x2, …, xn — независимые переменные, β0, β1, β2, …, βn — коэффициенты регрессии.
Цель — найти оптимальные значения коэффициентов β0, β1, β2, …, βn, которые минимизируют сумму квадратов ошибок. Это может быть сделано с помощью методов оптимизации, к примеру таких как градиентный спуск или метод наименьших квадратов. В этой статье рассмотрим именно второй метод.
Метод наименьших квадратов
Метод наименьших квадратов (Ordinary Least Squares, OLS) — это популярнейший метод для подбора коэффициентов в линейной регрессии. Он заключается в минимизации суммы квадратов разностей между наблюдаемыми значениями и прогнозируемыми значениями. Таким образом, метод наименьших квадратов стремится минимизировать суммарные ошибки прогнозирования, чтобы получить наилучшую линейную модель.
Метод наименьших квадратов предполагает, что ошибки прогнозирования являются независимыми и случайными. Если это условие не выполняется, результаты могут быть недостоверными. Также следует отметить, что метод наименьших квадратов предполагает линейную зависимость между предсказываемым и наблюдаемым значениями.
Математически это выражается следующим образом:
𝑦̂ = 𝑏0 + 𝑏1𝑥1 + … + 𝑏𝑛𝑥𝑛
где 𝑦̂ — предсказанное значение, 𝑏0, 𝑏1, …, 𝑏𝑛 — коэффициенты модели, 𝑥1, 𝑥2, …, 𝑥𝑛 — предикторы.
Мы минимизируем сумму квадратов ошибок:
𝑆𝑂𝑆=∑𝑖(𝑦𝑖−𝑦̂𝑖)2
где 𝑦𝑖 — фактическое значение, 𝑖 — номер образца в нашем наборе данных.
ML Практикум: от теории к промышленному использованию
Код курса
PYML
Ближайшая дата курса
26 мая, 2025
Продолжительность
24 ак.часов
Стоимость обучения
54 000 руб.
Пример реализации подбора коэффициентов линейной регрессии методом наименьших квадратов с применением Python
Рассмотрим применение данной методики для стандартного датасета scikit-learn о диабетиках. Цель модели в данном случае количественно предсказать прогрессию заболевания через год после исходного уровня. Импортируем всё что над для этого понадобится:
import numpy as np from sklearn.datasets import load_diabetes from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler
Первым делом получим данные и отнормируем их, так как линейная регрессия очень чувствительна к нормировке:
diabetes = load_diabetes() scaler = MinMaxScaler() inputs = scaler.fit_transform(diabetes.data) targets = diabetes.target X_train, X_test, y_train, y_test = train_test_split(inputs, targets, test_size=0.3, random_state=42)
Далее реализуем класс для линейной регрессии и MSE для оценки итоговой модели. Мы, конечно, можем использовать готовое решение из библиотеки, но так будет сложнее понять «магию» которая происходит «под капотом».
class LinearRegression: def __init__(self): self.weights = None def fit(self, X, y): X = np.insert(X, 0, 1, axis=1) self.weights = np.linalg.inv(X.T @ X) @ X.T @ y return self def predict(self, X): X = np.insert(X, 0, 1, axis=1) return X @ self.weights def mean_squared_error(y_true, y_pred): return np.mean((y_true - y_pred) ** 2)
Метод fit отвечает за реализацию метода наименьших квадратов, который подбирает весовые коэффициенты линейной функции аналитически. Метод predict использует полученные коэффициенты для прогноза. Теперь, наконец, обучим модель и оценим её качество:
model = LinearRegression().fit(X_train, y_train) print(f'MSE модели на обучающей выборке {mean_squared_error(model.predict(X_train), y_train)}') print(f'MSE модели на тестовой выборке {mean_squared_error(model.predict(X_test), y_test)}') Out: MSE модели на обучающей выборке 2924.0463790726394 MSE модели на тестовой выборке 2821.7509810014435
Для чистоты эксперимента сравним нашу реализацию с реализацией scikit-learn:
from sklearn.linear_model import LinearRegression reg = LinearRegression().fit(X_train, y_train) print(f'MSE модели на обучающей выборке {mean_squared_error(reg.predict(X_train), y_train)}') print(f'MSE модели на тестовой выборке {mean_squared_error(reg.predict(X_test), y_test)}') Out: MSE модели на обучающей выборке 2924.046379072639 MSE модели на тестовой выборке 2821.750981001311
Как видим, получаем аналогичные результаты.
Преимущества и недостатки линейной регрессии
Преимущества линейной регрессии:
- Простота и удобство в использовании: линейная регрессия является одним из самых простых методов машинного обучения, который может быть легко использован и интерпретирован.
- Эффективность при линейных зависимостях: линейная регрессия может предсказывать значения зависимой переменной с высокой точностью, если между независимыми и зависимыми переменными существует линейная связь.
- Интерпретируемость: в линейной регрессии каждый коэффициент регрессии может быть использован для определения влияния каждой независимой переменной на зависимую переменную.
Недостатки линейной регрессии:
- Ограниченная эффективность при нелинейных зависимостях: если между незав усимыми и зависимыми переменными существует нелинейная зависимость, линейная регрессия может давать неточные предсказания.
- Необходимость проведения предварительной подготовки данных: линейная регрессия чувствительна к выбросам и мультиколлинеарности, так что необходимо выполнить предварительную подготовку данных.
ML Практикум: от теории к промышленному использованию
Код курса
PYML
Ближайшая дата курса
26 мая, 2025
Продолжительность
24 ак.часов
Стоимость обучения
54 000 руб.
Хотя метод наименьших квадратов прост в реализации и эффективен в большинстве случаев, есть случаи, когда он может дать недостаточно точные результаты, если данные содержат выбросы или значительные отклонения. В любом случае, метод наименьших квадратов является важным инструментом в анализе данных и прогнозировании значений на основе линейных моделей. Линейной регрессия один из базовых инструментов в области Data Science.
Чтобы глубже изучить его, а так же более продвинутые методы и инструменты современной науки о данных посетите практические курс «Машинное обучение на Python» в нашем лицензированном учебном центре в Москве, который специализируется на обучении и повышении квалификации ИТ-специалистов.