diff --git a/ilbekov_dmitriy_lab_1/README.md b/ilbekov_dmitriy_lab_1/README.md new file mode 100644 index 0000000..67e09ba --- /dev/null +++ b/ilbekov_dmitriy_lab_1/README.md @@ -0,0 +1,35 @@ +# Лабораторная работа 1 +### Вариант 10 + +### Данные: +- make_moons (noise=0.3, random_state=rs) +### Модели: +- Линейную регрессию +- Многослойный персептрон с 10-ю нейронами в скрытом слое (alpha = 0.01) +- Многослойный персептрон со 100-а нейронами в скрытом слое (alpha = 0.01) +### Запуск +- Запустить файл lab1.py + +### Технологии +- Язык - 'Python' +- Библиотеки sklearn, matplotlib, numpy + +### Что делает +Программа генерирует набор данных с помощью make_moons(), после чего строит графики для моделей, указанных в задании варианта и выводит в консоль качество данных моделей + +### Пример работы +Вывод в консоль: + +Точность: + +LinearRegression: 0.1997177824893414 + +Multi Layer Perceptron 10 нейронов: 0.45 + +Multi Layer Perceptron 100 нейронов: 0.8 + +Лучший результат показала модель Multi Layer Perceptron на 100 нейронах + +Ниже представлены графики, выводимые программой + +![Graphics](graphics.png) \ No newline at end of file diff --git a/ilbekov_dmitriy_lab_1/console.jpg b/ilbekov_dmitriy_lab_1/console.jpg new file mode 100644 index 0000000..4a7dc27 Binary files /dev/null and b/ilbekov_dmitriy_lab_1/console.jpg differ diff --git a/ilbekov_dmitriy_lab_1/graphics.png b/ilbekov_dmitriy_lab_1/graphics.png new file mode 100644 index 0000000..0fa362c Binary files /dev/null and b/ilbekov_dmitriy_lab_1/graphics.png differ diff --git a/ilbekov_dmitriy_lab_1/lab1.py b/ilbekov_dmitriy_lab_1/lab1.py new file mode 100644 index 0000000..c643d42 --- /dev/null +++ b/ilbekov_dmitriy_lab_1/lab1.py @@ -0,0 +1,103 @@ +import numpy as np +from sklearn import metrics +from sklearn.datasets import make_moons +from sklearn.model_selection import train_test_split +from sklearn.linear_model import LinearRegression +from sklearn.neural_network import MLPClassifier +from sklearn.metrics import accuracy_score +from matplotlib import pyplot as plt + +#Задание случайного состояния +rs = 35 +# Генерации синтетического набора данных в форме двух полумесяцев +# noise - уровень шума данных +# random_state устанавливается в rs для воспроизводимости данных +X, y = make_moons(noise=0.3, random_state=rs) + +# test_size какой процент данных пойдет в тестирование +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=rs) + +# Подготовка для визуализации +x_minimal, x_maximum = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5 +y_minimal, y_maximum = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5 +xx, yy = np.meshgrid(np.arange(x_minimal, x_maximum, 0.02), np.arange(y_minimal, y_maximum, 0.02)) + + +# ЛИНЕЙНАЯ РЕГРЕССИЯ + +# Инициализация модели +linear_regression = LinearRegression() +# Обучение +linear_regression.fit(X_train, y_train) +# Предсказание +y_pred_linear_regression = linear_regression.predict(X_test) +# Оценка точности (MSE) +accuracy_linear_regression = metrics.mean_squared_error(y_test, y_pred_linear_regression) +# Предсказание класса для каждой точки в сетке графика и изменение формы результата +Z_linear_regression = linear_regression.predict(np.c_[xx.ravel(), yy.ravel()]) +Z_linear_regression = Z_linear_regression.reshape(xx.shape) + + +# МНОГОСЛОЙНЫЙ ПЕРСЕПТРОН (10) + +# Инициализация модели +multi_layer_perceptron_10 = MLPClassifier(hidden_layer_sizes=(10,), alpha=0.01, random_state=rs) +# Обучение +multi_layer_perceptron_10.fit(X_train, y_train) +# Предсказание +y_pred_multi_layer_perceptron_10 = multi_layer_perceptron_10.predict(X_test) +# Оценка точности каждой модели сравнивается с истинными метками классов на тестовой выборке +accuracy_mlp_10 = accuracy_score(y_test, y_pred_multi_layer_perceptron_10) +# Предсказание класса для каждой точки в сетке графика и изменение формы результата +Z_mlp_10 = multi_layer_perceptron_10.predict(np.c_[xx.ravel(), yy.ravel()]) +Z_mlp_10 = Z_mlp_10.reshape(xx.shape) + + +# МНОГОСЛОЙНЫЙ ПЕРСЕПТРОН (100) + +# Инициализация модели +multi_layer_perceptron_100 = MLPClassifier(hidden_layer_sizes=(100,), alpha=0.01, random_state=rs) +# Обучение +multi_layer_perceptron_100.fit(X_train, y_train) +# Предсказание +y_pred_multi_layer_perceptron_100 = multi_layer_perceptron_100.predict(X_test) +# Оценка точности (MSE) +accuracy_mlp_100 = accuracy_score(y_test, y_pred_multi_layer_perceptron_100) +# Предсказание класса для каждой точки в сетке графика и изменение формы результата +Z_mlp_100 = multi_layer_perceptron_100.predict(np.c_[xx.ravel(), yy.ravel()]) +Z_mlp_100 = Z_mlp_100.reshape(xx.shape) + + +# ВЫВОД: результаты оценки точности (в консоли) и график +print("Точность: ") +print("LinearRegression:", accuracy_linear_regression) +print("Multi Layer Perceptron 10 нейронов:", accuracy_mlp_10) +print("Multi Layer Perceptron 100 нейронов:", accuracy_mlp_100) + +plt.figure(figsize=(12, 9)) +plt.subplot(221) +plt.contourf(xx, yy, Z_linear_regression, alpha=0.8) +plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, edgecolors='k', alpha=0.6) +plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, edgecolors='k') +plt.title('Линейная регрессия') +plt.xlabel('Признак 1') +plt.ylabel('Признак 2') + +plt.subplot(222) +plt.contourf(xx, yy, Z_mlp_10, alpha=0.8) +plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, edgecolors='k', alpha=0.6) +plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, edgecolors='k') +plt.title('MLP 10 нейронов') +plt.xlabel('Признак 1') +plt.ylabel('Признак 2') + +plt.subplot(223) +plt.contourf(xx, yy, Z_mlp_100, alpha=0.8) +plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, edgecolors='k', alpha=0.6) +plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, edgecolors='k') +plt.title('MLP 100 нейронов') +plt.xlabel('Признак 1') +plt.ylabel('Признак 2') + +plt.tight_layout() +plt.show()