Набор данных MNIST – популярный эталон в области машинного обучения и компьютерного зрения. Он состоит из большой коллекции рукописных цифр, каждая из которых представлена в виде изображения в оттенках серого размером 28×28. В этой статье мы рассмотрим различные методы работы с набором данных MNIST, начиная от традиционных алгоритмов машинного обучения и заканчивая передовыми методами глубокого обучения. Мы предоставим примеры кода на Python с использованием популярных библиотек, таких как scikit-learn, TensorFlow и Keras.
-
Предварительная обработка данных.
Перед применением любого алгоритма машинного обучения необходимо предварительно обработать данные. С набором данных MNIST обычно выполняются следующие шаги:- Загрузка набора данных: мы можем получить набор данных MNIST, используя библиотеку OpenML в Python.
- Изменение формы изображений. Входные изображения обычно преобразуются в плоское векторное представление.
- Нормализация. Масштабирование значений пикселей в диапазоне от 0 до 1 может повысить производительность многих алгоритмов.
-
Традиционные алгоритмы машинного обучения:
- Логистическая регрессия: простой и широко используемый алгоритм двоичной классификации.
- k-Nearest Neighbours (k-NN): непараметрический алгоритм, который классифицирует образцы на основе их близости к помеченным экземплярам.
- Машины опорных векторов (SVM): мощный алгоритм как для линейной, так и для нелинейной классификации.
- Случайные леса: ансамблевый метод, который объединяет несколько деревьев решений для прогнозирования.
-
Методы глубокого обучения:
- Сверточные нейронные сети (CNN): высокоэффективные для классификации изображений, CNN используют пространственную структуру данных.
- Рекуррентные нейронные сети (RNN): полезны для последовательных данных, таких как распознавание рукописных цифр.
- Перенос обучения. Использование предварительно обученных моделей, таких как VGG или ResNet, может повысить производительность при ограниченных данных для обучения.
-
Оценка модели:
- Разделение набора данных: разделение набора данных MNIST на обучающий и тестовый наборы для оценки эффективности модели.
- Перекрестная проверка: применение k-кратной перекрестной проверки для оценки способности алгоритма к обобщению.
- Метрики оценки. Точность, точность, полнота и показатель F1 обычно используются для задач классификации.
Примеры кода.
Вот упрощенные фрагменты кода, демонстрирующие реализацию некоторых методов, описанных выше:
# Fetching the MNIST dataset using OpenML
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1)
# Preprocessing the data
X = mnist['data']
y = mnist['target']
# Reshaping and normalizing the images
X = X / 255.0
X = X.reshape(-1, 28, 28, 1)
# Splitting the dataset into training and testing sets
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Training a Convolutional Neural Network (CNN) model using Keras
from tensorflow import keras
from tensorflow.keras import layers
model = keras.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
layers.MaxPooling2D((2, 2)),
layers.Flatten(),
layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))
В этой статье мы рассмотрели различные методы работы с набором данных MNIST. Мы рассмотрели традиционные алгоритмы машинного обучения, такие как логистическая регрессия, k-NN, SVM и случайные леса, а также методы глубокого обучения, такие как CNN, RNN и трансферное обучение. Мы также обсудили важные шаги в конвейере машинного обучения, включая предварительную обработку данных и оценку модели. Реализуя эти методы с примерами кода, вы сможете получить четкое представление о том, как работать с набором данных MNIST и эффективно применять методы машинного обучения.