
Добавил:
renka1
Я за два дня прошел весь курс ТВиМС
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:zadan19
.py# 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