Классификация рукописных цифр с помощью классификатора MLP

Machine LearningMachine LearningBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом руководстве показано, как создать классификатор многослойного персептрона (MLPClassifier) с использованием библиотеки Scikit-learn для классификации рукописных цифр из набора данных MNIST. Мы также визуализируем веса первого слоя многослойного персептрона, чтобы понять, как он обучается.

Советы по виртуальной машине

После запуска виртуальной машины (VM) нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если у вас возникнут проблемы во время обучения, не стесняйтесь обращаться к Labby. После занятия дайте обратную связь, и мы оперативно решим проблему для вас.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/neural_network("Neural Network Models") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/exceptions("Exceptions and Warnings") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/neural_network -.-> lab-49216{{"Классификация рукописных цифр с помощью классификатора MLP"}} sklearn/model_selection -.-> lab-49216{{"Классификация рукописных цифр с помощью классификатора MLP"}} sklearn/datasets -.-> lab-49216{{"Классификация рукописных цифр с помощью классификатора MLP"}} sklearn/exceptions -.-> lab-49216{{"Классификация рукописных цифр с помощью классификатора MLP"}} ml/sklearn -.-> lab-49216{{"Классификация рукописных цифр с помощью классификатора MLP"}} end

Импорт библиотек

Начнем с импорта необходимых библиотек для этого проекта.

import warnings
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.exceptions import ConvergenceWarning
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split

Загрузка данных

Далее мы загрузим набор данных MNIST с помощью функции fetch_openml из библиотеки Scikit-learn.

X, y = fetch_openml(
    "mnist_784", version=1, return_X_y=True, as_frame=False, parser="pandas"
)

Предварительная обработка данных

Мы нормализуем данные, разделив каждое значение пикселя на 255.0, которое является максимальным значением пикселя.

X = X / 255.0

Разделение данных

Мы разделим набор данных на обучающую и тестовую выборки с помощью функции train_test_split.

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0, test_size=0.7)

Обучение MLPClassifier

Мы создадим классификатор MLPClassifier (Многослойный персептрон) с одним скрытым слоем, содержащим 40 нейронов. Из-за ограничений ресурсов мы обучим MLP только на 8 итерациях. Также мы обработаем предупреждение ConvergenceWarning, которое будет выдано, так как модель не сойдется за ограниченное количество итераций.

mlp = MLPClassifier(
    hidden_layer_sizes=(40,),
    max_iter=8,
    alpha=1e-4,
    solver="sgd",
    verbose=10,
    random_state=1,
    learning_rate_init=0.2,
)

with warnings.catch_warnings():
    warnings.filterwarnings("ignore", category=ConvergenceWarning, module="sklearn")
    mlp.fit(X_train, y_train)

Оценка модели

Мы оценим классификатор MLPClassifier, вычислив его точность на обучающей и тестовой выборках.

print("Training set score: %f" % mlp.score(X_train, y_train))
print("Test set score: %f" % mlp.score(X_test, y_test))

Визуализация весов

Наконец, мы визуализируем веса первого слоя многослойного персептрона (MLP). Мы создадим сетку из 4x4 подграфиков и отобразим каждый вес в виде изображения в оттенках серого размером 28x28 пикселей.

fig, axes = plt.subplots(4, 4)
vmin, vmax = mlp.coefs_[0].min(), mlp.coefs_[0].max()
for coef, ax in zip(mlp.coefs_[0].T, axes.ravel()):
    ax.matshow(coef.reshape(28, 28), cmap=plt.cm.gray, vmin=0.5 * vmin, vmax=0.5 * vmax)
    ax.set_xticks(())
    ax.set_yticks(())

plt.show()

Резюме

В этом руководстве мы научились создавать классификатор MLPClassifier (Многослойный персептрон) с использованием библиотеки Scikit-learn для классификации рукописных цифр из набора данных MNIST. Мы также визуализировали веса первого слоя многослойного персептрона, чтобы понять, как он обучается.