IIS_2023_1/mashkova_margarita_lab_1/main.py

86 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from random import randrange
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_absolute_error, mean_squared_error
import matplotlib.pyplot as plt
rs = randrange(42)
# Генерация данных
X, y = make_moons(noise=0.3, random_state=rs)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=rs)
# Линейная регрессия
linear = LinearRegression()
# Обучение модели
linear.fit(X_train, y_train)
# Предсказание на тестовых данных
y_pred_linear = linear.predict(X_test)
# Оценка модели на тестовых данных (коэффициент детерминации)
linear_score = linear.score(X_test, y_test)
# Оценка модели на тестовых данных (cредняя абсолютная ошибка)
linear_mae = mean_absolute_error(y_test, y_pred_linear)
# Оценка модели на тестовых данных (cредняя квадратичная ошибка)
linear_mse = mean_squared_error(y_test, y_pred_linear)
# Полиномиальная регрессия
poly = make_pipeline(PolynomialFeatures(degree=5), LinearRegression())
# Обучение модели
poly.fit(X_train, y_train)
# Предсказание на тестовых данных
y_pred_poly = poly.predict(X_test)
# Оценка модели на тестовых данных (коэффициент детерминации)
poly_score = poly.score(X_test, y_test)
# Оценка модели на тестовых данных (cредняя абсолютная ошибка)
poly_mae = mean_absolute_error(y_test, y_pred_poly)
# Оценка модели на тестовых данных (cредняя квадратичная ошибка)
poly_mse = mean_squared_error(y_test, y_pred_poly)
# Гребневая полиномиальная регрессия
ridge = make_pipeline(PolynomialFeatures(degree=5), Ridge(alpha=1.0))
# Обучение модели
ridge.fit(X_train, y_train)
# Предсказание на тестовых данных
y_pred_ridge = ridge.predict(X_test)
# Оценка модели на тестовых данных (коэффициент детерминации)
ridge_score = ridge.score(X_test, y_test)
# Оценка модели на тестовых данных (cредняя абсолютная ошибка)
ridge_mae = mean_absolute_error(y_test, y_pred_ridge)
# Оценка модели на тестовых данных (cредняя квадратичная ошибка)
ridge_mse = mean_squared_error(y_test, y_pred_ridge)
# Вывод оценки качества моделей в консоль
print("Оценка качества предсказания моделей на тестовых данных:\n")
print("Линейная регрессия:")
print("Коэффициент детерминации: %f" % linear_score)
print("Средняя абсолютная ошибка: %f" % linear_mae)
print("Средняя квадратичная ошибка: %f\n" % linear_mse)
print("Полиномиальная регрессия:")
print("Коэффициент детерминации: %f" % poly_score)
print("Средняя абсолютная ошибка: %f" % poly_mae)
print("Средняя квадратичная ошибка: %f\n" % poly_mse)
print("Гребневая полиномиальная регрессия:")
print("Коэффициент детерминации: %f" % ridge_score)
print("Средняя абсолютная ошибка: %f" % ridge_mae)
print("Средняя квадратичная ошибка: %f\n" % ridge_mse)
# Отображение графиков
fig, axs = plt.subplots(1, 4, figsize=(15, 5))
axs[0].set_title("Исходные тестовые данные")
axs[0].scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap="bwr")
axs[1].set_title("Линейная регрессия")
axs[1].scatter(X_test[:, 0], X_test[:, 1], c=y_pred_linear, cmap="bwr")
axs[2].set_title("Полиномиальная регрессия")
axs[2].scatter(X_test[:, 0], X_test[:, 1], c=y_pred_poly, cmap="bwr")
axs[3].set_title("Гребневая полиномиальная регрессия")
axs[3].scatter(X_test[:, 0], X_test[:, 1], c=y_pred_ridge, cmap="bwr")
plt.savefig('plots.png')
plt.show()