import numpy as np from matplotlib import pyplot as plt from matplotlib.colors import ListedColormap from sklearn.datasets import make_circles from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split from sklearn.pipeline import make_pipeline from sklearn.preprocessing import PolynomialFeatures from sklearn.preprocessing import StandardScaler # Используя код из пункта «Регуляризация и сеть прямого распространения»из [1](стр. 228), # сгенерируйте определенный тип данных и сравните на нем 3 модели (по варианту). # Постройте графики, отобразите качество моделей, объясните полученные результаты. # Модели # Линейная регрессия # Полиномиальная регрессия (со степенью 3) # Гребневую полиномиальную регрессию (со степенью 3, alpha = 1.0) # Данные # make_circles (noise=0.2, factor=0.5, random_state=rs) random_state = np.random.RandomState(2) # Генерируем датасет circles_dataset = make_circles(noise=0.2, factor=0.5, random_state=random_state) X, y = circles_dataset X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.9, random_state=random_state) # Создаем модели models = [] # Линейная регрессия linear_model = LogisticRegression(random_state=random_state) models.append(("Линейная регрессия", linear_model)) # Полиномиальная регрессия (со степенью 3) poly_model = make_pipeline(PolynomialFeatures(degree=3), StandardScaler(), LogisticRegression(random_state=random_state)) models.append(("Полиномиальная регрессия (со степенью 3)", poly_model)) # Гребневая полиномиальная регрессия (со степенью 3 и alpha=1.0) ridge_poly_model = make_pipeline(PolynomialFeatures(degree=3), StandardScaler(), LogisticRegression(penalty='l2', C=1.0, random_state=random_state)) models.append(("Гребневая полиномиальная регрессия (со степенью 3, alpha = 1.0)", ridge_poly_model)) # Обучаем и оцениваем модели results = [] for name, model in models: model.fit(X_train, y_train) # обучаем y_pred = model.predict(X_test) # предсказываем accuracy = accuracy_score(y_test, y_pred) # определяем точность results.append((name, accuracy)) # Выводим результаты for name, accuracy in results: print(f"{name} - Точность: {accuracy:.2f}") # Строим графики cmap_background = ListedColormap(['#FFAAAA', '#AAAAFF']) cmap_points = ListedColormap(['#FF0000', '#0000FF']) plt.figure(figsize=(15, 5)) for i, (name, model) in enumerate(models): plt.subplot(1, 3, i + 1) xx, yy = np.meshgrid(np.linspace(X[:, 0].min() - 1, X[:, 0].max() + 1, 100), np.linspace(X[:, 1].min() - 1, X[:, 1].max() + 1, 100)) Z = model.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, cmap=cmap_background, alpha=0.5) plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cmap_points, marker='o', label='Тестовые точки') plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cmap_points, marker='x', label='Обучающие точки') plt.legend() plt.title(name) plt.text(0.5, -1.2, 'Красный класс', color='r', fontsize=12) plt.text(0.5, -1.7, 'Синий класс', color='b', fontsize=12) plt.tight_layout() plt.show()