diff --git a/almukhammetov_bulat_lab_1/README.md b/almukhammetov_bulat_lab_1/README.md new file mode 100644 index 0000000..1ec1608 --- /dev/null +++ b/almukhammetov_bulat_lab_1/README.md @@ -0,0 +1,50 @@ +Вариант 2 + +Задание: +Используя код из пункта «Регуляризация и сеть прямого распространения «из [1] (стр. 228), сгенерируйте определенный тип данных и сравните на нем 3 модели (по варианту)Постройте графики, отобразите качество моделей, объясните полученные результаты. + +Данные: +make_circles (noise=0.2, factor=0.5, random_state=rs) Модели: · Линейную регрессию · Полиномиальную регрессию (со степенью 3) · Гребневую полиномиальную регрессию (со степенью 3, alpha= 1.0) + +Запуск: +Запустите файл lab1.py + +Описание программы: +1. Генерирует набор данных с использованием функции make_circles из scikit-learn. Этот набор данных представляет собой два класса, где точки одного класса окружают точки другого класса с добавленным шумом. +2. Разделяет данные на обучающий и тестовый наборы с помощью функции train_test_split. +3. Создает три разные модели для классификации данных: +4. Линейная регрессия (Logistic Regression). +5. Полиномиальная регрессия третьей степени (Polynomial Regression). +6. Гребневая полиномиальная регрессия третьей степени с регуляризацией и альфой равной единице (Ridge Polynomial Regression). +7. Обучаем каждую из этих моделей на обучающем наборе данных и оцениваем их точность на тестовом наборе данных. +8. Выводит результаты точности каждой модели. +9. Разделение областей предсказаний моделей (границы решения). +10. Тестовые и обучающие точки, окрашенные в соответствии с классами. (красным и синим) + +Результаты: + +

+

Точность
+ +

+ +

+

Графики регрессии
+ + + +

+ + +Исходя из получивших графиков и точночсти с данным типом генерации данных из этих трех моделей наиболее точной получились полиномиальную регрессия (со степенью 3) и гребневaz полиномиальная регрессия (со степенью 3, alpha= 1.0). Они так же являются идентичными между собой. Чтобы проверить это утверждение я провел дополнительное тестирование и написал скрипт, который для 10 разных random_state (2-11) вычисляет точность для трех разных моделей. +Результаты: + +Значения точности для каждой модели: +Линейная регрессия 0.40 0.52 0.44 0.56 0.48 0.49 0.50 0.49 0.46 0.40 +Полиномиальная регрессия (со степенью 3) 0.63 0.67 0.74 0.64 0.80 0.73 0.64 0.81 0.46 0.62 +Гребневая полиномиальная регрессия (со степенью 3, alpha = 1.0) 0.63 0.67 0.74 0.64 0.80 0.73 0.64 0.81 0.46 0.62 + +Средние значения точности: +Линейная регрессия - Средняя точность: 0.47 +Полиномиальная регрессия (со степенью 3) - Средняя точность: 0.68 +Гребневая полиномиальная регрессия (со степенью 3, alpha = 1.0) - Средняя точность: 0.68 diff --git a/almukhammetov_bulat_lab_1/lab1.py b/almukhammetov_bulat_lab_1/lab1.py new file mode 100644 index 0000000..6e55e7d --- /dev/null +++ b/almukhammetov_bulat_lab_1/lab1.py @@ -0,0 +1,83 @@ +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() diff --git a/almukhammetov_bulat_lab_1/Рисунок1.png b/almukhammetov_bulat_lab_1/Рисунок1.png new file mode 100644 index 0000000..07611df Binary files /dev/null and b/almukhammetov_bulat_lab_1/Рисунок1.png differ diff --git a/almukhammetov_bulat_lab_1/Рисунок2.png b/almukhammetov_bulat_lab_1/Рисунок2.png new file mode 100644 index 0000000..b72d561 Binary files /dev/null and b/almukhammetov_bulat_lab_1/Рисунок2.png differ diff --git a/almukhammetov_bulat_lab_1/Рисунок3.png b/almukhammetov_bulat_lab_1/Рисунок3.png new file mode 100644 index 0000000..81ac962 Binary files /dev/null and b/almukhammetov_bulat_lab_1/Рисунок3.png differ diff --git a/almukhammetov_bulat_lab_1/Рисунок4.png b/almukhammetov_bulat_lab_1/Рисунок4.png new file mode 100644 index 0000000..751f14b Binary files /dev/null and b/almukhammetov_bulat_lab_1/Рисунок4.png differ