Введение
В этом проекте вы научитесь создавать простой классификатор распознавания рукописных символов с использованием набора данных 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, чтобы улучшить свои навыки.



