Introdução
Neste projeto, você aprenderá como construir um classificador simples de reconhecimento de caracteres manuscritos usando o conjunto de dados DIGITS fornecido pela biblioteca scikit-learn. O reconhecimento de caracteres manuscritos é um problema clássico em machine learning (aprendizado de máquina), e este projeto irá guiá-lo através do processo de criação de um classificador que pode prever com precisão o dígito representado em uma imagem de caractere manuscrito.
🎯 Tarefas
Neste projeto, você aprenderá:
- Como carregar o conjunto de dados DIGITS e dividi-lo em conjuntos de treinamento e teste
- Como criar e treinar um classificador Support Vector Machine (SVM) nos dados de treinamento
- Como implementar uma função para classificar uma única imagem de caractere manuscrito
- Como testar o classificador com uma imagem de exemplo de caractere manuscrito
🏆 Conquistas
Após concluir este projeto, você será capaz de:
- Carregar e pré-processar um conjunto de dados para tarefas de machine learning
- Criar e treinar um classificador SVM usando scikit-learn
- Implementar uma função de predição para classificar novas amostras
- Compreender os fundamentos do reconhecimento de caracteres manuscritos usando técnicas de machine learning
Carregar o Conjunto de Dados Digits
Nesta etapa, você aprenderá como carregar o conjunto de dados DIGITS da biblioteca scikit-learn. Siga os passos abaixo para completar esta etapa:
Abra o arquivo handwritten_digit_classifier.py e importe as bibliotecas necessárias:
from sklearn import datasets
from sklearn.model_selection import train_test_split
Carregue o conjunto de dados DIGITS usando a função datasets.load_digits():
digits = datasets.load_digits()
X, y = digits.data, digits.target
A variável X contém as imagens de pixels 8x8 achatadas, e a variável y contém os rótulos dos dígitos correspondentes (0-9).
Divida o conjunto de dados em conjuntos de treinamento e teste usando train_test_split():
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
Isso dividirá os dados em 80% para treinamento e 20% para teste.
Criar e Treinar o Classificador SVM
Nesta etapa, você aprenderá como criar e treinar um classificador Support Vector Machine (SVM) nos dados de treinamento. Siga os passos abaixo para completar esta etapa:
Importe a classe SVC do módulo sklearn.svm no arquivo handwritten_digit_classifier.py:
from sklearn.svm import SVC
Crie um classificador SVM com um kernel linear e um parâmetro de regularização de 1:
clf = SVC(kernel="linear", C=1)
Treine o classificador SVM nos dados de treinamento usando o método fit():
clf.fit(X_train, y_train)
Isso treinará o classificador SVM nos dados de treinamento.
Implementar a Função de Predição
Nesta etapa, você implementará a função predict(sample) para classificar uma única imagem de caractere manuscrito. Siga os passos abaixo para completar esta etapa:
Importe o módulo numpy no arquivo handwritten_digit_classifier.py:
import numpy as np
Defina a função predict(sample):
def predict(sample):
"""
Parameters:
sample -- Uma lista de valores de pixel de uma imagem de caractere manuscrito
Returns:
pred -- O rótulo predito para a imagem do caractere manuscrito como um inteiro
"""
## Reshape the input sample
sample = np.array(sample).reshape(1, -1)
## Use the trained classifier to make a prediction
pred = clf.predict(sample)
return int(pred[0])
Na função predict(sample):
- Converta a lista
samplede entrada em um array NumPy e redimensione-o para ter uma única amostra com o mesmo formato dos dados de treinamento. - Use o classificador
clftreinado para prever o rótulo para a amostra de entrada redimensionada usando o métodopredict(). - Retorne o rótulo predito como um inteiro.
Testar o Classificador
Agora você pode testar a função predict(sample) com uma amostra de imagem de caractere manuscrito. Aqui está um exemplo no arquivo 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)
Isso deve exibir o rótulo predito para a imagem de caractere manuscrito fornecida.
Execute o arquivo handwritten_digit_classifier.py para executar o exemplo:
python handwritten_digit_classifier.py
## Predicted Label: 9
Resumo
Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.



