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)
- Lab 1: Flores Iris
Introdução aos conceitos básicos de classificação usando o dataset Iris. - Lab 2: Classificação de dígitos
Foco em problema multiclasse com imagens de dígitos (0 a 9). - Lab 3: Classificação de renda
Problema binário para prever se a renda anual é maior que 50 mil dólares.
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¶
- Classificação binária: duas classes possíveis.
Exemplo: spam vs. não spam. - Classificação multiclasse: mais de duas classes e cada amostra pertence a uma única classe.
Exemplo: reconhecer o dígito de 0 a 9. - 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 é:
- Separar os dados em treino e teste (e validação quando necessário).
- Ajustar pré-processamento e modelo apenas no treino para evitar vazamento de dados.
- Selecionar hiperparâmetros com validação cruzada.
- 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
Pipelinequando 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)¶
- Acurácia
Boa em classes balanceadas. Pode ser enganosa em dados desbalanceados.
- Precisão (Precision)
Importante quando falso positivo é caro (ex.: bloqueio indevido).
- Revocação (Recall/Sensibilidade)
Importante quando falso negativo é caro (ex.: doença não detectada).
- F1-score
Ú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
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).