86 lines
4.5 KiB
Python
86 lines
4.5 KiB
Python
|
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()
|