Добавил:
Я за два дня прошел весь курс ТВиМС Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

zadan19

.py
Скачиваний:
0
Добавлен:
20.06.2025
Размер:
3.75 Кб
Скачать
# 1. Импортируем все необходимые библиотеки
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler

# 2. Загружаем и подготавливаем данные
# Загружаем датасет с рукописными цифрами
digits = load_digits()
X, y = digits.data, digits.target

# Разделяем данные на обучающую и тестовую выборки (80% на 20%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 3. Масштабируем данные (важный шаг для нейронных сетей)
# Создаем объект для масштабирования
scaler = StandardScaler()

# Настраиваем scaler на обучающих данных и сразу же преобразуем их
X_train_scaled = scaler.fit_transform(X_train)

# Применяем то же самое масштабирование к тестовым данным
X_test_scaled = scaler.transform(X_test)

# 4. Проводим эксперимент: тестируем разное количество нейронов
# Список для хранения результатов точности
accuracies = [] 
# Диапазон количества нейронов, который мы будем проверять
neuron_counts = range(1, 151) 

print("Начинаем тестирование моделей...")

# Запускаем цикл
for n_neurons in neuron_counts:
    # Создаем модель с текущим количеством нейронов
    # Увеличили max_iter до 1000, чтобы избежать проблем со сходимостью
    mlp = MLPClassifier(hidden_layer_sizes=(n_neurons,), max_iter=1000, random_state=42)
    
    # Обучаем модель на подготовленных (масштабированных) данных
    mlp.fit(X_train_scaled, y_train)
    
    # Делаем предсказание на тестовых данных
    predictions = mlp.predict(X_test_scaled)
    
    # Рассчитываем точность и сохраняем результат
    accuracy = accuracy_score(y_test, predictions)
    accuracies.append(accuracy)

print("Тестирование завершено!")

# 5. Визуализируем результаты
# Настраиваем стиль и размер графика
plt.style.use('seaborn-v0_8-whitegrid')
plt.figure(figsize=(14, 7))

# Строим график: по оси X - количество нейронов, по оси Y - точность
plt.plot(neuron_counts, accuracies, marker='o', linestyle='-', markersize=4, label='Точность модели')

# Добавляем информативные подписи
plt.title('Зависимость точности MLPClassifier от количества нейронов (с масштабированием)', fontsize=16)
plt.xlabel('Количество нейронов в скрытом слое', fontsize=12)
plt.ylabel('Точность на тестовых данных', fontsize=12)
plt.xticks(range(0, 151, 10)) # Делаем разметку на оси X более частой для удобства
plt.yticks([0.9, 0.92, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99, 1.0]) # Более детальная разметка оси Y
plt.grid(True)
plt.legend()
plt.show()
Соседние файлы в предмете Программирование на Python