Подбор коэффициентов линейной регрессии методом наименьших квадратов (Ordinary Least Squares)

machine learning курсы, python machine learning уроки, курсы по машинному обучению, python машинное обучение курс, машинное обучение python курс, нейронные сети python, обработка естественного языка python, machine learning курсы, задача регрессии python, Linear Regression, Линейная регрессия, Ordinary Least Squares, OLS, метод наименьших квадратов

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

Линейная регрессия

Линейная регрессия — это метод машинного обучения с учителем, который используется для предсказания непрерывной целевой переменной от одного или нескольких независимых признаков. В основе метода лежит предположение предполагает о том, что существует линейная связь между признаками и целевой переменной. Эта связь моделируется с помощью линейной функции. Модель линейной регрессии пытается найти лучшую прямую, которая может описывать зависимость между независимыми признаками и зависимой переменной. Это делается с помощью поиска оптимальных коэффициентов, которые могут быть использованы для описания линейной функции. Эта модель может быть использована как для предсказания, так и для анализа влияния признаков на целевую переменную.

Линейная регрессия может использоваться для решения различных задач. Примерами успешного применения этого метода могут служить такие задачи как: прогнозирование продаж, прогнозирование цены на недвижимость, анализ влияния факторов на уровень заболеваемости и т.д. Однако, она не эффективна для решения задач, где не существует линейной связи между признаками и целевой переменной.

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

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

где 𝑦𝑖 — фактическое значение, 𝑖 — номер образца в нашем наборе данных.

Машинное обучение на Python

Код курса
PYML
Ближайшая дата курса
24 февраля, 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

Как видим, получаем аналогичные результаты.

Преимущества и недостатки линейной регрессии

Преимущества линейной регрессии:

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

Недостатки линейной регрессии:

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

Машинное обучение на Python

Код курса
PYML
Ближайшая дата курса
24 февраля, 2025
Продолжительность
24 ак.часов
Стоимость обучения
54 000 руб.

Хотя метод наименьших квадратов прост в реализации и эффективен в большинстве случаев, есть случаи, когда он может дать недостаточно точные результаты, если данные содержат выбросы или значительные отклонения. В любом случае, метод наименьших квадратов является важным инструментом в анализе данных и прогнозировании значений на основе линейных моделей. Линейной регрессия один из базовых инструментов в области Data Science.

Чтобы глубже изучить его, а так же более продвинутые методы и инструменты современной науки о данных посетите практические курс «Машинное обучение на Python»  в нашем лицензированном учебном центре в Москве, который специализируется на обучении и повышении квалификации ИТ-специалистов.

Записаться на курс

Смотреть раcписание

 

 

Добавить комментарий

Поиск по сайту