Compare commits

...

3 Commits

6 changed files with 136 additions and 0 deletions

View File

@ -0,0 +1,53 @@
Вариант 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. Тестовые и обучающие точки, окрашенные в соответствии с классами. (красным и синим)
Результаты:
<p>
<div>Точность</div>
<img src="Рисунок1.png">
</p>
<p>
<div>Графики регрессии</div>
<img src="Рисунок2.png">
<img src="Рисунок3.png">
<img src="Рисунок4.png">
</p>
Исходя из получивших графиков и точночсти с данным типом генерации данных из этих трех моделей наиболее точной получились полиномиальную регрессия (со степенью 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
Утверждение также подтвердилось.

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB