Skip to content

Classificação em Machine Learning

Nesta aula, vamos estudar classificação de forma prática e tecnicamente correta: formulação do problema, escolha de algoritmo, avaliação com métricas adequadas e interpretação de erros do modelo.

Atividades Práticas

As seguintes atividades foram preparadas para reforçar os conceitos abordados:

Notebooks-Classificação (Download)

Datasets

Os laboratórios utilizam os seguintes conjuntos de dados: - renda: dataset de características demográficas usado no Lab 3.

O que é Classificação?

A classificação em Machine Learning é uma tarefa supervisionada em que o modelo aprende uma função que mapeia entradas (features) para uma classe discreta.

Em termos simples: dado um novo exemplo, o modelo escolhe qual rótulo é o mais provável.

Tipos de Problemas de Classificação

  1. Classificação binária: duas classes possíveis.
    Exemplo: spam vs. não spam.
  2. Classificação multiclasse: mais de duas classes e cada amostra pertence a uma única classe.
    Exemplo: reconhecer o dígito de 0 a 9.
  3. Classificação multilabel: uma mesma amostra pode ter vários rótulos ao mesmo tempo.
    Exemplo: uma imagem marcada como "praia", "pôr do sol" e "pessoas".

Aplicações comuns:

  • Saúde (triagem e apoio ao diagnóstico)
  • Finanças (risco de crédito e fraude)
  • Indústria (detecção de falhas)
  • Visão computacional e NLP

Fluxo de Treinamento Recomendado

Em cenários reais, o fluxo mínimo recomendado é:

  1. Separar os dados em treino e teste (e validação quando necessário).
  2. Ajustar pré-processamento e modelo apenas no treino para evitar vazamento de dados.
  3. Selecionar hiperparâmetros com validação cruzada.
  4. Avaliar no teste apenas no final.

Boas práticas importantes:

  • Em classificação, prefira train_test_split(..., stratify=y) para manter proporções de classes.
  • Use Pipeline quando houver transformação de dados (escala, imputação, encoding).
  • Não escolha modelo usando o conjunto de teste.

Principais Algoritmos de Classificação

  • KNN: baseado em vizinhança; sensível à escala das features.
  • Árvores/Random Forest: capturam relações não lineares e interações.
  • Naive Bayes: simples, rápido e forte baseline para texto.
  • Regressão Logística: baseline robusto para binário e também multiclasse (multinomial).
  • SVM: bom desempenho em margens bem definidas, pode exigir tuning cuidadoso.
  • Redes neurais: alta capacidade, especialmente em dados complexos (imagem, texto, áudio).

Exemplo em Python (pipeline + avaliação básica)

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score

# 1) Carrega dados
data = load_iris()
X, y = data.data, data.target

# 2) Split estratificado
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)

# 3) Pipeline (escala + modelo)
model = Pipeline([
    ("scaler", StandardScaler()),
    ("clf", LogisticRegression(max_iter=1000)),
])

# 4) Treina e prevê
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

# 5) Avalia
print(f"Acurácia: {accuracy_score(y_test, y_pred):.3f}")
print("\nMatriz de confusão:")
print(confusion_matrix(y_test, y_pred))
print("\nRelatório de classificação:")
print(classification_report(y_test, y_pred, digits=3))

Métricas de Avaliação

Não existe "métrica universal". A métrica correta depende do custo do erro no contexto do problema.

Matriz de Confusão

A matriz de confusão mostra, para cada classe, quantos exemplos foram classificados corretamente e onde o modelo erra.

Para classificação binária:

Predito Positivo Predito Negativo
Real Positivo Verdadeiro Positivo (VP) Falso Negativo (FN)
Real Negativo Falso Positivo (FP) Verdadeiro Negativo (VN)

Métricas principais (binário)

  1. Acurácia
\text{Acurácia} = \frac{VP + VN}{VP + VN + FP + FN}

Boa em classes balanceadas. Pode ser enganosa em dados desbalanceados.

  1. Precisão (Precision)
\text{Precisão} = \frac{VP}{VP + FP}

Importante quando falso positivo é caro (ex.: bloqueio indevido).

  1. Revocação (Recall/Sensibilidade)
\text{Revocação} = \frac{VP}{VP + FN}

Importante quando falso negativo é caro (ex.: doença não detectada).

  1. F1-score
\text{F1} = 2 \times \frac{\text{Precisão} \times \text{Revocação}}{\text{Precisão} + \text{Revocação}}

Útil quando há desequilíbrio de classes e queremos equilíbrio entre precisão e revocação.

Outras métricas úteis

  • Acurácia balanceada: média do recall por classe; útil com desbalanceamento.
  • ROC-AUC: qualidade da ordenação de scores em diferentes limiares.
  • PR-AUC: geralmente mais informativa que ROC-AUC em classes muito raras.

Exemplo em Python (métricas)

from sklearn.metrics import (
    accuracy_score,
    balanced_accuracy_score,
    confusion_matrix,
    classification_report,
)

print(f"Acurácia: {accuracy_score(y_test, y_pred):.3f}")
print(f"Balanced accuracy: {balanced_accuracy_score(y_test, y_pred):.3f}")

print("\nMatriz de confusão:")
print(confusion_matrix(y_test, y_pred))

print("\nRelatório de classificação:")
print(classification_report(y_test, y_pred, digits=3))

Em problemas multiclasse, observe os agregados macro avg (peso igual por classe) e weighted avg (ponderado pelo suporte de cada classe).


Simuladores interativos

KNN


Classificação KNN — ajuste k e explore a fronteira de decisão

Acurácia:
x₁, x₂ no quadrado [0,10] × [0,10] • azul = classe 0 • vermelho = classe 1
Como funciona

O KNN prevê a classe de um ponto pela maioria entre seus k vizinhos mais próximos. A opção “ponderar por distância” dá mais peso aos vizinhos mais próximos. A região colorida mostra a previsão do classificador; os pontos são os dados reais. Ajuste k e o ruído para observar overfitting (k pequeno) vs underfitting (k grande).


Regressão logística


Classificação — Regressão Logística

Acurácia:
x₁, x₂ em [0,10] × [0,10] • azul = classe 0 • vermelho = classe 1 • contorno preto = fronteira p=0.5