IIS_2023_1/almukhammetov_bulat_lab_1/lab1.py
BulatReznik fcfd628305 AddLab1
2023-10-07 12:53:20 +04:00

84 lines
3.8 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.

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