AddLab1
This commit is contained in:
parent
06116369e5
commit
fcfd628305
50
almukhammetov_bulat_lab_1/README.md
Normal file
50
almukhammetov_bulat_lab_1/README.md
Normal file
@ -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. Тестовые и обучающие точки, окрашенные в соответствии с классами. (красным и синим)
|
||||||
|
|
||||||
|
Результаты:
|
||||||
|
|
||||||
|
<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
|
83
almukhammetov_bulat_lab_1/lab1.py
Normal file
83
almukhammetov_bulat_lab_1/lab1.py
Normal 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()
|
BIN
almukhammetov_bulat_lab_1/Рисунок1.png
Normal file
BIN
almukhammetov_bulat_lab_1/Рисунок1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
BIN
almukhammetov_bulat_lab_1/Рисунок2.png
Normal file
BIN
almukhammetov_bulat_lab_1/Рисунок2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
BIN
almukhammetov_bulat_lab_1/Рисунок3.png
Normal file
BIN
almukhammetov_bulat_lab_1/Рисунок3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
BIN
almukhammetov_bulat_lab_1/Рисунок4.png
Normal file
BIN
almukhammetov_bulat_lab_1/Рисунок4.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 81 KiB |
Loading…
Reference in New Issue
Block a user