Classificador Simples de Reconhecimento de Caracteres Manuscritos

PythonBeginner
Pratique Agora

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.

✨ Verificar Solução e Praticar

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.

✨ Verificar Solução e Praticar

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 sample de entrada em um array NumPy e redimensione-o para ter uma única amostra com o mesmo formato dos dados de treinamento.
  • Use o classificador clf treinado para prever o rótulo para a amostra de entrada redimensionada usando o método predict().
  • Retorne o rótulo predito como um inteiro.
✨ Verificar Solução e Praticar

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
✨ Verificar Solução e Praticar

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.