kurmyza_pavel_lab_1 is ready #75
41
kurmyza_pavel_lab_1/README.md
Normal file
41
kurmyza_pavel_lab_1/README.md
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# Лабораторная работа №1
|
||||||
|
|
||||||
|
## ПИбд-41, Курмыза Павел, Вариант 13
|
||||||
|
|
||||||
|
### Данные:
|
||||||
|
|
||||||
|
- make_moons (noise=0.3, random_state=rs)
|
||||||
|
|
||||||
|
### Модели:
|
||||||
|
|
||||||
|
- Линейную регрессию
|
||||||
|
- Полиномиальную регрессию (со степенью 3)
|
||||||
|
- Многослойный персептрон со 100-а нейронами в скрытом слое (alpha = 0.01)
|
||||||
|
|
||||||
|
## Как запустить ЛР
|
||||||
|
|
||||||
|
- Запустить файл main.py
|
||||||
|
|
||||||
|
## Используемые технологии
|
||||||
|
|
||||||
|
- Язык программирования Python
|
||||||
|
- Библиотеки: sklearn, matplotlib, numpy
|
||||||
|
|
||||||
|
## Что делает программа
|
||||||
|
|
||||||
|
После генерации набора данных с помощью функции make_moons(), программа создает графики для моделей, которые указаны в
|
||||||
|
задании. Затем она выводит в консоль качество данных для этих моделей.
|
||||||
|
|
||||||
|
## Тесты
|
||||||
|
|
||||||
|
### Консоль
|
||||||
|
|
||||||
|
![Консольный вывод](console_output.jpg)
|
||||||
|
|
||||||
|
### Графики
|
||||||
|
|
||||||
|
![Графики](plots.jpg)
|
||||||
|
|
||||||
|
### Вывод
|
||||||
|
|
||||||
|
Исходя из этого, можно сделать вывод: лучший результат показала модель многослойного персептрона на 100 нейронах.
|
BIN
kurmyza_pavel_lab_1/console_output.jpg
Normal file
BIN
kurmyza_pavel_lab_1/console_output.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 31 KiB |
91
kurmyza_pavel_lab_1/main.py
Normal file
91
kurmyza_pavel_lab_1/main.py
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
from random import randrange
|
||||||
|
import numpy as np
|
||||||
|
from sklearn.neural_network import MLPClassifier
|
||||||
|
from sklearn.metrics import accuracy_score, mean_squared_error
|
||||||
|
from matplotlib import pyplot as plt
|
||||||
|
from sklearn.linear_model import LinearRegression
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
from sklearn.preprocessing import PolynomialFeatures
|
||||||
|
from sklearn.datasets import make_moons
|
||||||
|
from sklearn.pipeline import make_pipeline
|
||||||
|
|
||||||
|
RANDOM_STATE = randrange(50)
|
||||||
|
|
||||||
|
# Генерация случайных данных на основе случайного состояния
|
||||||
|
|
||||||
|
X, y = make_moons(noise=0.3, random_state=RANDOM_STATE)
|
||||||
|
|
||||||
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=RANDOM_STATE)
|
||||||
|
|
||||||
|
# Полиномиальная регрессия (3 степень)
|
||||||
|
|
||||||
|
DEGREE = 3
|
||||||
|
|
||||||
|
poly_regression = make_pipeline(PolynomialFeatures(degree=DEGREE), LinearRegression()) # создание модели
|
||||||
|
poly_regression.fit(X_train, y_train) # обучение
|
||||||
|
y_pred_poly_regression = poly_regression.predict(X_test) # предсказание
|
||||||
|
|
||||||
|
# Линейная регрессия
|
||||||
|
|
||||||
|
linear_regression = LinearRegression() # создание модели
|
||||||
|
linear_regression.fit(X_train, y_train) # обучение
|
||||||
|
y_pred_linear_regression = linear_regression.predict(X_test) # предсказание
|
||||||
|
|
||||||
|
# Многослойный персептрон (100 нейронов)
|
||||||
|
|
||||||
|
HIDDEN_LAYER_SIZES = 100
|
||||||
|
ALPHA = 0.01
|
||||||
|
|
||||||
|
perceptron_100 = MLPClassifier(hidden_layer_sizes=(HIDDEN_LAYER_SIZES,), alpha=ALPHA,
|
||||||
|
random_state=RANDOM_STATE) # создание модели
|
||||||
|
perceptron_100.fit(X_train, y_train) # обучение
|
||||||
|
y_pred_perceptron_100 = perceptron_100.predict(X_test) # предсказание
|
||||||
|
|
||||||
|
# Оценка точности и вывод в консоль
|
||||||
|
|
||||||
|
acc_linear_regression = mean_squared_error(y_test, y_pred_linear_regression)
|
||||||
|
acc_poly_regression = mean_squared_error(y_test, y_pred_poly_regression)
|
||||||
|
acc_perceptron_100 = accuracy_score(y_test, y_pred_perceptron_100)
|
||||||
|
|
||||||
|
print(f"Оценка точности: "
|
||||||
|
f"\n Линейная регрессия: {acc_linear_regression}"
|
||||||
|
f"\n Полиномиальная регрессия (3 степень): {acc_poly_regression}"
|
||||||
|
f"\n Многослойный персептрон (100 нейронов): {acc_perceptron_100}")
|
||||||
|
|
||||||
|
# Предсказание классов для точек графика для их визуализации
|
||||||
|
|
||||||
|
x_min, y_min = X[:, 0].min() - 0.5, X[:, 1].min() - 0.5
|
||||||
|
x_max, y_max = X[:, 0].max() + 0.5, X[:, 1].max() + 0.5
|
||||||
|
|
||||||
|
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))
|
||||||
|
|
||||||
|
prediction_data = np.c_[xx.ravel(), yy.ravel()]
|
||||||
|
|
||||||
|
Z_poly_regression = poly_regression.predict(prediction_data)
|
||||||
|
Z_poly_regression = Z_poly_regression.reshape(xx.shape)
|
||||||
|
|
||||||
|
Z_linear_regression = linear_regression.predict(prediction_data)
|
||||||
|
Z_linear_regression = Z_linear_regression.reshape(xx.shape)
|
||||||
|
|
||||||
|
Z_perceptron_100 = perceptron_100.predict(prediction_data)
|
||||||
|
Z_perceptron_100 = Z_perceptron_100.reshape(xx.shape)
|
||||||
|
|
||||||
|
|
||||||
|
# Отрисовка графиков
|
||||||
|
|
||||||
|
def draw_graphic(title, nrows, ncols, index, Z):
|
||||||
|
plt.subplot(nrows, ncols, index)
|
||||||
|
plt.contourf(xx, yy, Z, alpha=0.8)
|
||||||
|
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, alpha=0.6)
|
||||||
|
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train)
|
||||||
|
plt.title(title)
|
||||||
|
plt.xlabel('1 признак')
|
||||||
|
plt.ylabel('2 признак')
|
||||||
|
|
||||||
|
|
||||||
|
draw_graphic('Линейная регрессия', 1, 3, 1, Z_linear_regression)
|
||||||
|
draw_graphic('Полиномиальная регрессия', 1, 3, 2, Z_poly_regression)
|
||||||
|
draw_graphic('Персептрон', 1, 3, 3, Z_perceptron_100)
|
||||||
|
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.show()
|
BIN
kurmyza_pavel_lab_1/plots.jpg
Normal file
BIN
kurmyza_pavel_lab_1/plots.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 102 KiB |
Loading…
Reference in New Issue
Block a user