Простой классификатор распознавания рукописных символов

PythonPythonBeginner
Практиковаться сейчас

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

Введение

В этом проекте вы научитесь создавать простой классификатор распознавания рукописных символов с использованием набора данных DIGITS, предоставляемого библиотекой scikit-learn. Распознавание рукописных символов является классической задачей в машинном обучении, и этот проект проведет вас через процесс создания классификатора, который может точно предсказывать цифру, представленную на изображении рукописного символа.

🎯 Задачи

В этом проекте вы научитесь:

  • Загружать набор данных DIGITS и разделять его на тренировочный и тестовый наборы
  • Создавать и обучать классификатор на основе методов опорных векторов (SVM) на тренировочных данных
  • Реализовывать функцию для классификации изображения одного рукописного символа
  • Тестировать классификатор на примере изображения рукописного символа

🏆 Достижения

После завершения этого проекта вы сможете:

  • Загружать и предобрабатывать набор данных для задач машинного обучения
  • Создавать и обучать классификатор SVM с использованием scikit-learn
  • Реализовывать функцию предсказания для классификации новых образцов
  • Разбираться в основах распознавания рукописных символов с использованием методов машинного обучения

Загрузка набора данных Digits

В этом шаге вы научитесь загружать набор данных DIGITS из библиотеки scikit-learn. Следуйте шагам ниже, чтобы выполнить этот шаг:

Откройте файл handwritten_digit_classifier.py, импортируйте необходимые библиотеки:

from sklearn import datasets
from sklearn.model_selection import train_test_split

Загрузите набор данных DIGITS с использованием функции datasets.load_digits():

digits = datasets.load_digits()
X, y = digits.data, digits.target

Переменная X содержит сглаженные изображения размером 8x8 пикселей, а переменная y содержит соответствующие метки цифр (от 0 до 9).

Разделите набор данных на тренировочный и тестовый наборы с использованием train_test_split():

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

Это разделит данные на 80% тренировочного и 20% тестового наборов.

✨ Проверить решение и практиковаться

Создание и обучение классификатора SVM

В этом шаге вы научитесь создавать и обучать классификатор на основе методов опорных векторов (SVM) на тренировочных данных. Следуйте шагам ниже, чтобы выполнить этот шаг:

В файле handwritten_digit_classifier.py импортируйте класс SVC из модуля sklearn.svm:

from sklearn.svm import SVC

Создайте классификатор SVM с линейным ядром и параметром регуляризации 1:

clf = SVC(kernel="linear", C=1)

Обучите классификатор SVM на тренировочных данных с использованием метода fit():

clf.fit(X_train, y_train)

Это обучит классификатор SVM на тренировочных данных.

✨ Проверить решение и практиковаться

Реализация функции предсказания

В этом шаге вы реализуете функцию predict(sample) для классификации изображения одного рукописного символа. Следуйте шагам ниже, чтобы выполнить этот шаг:

В файле handwritten_digit_classifier.py импортируйте модуль numpy:

import numpy as np

Определите функцию predict(sample):

def predict(sample):
    """
    Параметры:
    sample -- Список значений пикселей изображения рукописного символа

    Возвращает:
    pred -- Предсказанная метка для изображения рукописного символа в виде целого числа
    """
    ## Преобразуйте входной образец в форму
    sample = np.array(sample).reshape(1, -1)

    ## Используйте обученный классификатор для предсказания
    pred = clf.predict(sample)

    return int(pred[0])

В функции predict(sample):

  • Преобразуйте входной список sample в массив NumPy и измените его форму, чтобы получить один образец с тем же форматом, что и тренировочные данные.
  • Используйте обученный классификатор clf для предсказания метки для преобразованного входного образца с использованием метода predict().
  • Возвращаем предсказанную метку в виде целого числа.
✨ Проверить решение и практиковаться

Тестирование классификатора

Теперь вы можете протестировать функцию predict(sample) на примере изображения рукописного символа. Вот пример в файле handwritten_digit_classifier.py:

sample = [
    0.0, 0.0, 6.0, 14.0, 4.0, 0.0, 0.0, 0.0,
    0.0, 0.0, 11.0, 16.0, 10.0, 0.0, 0.0, 0.0,
    0.0, 0.0, 8.0, 14.0, 16.0, 2.0, 0.0, 0.0,
    0.0, 0.0, 1.0, 12.0, 12.0, 11.0, 0.0, 0.0,
    0.0, 0.0, 0.0, 0.0, 11.0, 3.0, 0.0, 0.0,
    0.0, 0.0, 0.0, 0.0, 5.0, 11.0, 0.0, 0.0,
    0.0, 1.0, 4.0, 4.0, 7.0, 16.0, 2.0, 0.0,
    0.0, 7.0, 16.0, 16.0, 13.0, 11.0, 1.0, 0.0
]

result = predict(sample)
print("Predicted Label:", result)

Это должно вывести предсказанную метку для заданного изображения рукописного символа.

Запустите файл handwritten_digit_classifier.py, чтобы выполнить пример:

python handwritten_digit_classifier.py
## Predicted Label: 9
✨ Проверить решение и практиковаться

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.