Пример 1. Прогнозирование стоимости квартиры с помощью линейной регрессии

Линейная регрессия применяется для прогнозирования непрерывных числовых величин. Например, стоимость квартиры может зависеть от её площади.

Математическая модель имеет вид:

ŷ = β₀ + β₁x,

где:

Рассмотрим набор данных:

Площадь, м²

Стоимость, млн тг

40

18

50

22

60

26

70

30

80

34

Обучим модель и спрогнозируем стоимость квартиры площадью 65 м².

import numpy as np

from sklearn.linear_model import LinearRegression

 

X = np.array([40, 50, 60, 70, 80]).reshape(-1, 1)

y = np.array([18, 22, 26, 30, 34])

 

model = LinearRegression()

model.fit(X, y)

 

prediction = model.predict([[65]])

 

print("Коэффициент:", model.coef_[0])

print("Свободный член:", model.intercept_)

print("Прогноз:", prediction[0])

Результат:

Коэффициент: 0.4

Свободный член: 2.0

Прогноз: 28.0

Полученная модель:

ŷ = 2 + 0.4x.

Следовательно, прогнозируемая стоимость квартиры площадью 65 м² составляет 28 млн тенге.

Пример 2. Анализ остатков линейной регрессии

Остаток представляет собой разность между фактическим и прогнозируемым значением:

eᵢ = yᵢ − ŷᵢ.

Метод наименьших квадратов подбирает коэффициенты модели так, чтобы минимизировать сумму квадратов остатков:

SSE = Σ(yᵢ − ŷᵢ)².

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

import numpy as np

from sklearn.linear_model import LinearRegression

from sklearn.metrics import mean_squared_error

 

X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)

y = np.array([45, 52, 58, 67, 74])

 

model = LinearRegression()

model.fit(X, y)

 

predictions = model.predict(X)

residuals = y - predictions

 

print("Прогнозы:", predictions)

print("Остатки:", residuals)

print("MSE:", mean_squared_error(y, predictions))

Анализ остатков помогает выявлять систематические ошибки модели. Если остатки демонстрируют определённую закономерность, линейная зависимость может недостаточно точно описывать данные.

Пример 3. Сравнение линейной регрессии, Ridge и Lasso

Обычная линейная регрессия минимизирует сумму квадратов ошибок. Регуляризованные модели дополнительно ограничивают величину коэффициентов.

Ridge использует L2-регуляризацию:

L = Σ(yᵢ − ŷᵢ)² + αΣβⱼ².

Lasso использует L1-регуляризацию:

L = Σ(yᵢ − ŷᵢ)² + αΣ|βⱼ|.

Ridge обычно уменьшает абсолютные значения коэффициентов, а Lasso может обнулять отдельные коэффициенты, выполняя тем самым отбор признаков.

from sklearn.datasets import make_regression

from sklearn.preprocessing import StandardScaler

from sklearn.pipeline import make_pipeline

from sklearn.linear_model import LinearRegression, Ridge, Lasso

from sklearn.model_selection import train_test_split

from sklearn.metrics import mean_squared_error

 

X, y = make_regression(

    n_samples=200,

    n_features=10,

    n_informative=4,

    noise=15,

    random_state=42

)

 

X_train, X_test, y_train, y_test = train_test_split(

    X, y,

    test_size=0.2,

    random_state=42

)

 

models = {

    "LinearRegression": LinearRegression(),

    "Ridge": Ridge(alpha=10),

    "Lasso": Lasso(alpha=10, max_iter=10000)

}

 

for name, estimator in models.items():

    model = make_pipeline(StandardScaler(), estimator)

    model.fit(X_train, y_train)

 

    predictions = model.predict(X_test)

    mse = mean_squared_error(y_test, predictions)

 

    print(name, "MSE:", round(mse, 2))

    print("Коэффициенты:", model[-1].coef_)

Сравнение показывает, как регуляризация влияет на коэффициенты и ошибку прогнозирования.

Наилучшее значение параметра регуляризации определяется по валидационным данным, а не по тестовой выборке.