Пример 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_)
Сравнение показывает, как регуляризация влияет на
коэффициенты и ошибку прогнозирования.
Наилучшее значение параметра регуляризации определяется по
валидационным данным, а не по тестовой выборке.