diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/IIS_2023_1.iml b/.idea/IIS_2023_1.iml new file mode 100644 index 0000000..4e6ce24 --- /dev/null +++ b/.idea/IIS_2023_1.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..3c29c38 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..89e118a --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/zavrazhnova_svetlana_lab_1/README.md b/zavrazhnova_svetlana_lab_1/README.md new file mode 100644 index 0000000..efdcb74 --- /dev/null +++ b/zavrazhnova_svetlana_lab_1/README.md @@ -0,0 +1,31 @@ +### Задание: +Данные: 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) + +### как запустить лабораторную работу: +Лабораторная работа запускается в файле `zavrazhnova_svetlana_lab_1.py` через Run, должно запуститься диалоговое окно и вычисления в консоли + +### Технологии: +Библиотека Scikit-learn содержит множество наборов данных + +### Что делает лабораторная: +Выполнение кода выводит точность каждой модели (в консоль) и отображает графики с границами решений для каждой модели. + +В данном коде генерируются данные с использованием функции make_classification() из библиотеки scikit-learn. Генерируется набор данных с 500 примерами и 2 признаками. Классы точек представлены переменной y, которая содержит метки классов для каждой точки. В данном случае, сгенерировано два класса, обозначенных как 0 и 1. + +Визуализация данных и границ решения моделей выполняется с помощью функции scatter() и функции contourf() из библиотеки matplotlib. Функция scatter() отображает точки данных на графике, окрашивая их в соответствии с классами, заданными переменной y. + +Таким образом, графики помогают визуализировать данные, их классификацию и границы решения моделей, позволяя лучше понять, как модели принимают решение о классификации объектов. + +### Пример выходных значений: +Консоль: + +![результат в консоль](imgConsoleRes.png) + +Графики: + +![img.png](imgGraphicsRes.png) \ No newline at end of file diff --git a/zavrazhnova_svetlana_lab_1/imgConsoleRes.png b/zavrazhnova_svetlana_lab_1/imgConsoleRes.png new file mode 100644 index 0000000..3628841 Binary files /dev/null and b/zavrazhnova_svetlana_lab_1/imgConsoleRes.png differ diff --git a/zavrazhnova_svetlana_lab_1/imgGraphicsRes.png b/zavrazhnova_svetlana_lab_1/imgGraphicsRes.png new file mode 100644 index 0000000..7c9788f Binary files /dev/null and b/zavrazhnova_svetlana_lab_1/imgGraphicsRes.png differ diff --git a/zavrazhnova_svetlana_lab_1/zavrazhnova_svetlana_lab_1.py b/zavrazhnova_svetlana_lab_1/zavrazhnova_svetlana_lab_1.py new file mode 100644 index 0000000..e2fd9b8 --- /dev/null +++ b/zavrazhnova_svetlana_lab_1/zavrazhnova_svetlana_lab_1.py @@ -0,0 +1,89 @@ +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 +from matplotlib import pyplot as plt + +#Задание случайного состояния +rs = 42 +#Генерируются 500 примеров с 2 признаками, 0 лишними признаками, 2 информативными признаками, +# random_state устанавливается в rs для воспроизводимости данных и n_clusters_per_class устанавливается в 1 для генерации одного кластера классов +X, y = make_classification(n_samples=500, n_features=2, n_redundant=0, n_informative=2, random_state=rs, n_clusters_per_class=1) + +# Разделение данных на обучающую и тестовую выборки +#test_size установлен на 0.4, что означает, что 40% данных будет использовано для тестирования. +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=rs) + +# Инициализация моделей +perceptron = Perceptron() +mlp_10 = MLPClassifier(hidden_layer_sizes=(10,), alpha=0.01, random_state=rs) +mlp_100 = MLPClassifier(hidden_layer_sizes=(100,), alpha=0.01, random_state=rs) + +# Обучение моделей +perceptron.fit(X_train, y_train) +mlp_10.fit(X_train, y_train) +mlp_100.fit(X_train, y_train) + +# Предсказание на тестовой выборке +y_pred_perceptron = perceptron.predict(X_test) +y_pred_mlp_10 = mlp_10.predict(X_test) +y_pred_mlp_100 = mlp_100.predict(X_test) + +# Оценка качества моделей, Оценка точности (accuracy) каждой модели сравнивается с истинными метками классов на тестовой выборке +accuracy_perceptron = accuracy_score(y_test, y_pred_perceptron) +accuracy_mlp_10 = accuracy_score(y_test, y_pred_mlp_10) +accuracy_mlp_100 = accuracy_score(y_test, y_pred_mlp_100) + +# Вывод результатов +print("Точность - Perceptron:", accuracy_perceptron) +print("Точность - MLP (10 neurons):", accuracy_mlp_10) +print("Точность - MLP (100 neurons):", accuracy_mlp_100) + +# Визуализация данных и границ решения моделей +#Определение интервала значений для графиков, чтобы включить все точки данных и оставить небольшую дополнительную поверхность вокруг границы графика +x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5 +y_min, y_max = X[:, 1].min() - 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)) + +#Предсказание класса для каждой точки в сетке графика и изменение формы результата, чтобы соответствовать размерам сетки +Z_perceptron = perceptron.predict(np.c_[xx.ravel(), yy.ravel()]) +Z_perceptron = Z_perceptron.reshape(xx.shape) + +Z_mlp_10 = mlp_10.predict(np.c_[xx.ravel(), yy.ravel()]) +Z_mlp_10 = Z_mlp_10.reshape(xx.shape) + +Z_mlp_100 = mlp_100.predict(np.c_[xx.ravel(), yy.ravel()]) +Z_mlp_100 = Z_mlp_100.reshape(xx.shape) + +#Визуализация данных и границ решения моделей на трех графиках. +# Границы решения отмечены заштрихованными областями, а точки данных на графике окрашены в соответствии с их классами +plt.figure(figsize=(12, 9)) +plt.subplot(221) +plt.contourf(xx, yy, Z_perceptron, 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() \ No newline at end of file