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()