Копирование содержимого запрещено
Лабораторная работа №3
Введение
Эта лабораторная работа посвящена корреляционно-регрессионному анализу, архитектуре нейронной сети и методу обратного распространения ошибки. Набор данных, используемый в этой работе, — это данные об ирисах Фишера, которые являются классическим набором данных в области машинного обучения и статистики. Он был впервые представлен Рональдом Фишером в 1936 году и иногда называется набором данных "Ирисы Фишера" или "Ирисы Фишера-Андерсона".
Набор данных "Ирисы Фишера" включает по 50 образцов каждого из трех видов ирисов:
- Ирис щетинистый (Iris setosa): вид с отличительными признаками, что делает его легче классифицировать по сравнению с другими двумя.
- Ирис версиколор (Iris versicolor): вид, который сложнее отличить от Iris virginica на основе предоставленных признаков.
- Ирис виргинский (Iris virginica): еще один вид, похожий на Iris versicolor, что затрудняет их различение.
От каждого образца были измерены четыре признака: длина и ширина чашелистиков и лепестков в сантиметрах. Цель работы обычно заключается в создании модели, которая может классифицировать вид ириса на основе этих четырех признаков.
Ключевые понятия
1. Корреляционно-регрессионный анализ
Это изучение взаимосвязей между переменными для понимания того, как они коррелируют друг с другом и как одну переменную можно использовать для предсказания другой.
2. Архитектура нейронной сети
Это схема и структура нейронной сети, включая количество слоев, типы слоев (входной, скрытый, выходной), количество нейронов в каждом слое и связи между ними.
3. Обратное распространение ошибки
Это метод, используемый в нейронных сетях для вычисления градиента функции ошибки относительно весов сети. Он используется для корректировки весов с целью минимизации ошибки в предсказаниях модели.
4. Ирисы Фишера
Это набор данных, содержащий измерения ирисов. Лабораторная работа включает использование набора данных "Ирисы Фишера" для обучения нейронной сети, применение метода обратного распространения ошибки для улучшения работы модели и анализ корреляций и взаимосвязей между признаками для лучшего понимания данных и задачи классификации.
Этапы выполнения работы
- Импортируем необходимые библиотеки и классы.
- Импортируем датасет с помощью Scikit-learn.
- Разделяем датасет на входные данные (features) и целевые данные (labels).
- Разделяем данные на обучающую и тестовую выборки.
- Определяем функцию ошибки (Mean Squared Error, MSE).
- Создаем нейронную сеть с помощью Keras.
- Обучаем модель на обучающей выборке.
- Проверяем качество модели на тестовой выборке.
- Проводим оценку прогнозирования.
Реализация на Python
# Шаг 1: Импорт необходимых библиотек и классов
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import Adam
# Шаг 2: Импортировать датасет
iris = load_iris()
X = iris.data
y = iris.target
# Шаг 3: Разделить датасет на входные и целевые данные
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Шаг 4: В полученных данных выделить обучающую и тестовую выборку
# (уже сделано на шаге 3)
# Шаг 5: Определить функцию ошибки (MSE)
# (будет использоваться в качестве метрики при обучении модели)
# Шаг 6: Создать Нейросеть
model = Sequential()
model.add(Dense(16, input_shape=(4,), activation='relu')) # Входной слой с 16 нейронами
model.add(Dense(16, activation='relu')) # Скрытый слой с 16 нейронами
model.add(Dense(3, activation='softmax')) # Выходной слой с 3 нейронами (3 класса)
# Компилируем модель
model.compile(optimizer=Adam(learning_rate=0.001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# Шаг 7: Обучить модель
model.fit(X_train, y_train, epochs=100, batch_size=8, verbose=1)
# Шаг 8: Протестировать модель
loss, accuracy = model.evaluate(X_test, y_test, verbose=0)
print(f"Test Loss: {loss:.4f}")
print(f"Test Accuracy: {accuracy:.4f}")
# Шаг 9: Провести оценку прогнозирования
y_pred = model.predict(X_test)
y_pred_classes = np.argmax(y_pred, axis=1)
mse = mean_squared_error(y_test, y_pred_classes)
print(f"Mean Squared Error: {mse:.4f}")