IIS_2023_1/gordeeva_anna_lab_1/lab1.py
2023-09-21 23:02:58 +04:00

66 lines
4.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import streamlit as st
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_moons, make_circles, make_classification
from sklearn.linear_model import Perceptron
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
st.header("Лабораторная работа 1. Вариант 7")
#Создаем данные
moon_dataset = make_moons(noise=0.3, random_state=0)
X, y = moon_dataset #Х это двумерный массив с признаками (координатами), а y - одномерный массив с 0 и 1.(Либо к 1 классу, либо к другому)
X = StandardScaler().fit_transform(X) #Данные нужно обязательно стандартизировать, для того, что бы один признак не перевешивал в обучении другой признак
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=42) #Делим на обучающую и тестовую выборку. Число выбираем для того, чтобы выборка при каждом старте не менялась
def print_perceptron(perceptron):
# Обучение модели на обучающих данных
perceptron.fit(X_train, y_train)
#Определение точности модели
y_pred = perceptron.predict(X_test)#На тестовой выборке получаем принадлежность к классу
accuracy = accuracy_score(y_test, y_pred)
st.write("Точность:", accuracy)
#График с помощью Matplotlib
fig, ax = plt.subplots()
cm_bright = ListedColormap(['#FF0000', '#0000FF'])
cm_bright2 = ListedColormap(['#FFBBBB', '#BBBBFF'])
cmap = ListedColormap(['#FFBBBB', '#BBBBFF'])
#Отрисовка градиента/фона
h = .02 # шаг регулярной сетки
x0_min, x0_max = X_train[:, 0].min() - .5, X_train[:, 0].max() + .5 #Определение границы множества по оси х
x1_min, x1_max = X_train[:, 1].min() - .5, X_train[:, 1].max() + .5 #Определение границы множества по оси y
#np.arange(start, stop, inter) позволяет создать последовательность числен в интервале от start до stop c интервалом/шагом inter
xx0, xx1 = np.meshgrid(np.arange(x0_min, x0_max, h), np.arange(x1_min, x1_max, h)) #получаем координатную матрицу из координатных векторов
Z = perceptron.predict(np.c_[xx0.ravel(), xx1.ravel()])
Z = Z.reshape(xx0.shape) # Изменяем форму Z в соответствии с сеткой
# Применяем обученную модель к сетке точек и отображаем результат как цветовую карту
ax.contourf(xx0, xx1, Z, cmap=cmap, alpha=.8)
scatter_train = ax.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm_bright, marker='o', label='Обучающая выборка')
scatter_test = ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm_bright2, marker='x', label='Тестовая выборка')
ax.legend(handles=[scatter_train, scatter_test], labels=['Обучающая выборка', 'Тестовая выборка'])
st.pyplot(fig)
# Создание объекта модели персептрона
on = st.toggle('Персептрон')
if on:
perceptron = Perceptron(max_iter=100, random_state=0)
print_perceptron(perceptron)
# Создание объекта модели персептрона
on = st.toggle('Многослойный персептрон с 10-ю нейронами в скрытом слое (alpha = 0.01)')
if on:
perceptron = MLPClassifier(hidden_layer_sizes=(10,), alpha=0.01, max_iter=1000, random_state=0)
print_perceptron(perceptron)
# Создание объекта модели персептрона
on = st.toggle('Многослойный персептрон с 100-а нейронами в скрытом слое (alpha = 0.01)')
if on:
perceptron = MLPClassifier(hidden_layer_sizes=(100,), alpha=0.01, max_iter=1000, random_state=0)
print_perceptron(perceptron)