diff --git a/degtyarev_mikhail_lab_1/Readme.md b/degtyarev_mikhail_lab_1/Readme.md new file mode 100644 index 0000000..3e35a0f --- /dev/null +++ b/degtyarev_mikhail_lab_1/Readme.md @@ -0,0 +1,57 @@ +# Лабораторная 1 + +## Задание +Сгенерируйте определенный тип данных и сравнить на нем 3 модели (по варианту 9). Построить графики, отобразить качество моделей, объяснить полученные результаты + +## Данные + +make_classification (n_samples=500, n_features=2, n_redundant=0, n_informative=2, random_state=rs, n_clusters_per_class=1) +- Модели: +- - Персептрон +- - Многослойный персептрон с 10-ю нейронами в скрытом слое (alpha = 0.01) +- - Многослойный персептрон со 100-а нейронами в скрытом слое (alpha =0.01) + +## Описание Программы + + +### Используемые библиотеки +- scikit-learn +- numpy +- matplotlib + +### Шаги программы + +1. **Генерация данных:** + - Используется функция `make_classification` из библиотеки scikit-learn. + - Создаются два признака, и данные разделяются на два класса. + - Используется 500 сэмплов. + +2. **Разделение данных:** + - Данные разделяются на обучающий и тестовый наборы с использованием `train_test_split` из scikit-learn. + - Размер тестового набора установлен в 20% от общего размера. + +3. **Создание моделей:** + - Три модели создаются с использованием библиотеки scikit-learn: + - Персептрон + - Многослойный персептрон с 10 нейронами в скрытом слое + - Многослойный персептрон с 100 нейронами в скрытом слое + +4. **Обучение и Оценка:** + - Каждая модель обучается на обучающем наборе данных. + - Производится оценка каждой модели на тестовом наборе с использованием метрики точности (`accuracy`). + +5. **Визуализация данных и Границ Решения:** + - Для каждой модели строится график, на котором отображаются точки тестового набора и граница решения модели. + - Каждый график снабжен названием, указывающим на модель и ее точность. + +### Запуск программы +- Склонировать или скачать код `main.py`. +- Запустите файл в среде, поддерживающей выполнение Python. + +### Результаты +- Можно проанализировать точность на графиках и понять, +что самая точная из 3 моделей оказалась Многослойный персептрон со 100-а нейронами в скрытом слое. +- Многослойный персептрон со 100-а нейронами: 0.96 +- Многослойный персептрон с 10-ю нейронами: 0.90 +- Персептрон: 0.86 + diff --git a/degtyarev_mikhail_lab_1/main.py b/degtyarev_mikhail_lab_1/main.py new file mode 100644 index 0000000..ecdc3af --- /dev/null +++ b/degtyarev_mikhail_lab_1/main.py @@ -0,0 +1,54 @@ +import matplotlib.pyplot as plt +import numpy as np +from sklearn.datasets import make_classification +from sklearn.model_selection import train_test_split +from sklearn.linear_model import Perceptron +from sklearn.neural_network import MLPClassifier +from sklearn.metrics import accuracy_score + +# Установите random_state, чтобы результаты были воспроизводимыми +rs = 42 + +# Генерация данных +X, y = make_classification( + n_samples=500, n_features=2, n_redundant=0, n_informative=2, + random_state=rs, n_clusters_per_class=1 +) + +# Разделение данных на обучающий и тестовый наборы +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=rs) + +# Создание моделей +models = [ + ('Perceptron', Perceptron(random_state=rs)), + ('MLP (10 neurons)', MLPClassifier(hidden_layer_sizes=(10,), alpha=0.01, random_state=rs)), + ('MLP (100 neurons)', MLPClassifier(hidden_layer_sizes=(100,), alpha=0.01, random_state=rs)) +] + +# Обучение и оценка моделей +results = {} + +plt.figure(figsize=(15, 5)) + +for i, (name, model) in enumerate(models, 1): + plt.subplot(1, 3, i) + model.fit(X_train, y_train) + y_pred = model.predict(X_test) + accuracy = accuracy_score(y_test, y_pred) + results[name] = accuracy + + # Разбиение точек на классы + plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=plt.cm.Paired, edgecolors='k') + + # Построение границы решения для каждой модели + h = .02 # Шаг сетки + x_min, x_max = X_test[:, 0].min() - 1, X_test[:, 0].max() + 1 + y_min, y_max = X_test[:, 1].min() - 1, X_test[:, 1].max() + 1 + xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) + Z = model.predict(np.c_[xx.ravel(), yy.ravel()]) + Z = Z.reshape(xx.shape) + plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8) + + plt.title(f'{name}\nAccuracy: {accuracy:.2f}') + +plt.show() diff --git a/degtyarev_mikhail_lab_1/mlp_10.png b/degtyarev_mikhail_lab_1/mlp_10.png new file mode 100644 index 0000000..a3465e4 Binary files /dev/null and b/degtyarev_mikhail_lab_1/mlp_10.png differ diff --git a/degtyarev_mikhail_lab_1/mlp_100.png b/degtyarev_mikhail_lab_1/mlp_100.png new file mode 100644 index 0000000..8c36d85 Binary files /dev/null and b/degtyarev_mikhail_lab_1/mlp_100.png differ diff --git a/degtyarev_mikhail_lab_1/perc_base.png b/degtyarev_mikhail_lab_1/perc_base.png new file mode 100644 index 0000000..24a9440 Binary files /dev/null and b/degtyarev_mikhail_lab_1/perc_base.png differ